предисловие
В этой статье представлен PyTea, статический анализатор моделей Pytorch, который может сканировать и анализировать ошибки формы тензора в модели за считанные секунды без запуска кода. Как им пользоваться прикреплено в конце статьи.
Эта статья воспроизводится из сердца машины
Редактировать: Техническое руководство по резюме
Обратите внимание на публичный аккаунтТехническое руководство по резюме, уделяя особое внимание техническому обзору компьютерного зрения, отслеживанию новейших технологий и интерпретации классических статей.
Несоответствие формы тензора — одна из важных ошибок, которые могут возникнуть при машинном обучении глубоких нейронных сетей. Поскольку обучение нейронной сети дорого и требует много времени, запуск статического анализа перед выполнением кода выполняется намного быстрее, чем выполнение и поиск ошибок.
Поскольку статический анализ выполняется без запуска кода, он может помочь разработчикам программного обеспечения и специалистам по обеспечению качества найти структурные ошибки, уязвимости в системе безопасности и другие проблемы в коде, чтобы обеспечить общее качество программного обеспечения.
По сравнению с динамическим анализом программы, статический анализ имеет преимущества, заключающиеся в том, что программа не выполняется в действительности, он широко используется исследователями из-за его быстрой скорости выполнения и высокой эффективности. Compilation (Coverity), тестовый стенд LDRA, разработанный Ливерпульским университетом и т. д.
Недавно исследователи из Сеульского национального университета в Южной Корее предложили еще один статический анализатор, PyTea, который может автоматически обнаруживать ошибки формы тензора в проектах PyTorch. Протестировано на наличие кода ошибки тензора, включая проекты в репозитории PyTorch и в StackOverflow. Оказывается, PyTea может успешно обнаруживать ошибки формы тензора в этих кодах за считанные секунды.
-
Адрес бумаги:АР Вест V.org/PDF/2112.09…
-
адрес проекта:github.com/ropas/pytea
Найдите PyTea с неправильной формой тензора за секунды
Инструменты PyTea могут статически сканировать программы PyTorch и обнаруживать возможные ошибки формы. PyTea анализирует полный путь обучения и оценки реальных приложений Python/PyTorch с дополнительной обработкой данных и сочетанием библиотек (например, Torchvision, NumPy, PIL).
PyTea работает следующим образом: при наличии источника PyTorch для ввода PyTea статически отслеживает каждый возможный путь выполнения, собирает ограничения формы тензора, необходимые для последовательности тензорных операций на пути, и решает, удовлетворяются ли ограничения или нет (отсюда возможные ошибка формы).
В частности: как показано на рисунке ниже, PyTea сначала переводит исходный код Python на язык ядра, внутреннее представление PyTea (PyTea IR). Затем он отслеживает все возможные пути выполнения преобразованного IR и собирает ограничения на форму тензора, которые определяют условия, при которых код будет выполняться без ошибок формы. PyTea предоставляет собранный набор ограничений решателю SMT (теории выполнимости по модулю) Z3, чтобы судить, выполнимы ли эти ограничения для каждой возможной входной формы. На основе результатов решателя PyTea делает вывод, какой путь содержит неправильную форму. Если решение ограничений для Z3 занимает слишком много времени, PyTea останавливается с подсказкой «не знаю».
Общая структура PyTea.
PyTea состоит из двух анализаторов, онлайн-анализатор: node.js (TypeScript/JavaScript), офлайн-анализатор: Z3/Python.
-
Онлайн-анализатор: находит несоответствия формы и злоупотребления параметрами API на основе числовых диапазонов. Если PyTea обнаружит какие-либо ошибки при анализе кода, он остановится на этой позиции и уведомит пользователя об ошибке и нарушении ограничения;
-
Автономный анализатор: сгенерированные ограничения передаются в Z3. Z3 решит набор ограничений для каждого пути и напечатает первое нарушенное ограничение (если оно есть).
Сначала посмотрим на результат отображения, онлайн-анализатор нашел ошибку:
Оффлайн-анализатор обнаружил ошибки:
Чтобы лучше понять процесс статического анализа PyTea, давайте представим основные технические детали, включая структуру программы PyTorch, ошибку формы тензора, PyTea IR и т. д., чтобы читатели могли лучше понять процесс выполнения.
Во-первых, это структура программы PyTorch.Современные фреймворки машинного обучения, такие как PyTorch, TensorFlow и Keras, требуют использования Python API для построения нейронных сетей. Обучение нейронных сетей с использованием таких фреймворков в основном проходит по стандартной процедуре, состоящей из четырех следующих этапов.
В PyTorch структура обычного обучающего кода нейронной сети.
Для обучения модели необходимо сначала определить структуру сети.На рисунке 2 показан упрощенный код классификации изображений, взятый из официального примера классификации PyTorch MNIST:
Здесь приведенный выше код сначала определяет ряд слоев нейронной сети и превращает их в один модуль нейронной сети. Чтобы правильно собрать слой, тензор возврата предыдущего слоя должен удовлетворять входным требованиям следующего слоя. Сеть создается с параметрами инициализации гиперпараметров, такими как количество скрытых слоев. Далее входной набор данных предварительно обрабатывается и корректируется в соответствии с требованиями сети. Начиная с этого этапа, каждый набор данных разбивается на более мелкие фрагменты одинакового размера (мини-пакеты). Наконец, начинается основной цикл, и мини-пакеты последовательно загружаются в сеть. Эпоха — это один цикл, который передает весь набор данных в сеть, а количество эпох обычно зависит от назначения и структуры нейронной сети. За исключением основного цикла обучения, который зависит от размера набора данных, включая количество эпох, количество итераций в обучающем коде в большинстве случаев определяется как постоянное.
При построении модели несоответствие между формами входного и выходного тензора между сетевыми слоями является ошибкой формы тензора. Часто ошибки формы трудно найти вручную, и их можно обнаружить, только запустив программу с фактическими входными данными. Следующее изображение представляет собой типичную ошибку формы тензора (простая модификация рисунка 2), и вы вообще не увидите ошибку, если не будете внимательно присматриваться:
Для неправильной формы тензора (например, неправильного типа на приведенном выше рисунке) PyTea переводит исходный код Python в PyTea IR для поиска, как показано на следующем рисунке в качестве примера PyTea IR:
Как упоминалось выше, PyTea отслеживает все возможные пути выполнения преобразованного IR и собирает ограничения на форму тензора. На самом деле ограничения — это то, что нужно приложению PyTorch для его выполнения без каких-либо ошибок формы тензора. Например, два операнда операции умножения матриц должны иметь одинаковое количество измерений. На следующем рисунке показан абстрактный синтаксис ограничений:
Скриншот абстрактной синтаксической части ограничений
Как использовать ПиТеа
Во-первых, требования к среде установки: node.js >= 12.x, python >= 3.8, z3-solver >= 4.8.
Для установки и использования используйте следующий код:
# install node.js
sudo apt-get install nodejs
# install python z3-solver
pip install z3-solver
# download pytea
wget https://github.com/ropas/pytea/releases/download/v0.1.0/pytea.zip
unzip pytea.zip
# run pytea
python bin/pytea.py path/to/source.py
# run example file
python bin/pytea.py packages/pytea/pytest/basics/scratch.py
Скомпилируйте код:
# install dependencies
npm run install:all
pip install z3-solver
# build
npm run build
Читайте связанные статьи:
Инструмент отладки кода Pytorch --torchsnooper
Совместное использование ресурсов | Ускорьте написание эссе с FiftyOne
Добро пожаловать в техническое руководство CV для общедоступной учетной записи, в котором основное внимание уделяется техническому обзору компьютерного зрения, отслеживанию новейших технологий и интерпретации классических статей.
Другие статьи
ICCV2021 | Tokens-to-Token ViT: обучение трансформера зрения с нуля на ImageNet
CVPR2021 | TrivialAugment: стратегия расширения данных SOTA без настройки
PyTorch против TensorFlow с точки зрения доступности модели, простоты развертывания и экосистемы
Потери CB: несбалансированные потери класса на основе достоверных образцов
Panoptic SegFormer: сквозной преобразователь Panoptic Segmentation Universal Box
AAAI2021 | Динамическое обучение привязок при обнаружении объектов произвольной ориентации
ICCV2021 | Изучение пространственно-временных преобразователей для визуального отслеживания
Научное письмо и философия статей
Краткое изложение традиционных методов извлечения признаков в компьютерном зрении
ICCV2021 | TOOD: одноэтапное обнаружение объектов, ориентированное на задачу
Краткое изложение общих приемов в потоке данных Pytorch
Резюме инновационных идей модели трансформатора в компьютерном зрении
PNNX: формат обмена нейронной сетью PyTorch
Краткое изложение общих идей бумажных инноваций | Краткое изложение методов сжатия сверточной нейронной сети
Резюме методов настройки параметров для гиперпараметров нейронной сети | Краткое изложение методов увеличения данных
Влияние размера партии на обучение нейронной сети | Вводный путь к компьютерному зрению
Краткое изложение общих идей бумажных инноваций | Краткое изложение технологии объединения
Резюме методов нормализации | Краткое изложение методов недообучения и переобучения
Техническое резюме механизма внимания | Краткое изложение технологии пирамиды функций
2021 - Обзор многообъектного отслеживания в видеонаблюдении
Краткое изложение распространенных способов добавления предварительных знаний в модели | Говоря о рецензировании рукописей в области резюме
Всестороннее понимание якорей в обнаружении целей | Резюме сегментации экземпляра Резюме Полное издание
Краткое описание извлечения признаков изображения HOG и SIFT | Введение в основы высокопроизводительных вычислений OpenCV
Резюме функции потерь регрессии при обнаружении цели | Резюме документа по обнаружению целей без якоря
Обзор последних исследований по обнаружению малоразмерных целей в 2021 году | Краткое изложение распространенных методов обнаружения малых целей
Обзор одноэтапной сегментации экземпляров | Обзор семантической сегментации | Обзор многоуровневой классификации
Разница между обнаружением видеообъекта и обнаружением объекта изображения