Назад к новостям для разработчиков

Summer of open source: building more efficient AI with PyTorch

20 сентября 2022 г.Автор:Suraj Subramanian

Примечание. Отдельная благодарность Лессу Райту, партнеру-инженеру из Meta AI, за обзор и дополнение этой публикации.

Эта публикация, посвященная созданию эффективного искусственного интеллекта (ИИ), — вторая в серии "Лето Open Source". Цель этой серии — предоставить полезные ресурсы и обучающие материалы в областях, где проекты с открытым исходным кодом оказывают влияние на Meta и за ее пределами. В этих выпусках мы рассказываем о том, как Meta Open Source помогает индустрии, предлагая инновационные и масштабируемые инструменты.

PyTorch: от фундаментальной технологии к основе

С момента выпуска в 2016 г. PyTorch активно используется для задач глубокого обучения, а теперь его широко применяют в различных рабочих сценариях. Для машинного обучения (МО) и искусственного интеллекта (ИИ) наступило интересное время: появляется всё больше новых методов применения ИИ. Началась новая глава в истории PyTorch: он перешел в недавно созданный независимый фонд PyTorch Foundation под эгидой Linux Foundation. В совет руководителей фонда входят представители AMD, Amazon Web Services, Google Cloud, Microsoft Azure и Nvidia. Со временем состав совета планируется расширять. Миссия фонда — стимулировать внедрение инструментария ИИ через проекты, не требующие участия поставщиков, и сделать инструменты, библиотеки и другие компоненты с открытым исходным кодом доступными для всех. Благодаря переходу в этот фонд PyTorch и его сообщество, работающее с проектами с открытым исходным кодом, смогут ускорить путь от прототипирования к производству для ИИ и МО.

Модернизация ИИ с проектами Meta с открытым исходным кодом

PyTorch — это прекрасный пример возможностей, которые предоставляет открытый исходный код. Будучи одним из первых фреймворков глубокого обучения с открытым исходным кодом, PyTorch позволил людям из разных областей проводить эксперименты с глубоким обучением и применять свои наработки в самых разных областях. PyTorch поддерживает эксперименты с поисковыми приложениями, разработку автономных транспортных средств, проекты в области георадиолокации, и это лишь некоторые области его применения. Использование универсальной библиотеки инструментов ИИ в сообществе открывает возможности для быстрой итерации и адаптации технологий в больших масштабах для различных применений.

По мере более широкого внедрения ИИ модели увеличиваются в размерах и позволяют решать более сложные задачи, но также значительно возрастают объемы ресурсов, необходимые для обучения этих моделей. К счастью, многие представители сообщества разработчиков осознали необходимость использования меньшего количества ресурсов для моделей — как с практической, так и с экологической точки зрения. В этой публикации мы рассмотрим, почему квантование и другие методы сжатия моделей могут стать катализатором эффективности ИИ.

Базовые условия для использования PyTorch

Большая часть этой статьи посвящена некоторым вспомогательным и расширенным возможностям PyTorch. Новичкам, которые только хотят начать работу с PyTorch, и экспертам, которые сейчас используют другую библиотеку, проще всего начать с основ. Ознакомьтесь с руководством по PyTorch для новичков, в которое входит введение в основы процесса МО на примере набора данных Fashion MNIST.

Некоторые полезные ресурсы для тех, кто только начинает работу с PyTorch:

  • истории сообщества PyTorch — узнайте, как PyTorch влияет на разные отрасли, в том числе сельское хозяйство, образование, путешествия и не только
  • ;
  • серия видео о PyTorch для начинающих — ознакомьтесь с основополагающими технологиями, в том числе тензорами, построением моделей, обучением и алгоритмами логического вывода в PyTorch.

Квантование: применение проверенных временем методов к искусственному интеллекту

Существует много способов повысить эффективность ИИ. Кодирование аппаратного и программного обеспечения для оптимизации под ИИ может быть очень эффективным, однако разработка программно-аппаратных решений на заказ требует значительного времени и ресурсов. Другой вариант — создание более быстрых и компактных архитектур, но многие из них страдают от потери точности по сравнению с более крупными моделями, по крайней мере, сейчас. Более простой подход заключается в поиске путей для снижения объема ресурсов, необходимых для обучения и обслуживания существующих моделей. Один из способов сделать это в PyTorch — сжатие модели с помощью квантования.

Квантование — это математическая техника, которая используется для создания цифровых музыкальных файлов с потерями и конвертации аналоговых сигналов в цифровые. Квантование позволяет значительно повысить производительность на многих аппаратных платформах за счет выполнения математических вычислений с пониженной точностью. Зачем же использовать квантование для повышения эффективности ИИ? Результаты показывают, что в некоторых случаях использование этой относительно простой техники может привести к значительному ускорению вывода модели — в 2–4 раза.

Параметры, составляющие модель глубокого обучения, обычно представляют собой десятичные числа с плавающей запятой. Каждый параметр требует 16 или 32 бита памяти. При использовании квантования числа обычно преобразуются в INT4 или INT8, которые занимают всего 4 или 8 бит. Это снижает объем памяти, необходимой для работы модели. Кроме того, производители включают в чипы специальную арифметику, благодаря которой операции с целыми числами выполняются быстрее, чем с десятичными.

Существует три метода квантования, которые можно использовать для обучения моделей: динамическое, статическое и обучение с учетом квантования (QAT). Краткий обзор преимуществ и недостатков каждого метода приводится в таблице ниже. Узнать, как реализовать каждый из них в рабочих процессах ИИ, можно из статьи Practical Quantization in PyTorch.

Метод квантования

Преимущества

Недостатки

Динамическое

  • Простота использования, только один вызов API
  • Более высокая устойчивость к смещению распределения, что обеспечивает немного более высокую точность
  • Хорошо работает для моделей с долгой краткосрочной памятью (LSTM) и трансформеров

Дополнительные затраты при каждом шаге вперед

Статическое (PTQ)

  • Более быстрые выводы по сравнению с динамическим квантованием за счет устранения дополнительных затрат

Может требоваться регулярная калибровка для устранения смещения распределения

Обучение с учетом квантования (QAT)

  • Более высокая точность по сравнению со статическим квантованием
  • Более быстрый вывод по сравнению с динамическим квантованием

Высокие вычислительные затраты

Дополнительные функции для ускорения рабочих процессов ИИ

Квантование — не единственный способ сделать ИИ на базе PyTorch более эффективным. Функции регулярно обновляются. Ниже перечислены ещё несколько способов улучшить рабочие процессы ИИ с помощью PyTorch:

  • Режим вывода. Его можно использовать для написания кода PyTorch, если код используется только для выводов. В этом режиме некоторые предположения при работе с тензорами изменяются, чтобы ускорить вывод. Если вы сообщаете PyTorch, что не будете использовать тензоры для определенных приложений позже (в этом случае autograd), PyTorch адаптируется, чтобы код выполнялся быстрее в этих конкретных сценариях.

  • Низкая точность. Квантование работает только во время вывода, то есть после обучения модели. Для самого процесса обучения PyTorch использует автоматическое обучение смешанной точности (AMP), чтобы найти лучший формат в зависимости от того, какие используются тензоры (FP16, FP32 или BF16). Глубокое обучение низкой точности в PyTorch имеет ряд преимуществ. Оно помогает уменьшить размер модели, сократить объем памяти, необходимой для обучения моделей, и снизить мощность, необходимую для работы моделей. Подробную информацию см. в руководстве по использованию AMP с графическими процессорами с поддержкой CUDA.

  • Channels last. Когда речь идет о моделях зрения, NHWC, иначе известный как channels-last, представляет собой более быстрый формат тензорной памяти в PyTorch. Хранение данных в формате channels-last ускоряет операции в PyTorch. Форматирование входных тензоров в виде channels-last снижает затраты, необходимые для преобразования между различными типами форматов, что ускоряет вывод.

  • Оптимизация для выводов. Этот прототип TorchScript реализует некоторые виды общей оптимизации, которые ускоряют модели во всех средах, а также может подготовить модели к выводу с настройками конкретной сборки. Сейчас его основными вариантами использования являются модели зрения на ЦП (и графических процессорах). Поскольку это прототип, при его использовании могут возникать проблемы. Сообщайте о проблемах в репозитории PyTorch на GitHub.

Новые возможности PyTorch

Новые методы ускорения рабочих процессов ИИ регулярно обсуждаются в блоге PyTorch. Там вы точно не пропустите новинки и такие методы, как недавно выпущенный BetterTransformer, который ускоряет и повышает пропускную способность моделей Transformer почти в 2 раза для популярных сценариев выполнения. Если вам интересно узнать, как реализовать определенные функции, на этой странице вы найдете советы по разным темам, таким как оптимизация модели, распределенное обучение и интерпретируемость. Эта публикация призвана показать, как инструменты вроде PyTorch способствуют развитию проектов с открытым исходным кодом и ИИ.

Следите за последними новостями Meta Open Source для искусственного интеллекта и машинного обучения на нашем сайте, подписывайтесь на наш канал YouTube или следите за обновлениями на Facebook, в Twitter и LinkedIn.