Трансформеры штурмом захватывают мир НЛП, поскольку это мощный двигатель в понимании контекста. В настоящее время с использованием трансформаторов мы можем достичь самых современных результатов в решении различных задач, таких как система ответов на вопросы, машинный перевод, обобщение, классификация предложений и системы генерации текста. В современном мире преобладают большие модели Transformer, что создает проблемы для производства из-за их размера, и иногда очень сложно развернуть эти большие модели в производстве с помощью Faster Inference.

BERT-base-uncased имеет ~ 110 миллионов параметров, RoBERTa-base имеет ~ 125 миллионов параметров, а GPT-2 имеет ~ 117 миллионов параметров. Каждый параметр представляет собой число с плавающей запятой, для которого требуется 32 бита (FP32). Это означает, что размеры файлов этих моделей огромны, как и потребляемая ими память. Не говоря уже обо всех вычислениях, которые должны произойти со всеми этими битами.

Из-за вышеупомянутых проблем оптимизация моделей теперь является основным направлением деятельности большинства инженеров по НЛП и глубокому обучению, чтобы можно было добиться более быстрого вывода при развертывании этих больших моделей на клиентах. Благодаря недавнему выпуску ONNX (Open Neural Network Exchange) и глубокой интеграции с моделями Hugging Face Transformers можно добиться более быстрого вывода до 6X для всех моделей, упомянутых выше.

Faster Inference -: Оптимизация модели трансформатора с помощью HF и ONNX Runtime

Мы загрузим предварительно обученную модель BERT и преобразуем ее в формат ONNX, чтобы размер модели можно было уменьшить и легко загрузить, а более быстрый вывод может быть достигнут путем преобразования плавающих указателей (параметров модели) в INT 8 с использованием квантования. Что такое хитрость квантование

Квантование -: квантование приближает числа с плавающей запятой к числам с меньшей разрядностью, значительно сокращая объем памяти и повышая производительность. Квантование может привести к потере точности, поскольку меньшее количество битов ограничивает точность и диапазон значений. Однако исследователи широко продемонстрировали, что веса и активации могут быть представлены с использованием 8-битных целых чисел (INT8) без существенной потери точности.

Давайте экспортируем модель трансформатора в формат ONNX с помощью Hugging face и python. Начнем с установки всех необходимых библиотек.

Выполнить оптимизацию довольно просто. В Hugging Face и ONNX есть инструменты командной строки для доступа к предварительно обученным моделям и их оптимизации. Все это можно сделать одной командой:

С помощью этой единственной команды мы загрузили предварительно обученный BERT, преобразовали его в ONNX, квантовали и оптимизировали для вывода.

Hugging Face уже интегрировал среду выполнения onnx в свой конвейер NLP. Мы можем напрямую использовать это

Результаты производительности

Задержки, указанные ниже, измеряются в миллисекундах. PyTorch обращается к PyTorch 1.6 с TorchScript. PyTorch + ONNX Runtime относится к версиям PyTorch моделей Hugging Face, экспортированных и созданных с помощью ONNX Runtime 1.4.

Ниже приведен эталон для сравнения модели BERT с развертыванием pytorch и pytorch + onnx.

Ниже приведена ссылка на полную сквозную реализацию от Hugging face.