Если вы знаете историю «Флэша», Барри Аллен был обычным Человеком, который мог бегать со средней скоростью 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.
Ресурсы: