Comments 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?
Например эту - https://github.com/snakers4/silero-vad
Спасибо за хорошую статью.
Подскажите, а есть ли ощутимые изменения качества при квантизации? Одинаковы ли они при различных способах квантизации? Я так понимаю, вы не учитывали это при выборе модели?
Ускорение инференса модели BERT с помощью ONNX и ONNX Runtime на примере решения задачи классификации текста