Актуальное Состояние

Сейчас в список наших основных поддерживаемых решений входят:

  • Распознавание речи;
  • Синтез речи;
  • Детектор голоса и расстановка пунктуации и знаков препинания являются вспомогательными;

Дальше мы приведем сайзинги для GPU и CPU версии нашего распознавания и синтеза речи для недавнего масштабного релиза наших дистрибутивов v012:

  • GPU сайзинг для распознавания речи;
  • GPU сайзинг для синтеза речи;
  • СPU сайзинг для распознавания речи;
  • CPU сайзинг для синтеза речи;

GPU сайзинг для распознавания речи

СайзингРекомендуется
Файл AMru_xlarge_v012.model
Файл LMru_lm_v*.distro.model
RAM12 GB
Ядер процессора12+
Тактовая частота ядра3.5 GHz+
2 потока на ядро процессораДа
AVX2 инструкции процессораНе обязательно
--scale lm-consumer=16
AM_LANES
WORKERS (воркеры API)16
AM_BATCH_DELAY0.05
AM_BATCH_SIZE10
Совместимые GPU(*)

1080 Ti

Метрики8 "потоков"16 "потоков"
Среднее время ответа, мс320440
95-я перцентиль, мс500660
99-я перцентиль, мс630820
Файлов за 1000 мс22.433.2
Файлов за 500 мс11.216.6
Секунд аудио в секунду (1 / RTF)75112
Биллинговые потоки12 - 1816 - 24

3090

Метрики8 "потоков"16 "потоков"24 "потоков"
Среднее время ответа, мс240230290
95-я перцентиль, мс330340450
99-я перцентиль, мс390400530
Файлов за 1000 мс316375
Файлов за 500 мс15.531.537.5
Секунд аудио в секунду (1 / RTF)106212254
Биллинговые потоки16 - 3232 - 4838 - 52

GPU сайзинг для синтеза речи

СайзингРекомендуется
RAM3 GB
Ядер процессора8+
Тактовая частота ядра3 GHz+
2 потока на ядро процессораДа
AVX2 инструкции процессораНе обязательно
WORKERS (воркеры API)8
TTS_BATCH_DELAY0.1
TTS_BATCH_SIZE8
Совместимые GPU(*)
Метрики8 "потоков"
Среднее время ответа, мс582
95-я перцентиль, мс1151
99-я перцентиль, мс1240
Секунд аудио в секунду (1 / RTF)39
Секунд аудио в секунду на батч4.9

СPU сайзинг для распознавания речи

СайзингМинимум
Файл AMru_small_v013_q.model
Файл LMru_lm_v*.distro.model
RAM8 GB
Ядер процессора6+
Тактовая частота ядра3.5 GHz+
2 потока на ядро процессораДа
AVX2 инструкции процессораОбязательно
--scale lm-consumer=8
--scale am-consumer-short=1
--scale am-consumer-long=1
WORKERS (воркеры API)8
AM_BATCH_DELAY0.05
AM_BATCH_SIZE10
AM_LANES3
CPUSET_SHORT0-1 # 1 ядро
CPUSET_LONG2-5 # 2 ядра
CPUSET_LM6-11 # 3 ядра

Intel(R) Core(TM) i7-6800K CPU @ 3.40GHz:

Метрики4 "потока"8 "потоков"
Среднее время ответа, мс280380
95-я перцентиль, мс490720
99-я перцентиль, мс630870
Файлов за 1000 мс1218
Файлов за 500 мс6.09.0
Секунд аудио в секунду (1 / RTF)4162
Биллинговые потоки6-1210-16
Секунд аудио в секунду на ядро6.810.3

CPU сайзинг для синтеза речи

СайзингМинимум
RAM3 GB
Ядер процессора2+
Тактовая частота ядра3.5 GHz+
2 потока на ядро процессораДа
AVX2 инструкции процессораОбязательно
--scale tts-consumer=1
TTS_BATCH_DELAY0
TTS_BATCH_SIZE1
CPUSET_TTS0-4 # 2 ядра

Intel(R) Core(TM) i7-6800K CPU @ 3.40GHz:

Метрики1 "поток"2 "потока"
Среднее время ответа, мс17413225
95-я перцентиль, мс38536185
99-я перцентиль, мс46227737
Секунд аудио в секунду (1 / RTF)6.53.5
Секунд аудио в секунду на ядро3.251.75


Оригинальная Статья от 2020-12-05

Какое-то время назад мы публиковали целый ряд статей про нашу систему 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;