Как стать автором
Обновить

Ускорение инференса модели BERT с помощью ONNX и ONNX Runtime на примере решения задачи классификации текста

Время на прочтение12 мин
Количество просмотров6.8K
Всего голосов 22: ↑22 и ↓0+22
Комментарии8

Комментарии 8

Отличная статья. Но хотел бы поправить, что LaBSE - это language agnostic BERT sentence encoder и эта модель не с родни USE или LASER, это трансформер BERT с 3мя тасками (MLM, NSP, paraphrasing sentence representation) вместо только первых 2ух как у BERT.

Спасибо большое за уточнение!

Хорошая статья, таких мало на Хабре сейчас.

От себя добавлю чего не хватает / что делает исследование немного неполным:

  • У вас вроде процессор с 4 ядрами и 8 потоками. У обоих фреймворков могут быть разные значения доступных им "threads" по умолчанию. Надо запускать при прочих равных по идее;

  • У PyTorch тоже есть очень простая встроенная динамическая квантизация. По-хорошему с ней тоже стоит сравнивать. Иногда бывает, что с квантизацией разница по скорости несущественная;

Стандартная оговорка, что некоторые кастомные модели сложнее конвертировать в ONNX, чет просто сделать JIT script и иногда пакеты торча и JIT-пакеты торча (там есть просто условно компилятор, а есть еще прямо пакетирование кода) позволяют удобно упаковать и немного обфусцировать код.

В целом наблюдал похожие выводы, но у меня было четко видно, что ONNX быстрее работает с короткими последовательностями, но у меня модели были немного другие.

Спасибо Вам за развернутые замечания по статье!

Для PyTorch и ONNX Runtime количество "threads" установлено было в значение 1 (видимо, при переносе кода забыл указать, что для PyTorch - "torch.set_num_threads(1)", для ONNX Runtime - "options.intra_op_num_threads = 1").

PyTorch-квантизацию и JIT попробую в будущих исследованиях.

А какие Вы модели конвертировали в ONNX?

Спасибо за хорошую статью.

Подскажите, а есть ли ощутимые изменения качества при квантизации? Одинаковы ли они при различных способах квантизации? Я так понимаю, вы не учитывали это при выборе модели?

Спасибо за вопрос.

Да, не учитывал. Пробовал только один вид квантизации (динамическую из onnxruntime), максимальная величина ухудшения метрик была не более 1%.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий