Если вы знаете историю «Флэша», Барри Аллен был обычным Человеком, который мог бегать со средней скоростью 19,3 метра в секунду, прежде чем его ударила молния и бум!!!! он обладал необычайной скоростью и мог выполнять задачи быстрее света.

Представьте, что ваша языковая модель раньше требовала огромных ресурсов (на виртуальной машине) и также требовала 19 секунд для возврата ответа, но затем вы ударили по ней освещением (оптимизация модели), и теперь для возврата ответа требуется 19 мс.
Теперь давайте поговорим о том, как поразить нашу модель освещением, чтобы она могла обрабатывать запросы со скоростью света.

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

Что такое Онкс:

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

Как работает Онкс:

Файл Onnx, говоря простым языком, представляет собой ориентированный граф, где ребра представляют собой тензоры, перемещающиеся от одного узла к другому, и каждый узел (оператор) возвращает ответ от операции подузлу. Onnx преобразует ваши модельные операторы (алгоритмы) в узлы, таким образом эффективно связывая количество операторов.

Я объясню.

Допустим, например, что мы построили модель, чтобы предсказать, есть ли у кого-то covid или нет, используя классификатор Knn.

Этапы или операторы вывода будут такими:

  • Для каждого примера в данных
  • вычислить расстояние между примером запроса и текущим примером
  • Добавьте расстояние и индекс примера к упорядоченной коллекции
  • Отсортируйте упорядоченную коллекцию от меньшего к большему
  • Выберите первые K записей из отсортированной коллекции
  • Получить метки выбранных записей K
  • вернуть режим меток K

теперь, когда вы конвертируете эту модель в onnx, она строит вычислительный граф (часто называемый промежуточным представлением)

Давайте преобразуем модель трансформаторов в onnx и выполним вывод с ее помощью.

Transformers предоставляет пакет transformers.onnx, который поддерживает преобразование модели в график onnx с помощью объекта конфигурации.
Некоторые объекты конфигурации архитектуры уже разработаны и позволяют создавать пользовательскую конфигурацию для архитектуры, у которой нет конфигурации. объект, разработанный командой Huggingface.

Примечание. В этом сеансе мы будем использовать ваниль Pytorch.

Преобразуйте модель BERT в onnx с помощью vanilla PyTorch:

установить все необходимые пакеты

!pip install transformers
!pip install -U sentence-transformers

Загрузите обнимающую модель лица

Давайте сделаем вывод, а также измерим время вычислений, используя встроенную библиотеку времени Python.

0.04085946083068848 
pytorch vanilla cpu: 0.02s/sequence

исходя из нашего результата, нашей модели требуется около 0,40 мс, чтобы вернуть ответ, а также 0,02 с на последовательность.

Давайте конвертируем эту модель в Onnx и выполним вывод.

преобразовать в onnx с помощью PyTorch torch.onnx.export

давайте проведем вывод по модели onnx и измерим время вычислений

0.029510021209716797 
onnx cpu: 0.01s/sequence

Примечание. Эти скрипты запускались в Google Colab

Из нашего результата мы видим, что onnx в два раза быстрее, чем ванильный вывод PyTorch. Хотя можно получить и до Х10 результата.

Заключение:

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

Ресурсы: