Какое-то время назад мы публиковали целый ряд статей про нашу систему Speech-To-Text, а именно про:

  • Её качество;
  • Её скорость и пропускную способность;
  • Про требования к ресурсам;

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

Чем Мы Занимались Все Это Время

Может показаться, что мы ушли в подполье, но с тех пор многое изменилось и мы не сидели без дела:

  • Мы выпустили публичную Community Edition версию наших моделей для нескольких языков. Нас даже похвалил Soumith Chintala;
  • Cделали несколько глобальных рефакторингов кода, выпустили V2 версию нашей CE-edition модели для английского языка;
  • Публично выпустили экспериментальную модель для украинского языка в рамках Silero Models для мотивации наших украинских коллег;
  • Запустили несколько больших research-проектов и провели большую подготовительную работу для обширного обновления перезапуска (как говорится, stay tuned!). Будем выпускать новые публичные продукты when it's done;

Финальное Ускорение Наших Моделей

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

Метрики указаны в секундах аудио обработанных в секунду на 1 ядро процессора (1 / RTF на ядро):

Batch size FP32 FP32 + Fused FP32 + INT8 FP32 Fused + INT8 Full INT8 + Fused New Best
1 7.7 8.8 8.8 9.1 11.0 22.6
5 11.8 13.6 13.6 15.6 17.5 29.8
10 12.8 14.6 14.6 16.7 18.0 29.3
25 12.9 14.9 14.9 17.9 18.7 29.8

Может показаться, что скачок является слишком огромным, но мы просто не сидели без дела. Тут еще важно отметить, что цифры отчасти кажутся нереалистичными в сравнении с теми же 8+ RTS, о которых писал фейсбук в своей статье. Но тут важно понимать, что мы обрабатываем аудио батчами, а фейсбук - по одному кусочками по 750 ms. Плюс это идеальные условия, когда файлы по сути кормятся в акустическую сеть из памяти. В реальности все не так радужно (смотрите сайзинги ниже) и мы тратим гораздо больше времени на ожидание и коммуникацию.

Ускорения против базовой "маленькой модели":

Batch size FP32 + Fused FP32 + INT8 FP32 Fused + INT8 Full INT8 + Fused New Best
1 14% 14% 18% 42% 193%
5 16% 16% 32% 48% 153%
10 15% 15% 31% 41% 130%
25 15% 15% 39% 44% 130%
image

Сайзинги и Дистрибутивы

Метрики акустической модели являются несколько абстрактными. В реальном деплое на скорость и пропускную способность (latency / throughput) влияет гораздо больше вещей - пост-обработка, архитектура сервиса, задержка сети, сериализация, коммуникация, итд итп.

По этой причине - мы просто провели огромную работу по расчету реальных сайзингов наших EE моделей и оптимизации гипер-параметров наших дистрибутивов.

Пара слов о методологии:

  • Метрики рассчитаны для файлов длиной 1 - 7 секунд, которые "кормятся" в сервис в 4 - 8 - 16 потоков;
  • Распределение длин файлов соответствует распределению длин файлов в реальных диалогах людей по телефону;
  • Метрики рассчитаны для многопоточного веб-сервиса, что немного абстрагируется от сценария реального использования. Ну то есть если мы можем держать условно 8 потоков с условной гарантией в latency в 500 мс, то это значит, что правильно настроив конечную бизнес-логику, можно обрабатывать сильно больше, чем 8 одновременных звонков;
  • Реальные люди не говорят одновременно, пока человек заканчивает вторую фразу мы уже усеваем обработать первую итд итп. Но это уже сильно зависит от реального бизнес-кейса;

Настройка Сайзинга Для GPU

Сайзинг Минимум Рекомендуется
Диск SSD, 256+ GB NVME, 256+ GB
RAM 32 GB 32 GB
Ядер процессора 8+ 12+
Тактовая частота ядра 3 GHz+ 3.5 GHz+
2 потока на ядро процессора Да Да
AVX2 инструкции процессора Не обязательно Не обязательно
Совместимые GPU (*) (*)
Количество GPU 1 1
Метрики 8 "потоков" 16 "потоков"
Среднее время ответа, мс 280 320
95-я перцентиль, мс 430 476
99-я перцентиль, мс 520 592
Файлов за 1000 мс 25.0 43.4
Файлов за 500 мс 12.5 21.7
Секунд аудио в секунду (1 / RTF) 85.6 145.0
Биллинговые потоки 12 - 18 22 - 30
Секунд аудио в секунду на ядро 10.7 12.1

(*) Есть 3 типа подходящих GPU:

  • Любые игровые GPU Nvidia выше чем 1070 8+GB RAM с турбиной;
  • Любые однослотовые GPU Nvidia серии Quadro 8+GB RAM (TDP 100 - 150W) с турбиной или пассивные;
  • Nvidia Tesla T4, пассивная, TDP 75W;

Настройка Сайзинга Для CPU

Сайзинг Минимум Рекомендуется
Диск SSD, 256+ GB SSD, 256+ GB
RAM 32 GB 32 GB
Ядер процессора 8+ 12+
Тактовая частота ядра 3.5 GHz+ 3.5 GHz+
2 потока на ядро процессора Да Да
AVX2 инструкции процессора Обязательно Обязательно
Метрики 4 "потока" 8 "потоков"
Среднее время ответа, мс 320 470
95-я перцентиль, мс 580 760
99-я перцентиль, мс 720 890
Файлов за 1000 мс 11.1 15.9
Файлов за 500 мс 5.6 8.0
Секунд аудио в секунду (1 / RTF) 37.0 53.0
Биллинговые потоки 6 - 9 8 - 10
Секунд аудио в секунду на ядро 4.6 4.4

Комментарии по Сайзингам

  • В реальности со всем фаршем даже у сервиса с GPU получается только 10 - 15 RTS на одно ядро процессора (хотя теоретический RTS самой модели на GPU находится где-то в районе 500 - 1,000). В теории число воркеров CPU на 1 GPU можно наращивать больше, чем мы пробовали, но мы упираемся в удорожание процессоров;
  • CPU-версия сервиса показывает только в районе 5 честных RTS, что немало, но она скорее оптимизирована как баланс между гарантиями по latency и throughput;
  • Метрики настоящие и честные и подбор параметров стоил много боли и страданий. Если честно - я вообще не видел, чтобы кто-то вообще показывал перцентили реальных систем;
  • Многие крупные проекты просят 50 одновременных разговоров, поэтому иметь возможность покрыть такой проект используя всего 2 GPU (+ резервирование) это довольно круто;
  • Использование GPU сервиса где-то в 2-3 раза дешевле, чем если считать все только на CPU;