22 KiB
Ускорение транскрипции
Режимы --device
auto(по умолчанию) — всегда ONNX на CPUcuda— строго NVIDIA GPU, ошибка если недоступенopenvino— авто-выбор OpenVINO GPU или CPUopenvino-gpu— строго Intel GPU через OpenVINOopenvino-cpu— строго CPU через OpenVINO (3-10x на x86, зависит от модели)cpu— строго CPU (faster-whisper/CTranslate2)
Какой бэкенд на каком оборудовании
| Оборудование | Рекомендуемый --device |
Бэкенд | Ожидаемая скорость |
|---|---|---|---|
| NVIDIA GPU (6+ GB VRAM) | cuda + extra |
faster-whisper (CTranslate2) | 7-19x реалтайм |
| Любой CPU | auto / onnx |
ONNX GigaAM RNN-T | 10-14x реалтайм* |
| Intel Arc iGPU / dGPU | openvino-gpu |
OpenVINO GenAI (GPU) | TBD |
| Intel/AMD x86 CPU | openvino-cpu |
OpenVINO GenAI (CPU) | 3-10x реалтайм* |
| Любой CPU, FasterWhisper | cpu |
faster-whisper (CTranslate2) | ~1.5x реалтайм |
* По результатам контрольных прогонов на Intel и AMD CPU. Реальная скорость зависит от CPU, модели и записи.
Автоматический профиль рассчитан на русскую речь: GigaAM других
языков не понимает. Для них берите Whisper — openvino-cpu на x86 или cpu
на любой платформе.
OpenVINO
OpenVINO ускоряет inference на x86 процессорах (Intel и AMD) через оптимизированные инструкции (AVX2, AVX-512, VNNI, AMX). Ставится автоматически на Linux и Windows (x86_64/AMD64).
- Модели: предконвертированные из HuggingFace (int8/fp16)
- Дефолт:
medium+int8(дляlarge-v3автоматически выбираетсяfp16) - Быстрый профиль с низким WER: явный
large-v3-turbo+int8; для читаемости и сохранности содержанияmediumостаётся предпочтительнее - Аудиодекодирование: через PyAV (бандлит FFmpeg), системный ffmpeg не нужен
Доступные OpenVINO модели
| Модель | int8 | fp16 |
|---|---|---|
| tiny | OpenVINO/whisper-tiny-int8-ov | — |
| base | — | OpenVINO/whisper-base-fp16-ov |
| small | OpenVINO/whisper-small-int8-ov | — |
| medium | OpenVINO/whisper-medium-int8-ov | OpenVINO/whisper-medium-fp16-ov |
| large-v3 | OpenVINO/whisper-large-v3-int8-ov | OpenVINO/whisper-large-v3-fp16-ov |
| large-v3-turbo | OpenVINO/whisper-large-v3-turbo-int8-ov | OpenVINO/whisper-large-v3-turbo-fp16-ov |
Размер в кеше HuggingFace: medium int8 — 748 MB, large-v3-turbo int8 —
790 MB, large-v3-turbo fp16 — 1552 MB. Это меньше, чем у тех же моделей для
faster-whisper, потому что веса уже квантизированы.
Модель large-v3-turbo доступна только в OpenVINO: для --device cuda и
--device cpu каталог faster-whisper заканчивается на large-v3.
Результаты тестирования OpenVINO
Актуальное сравнение OpenVINO 2026.3 на трёх русскоязычных встречах:
medium, large-v3-turbo и GigaAM.
На Intel Core i7-11800H large-v3-turbo INT8 обработал 43:37 аудио за
365,5 секунды (7,16× RTFx) при WER 24,0%. FP16 занял 545,0 секунды и получил
WER 24,8%, поэтому для CPU рекомендуется INT8.
Реальные записи рабочих созвонов (русский, техтермины: SQL, PostgreSQL, LDAP, DLP и др.).
Скорость (эталонный файл 16 мин, OpenVINO, medium int8):
| CPU | medium int8 | large-v3 fp16 | CPU float32 (baseline) |
|---|---|---|---|
| Intel Ultra 7 255H | 122с | 411с | — |
| AMD Ryzen 7 8845H | 185с | 416с | 734с |
| Intel i7-11800H (WSL2) | 171-205с | — | 658с |
Ускорение vs CPU float32: 3-6x в зависимости от CPU.
OpenVINO small int8 (Intel i7 WSL2):
| Файл | small int8 | medium int8 |
|---|---|---|
| 16 мин | 93с | 171с |
| 42 мин | 153с (~16x реалтайм) | 413с |
Качество (сравнение на одном файле, 16 мин, OpenVINO int8/fp16, Intel CPU):
| small int8 | medium int8 | large-v3 fp16 | |
|---|---|---|---|
| Время (16 мин) | 93с | 171с | 416с |
| Время (42 мин) | 153с | 413с | — |
| Ключевые слова | искажения ("бокап", "рецензия") | единичные ляпы | корректно |
| Пунктуация | слабая | базовая | хорошая |
| Галлюцинации | нет | нет | нет |
Рекомендации по выбору модели
- small — для быстрого сканирования большого объёма видео по маске (
*.mp4). Ошибки в отдельных словах; для обработки ИИ (МОМ, конспект) рискованно — "рецензия" вместо "лицензия" может исказить смысл. - medium — для повседневного использования и обработки ИИ. Ключевые термины верные, единичные ляпы не влияют на смысл конспекта. Оптимальный баланс скорости и качества.
- large-v3 — для важных записей, где нужна дословная точность. Лучшая пунктуация и связность. На OpenVINO (416с) быстрее, чем medium на чистом CPU (734с) — лучшее качество при выше скорости.
- large-v3-turbo — явный профиль для CPU с приоритетом скорости и низкого WER. В проверенном наборе INT8 быстрее и численно точнее medium, но хуже по независимой оценке читаемости и сохранности содержания; FP16 на CPU пользы не показал.
CPU бэкенд (CTranslate2 / faster-whisper)
При --device cpu используется faster-whisper на основе CTranslate2. Этот бэкенд медленнее
OpenVINO, но обеспечивает лучшее качество благодаря развитому pipeline декодирования.
Рекомендуемый compute_type: int8_float32
transcribe meeting.mp4 --device cpu --compute-type int8_float32
int8_float32 — int8 квантизация весов с float32 аккумулятором. Даёт 1.5x ускорение
vs float32 при сопоставимом качестве (протестировано на русском языке с техтерминами).
| compute_type | Скорость* | Качество | Когда использовать |
|---|---|---|---|
int8_float32 |
~460с | Отлично | Рекомендуется — лучший баланс |
float32 |
~880с | Отлично (эталон) | Если важна максимальная точность |
int8 |
быстрее | Хорошо, но бывают галлюцинации | Не рекомендуется для длинных записей |
* Замеры на AMD Ryzen 7 8845H, medium, запись 14:41, 8 потоков.
Оптимизация потоков
CTranslate2 по умолчанию использует 4 потока. На многоядерных CPU рекомендуется задать число потоков равным числу физических ядер (не виртуальных):
transcribe meeting.mp4 --device cpu --compute-type int8_float32 --threads 8
Замеры (Intel i7-11800H, 8 ядер / 16 потоков, medium int8_float32, 16 мин файл):
| --threads | Время | Ускорение |
|---|---|---|
| 0 (дефолт = 4) | 320с | baseline |
| 8 (физ. ядра) | 277с | +13% |
SMT/Hyper-Threading не помогает — 16 потоков на 8-ядерном CPU медленнее, чем 8.
Почему CPU бэкенд качественнее OpenVINO
При одной и той же модели (medium) CTranslate2 даёт заметно лучше распознавание, чем OpenVINO. Разница не в квантизации, а в pipeline декодирования:
| Механизм | CTranslate2 (faster-whisper) | OpenVINO GenAI |
|---|---|---|
| Temperature fallback | ✅ до 5 попыток с ростом temperature | ❌ один проход |
| Фильтр по compression_ratio | ✅ отсекает повторы | ❌ нет |
| Фильтр по log_prob | ✅ отсекает неуверенные сегменты | ❌ нет |
| no_speech_threshold | ✅ детекция тишины | ❌ нет |
| VAD (Silero) | ✅ опционально | ❌ нет |
| condition_on_previous_text | ✅ с умным сбросом | ⚠️ базовый |
Эти эвристики критичны для русской разговорной речи с паузами и перебивками.
Выбор между OpenVINO и CPU
| Сценарий | Рекомендация |
|---|---|
| Быстрый черновой транскрипт | --device openvino-cpu (int8, ~240с) |
| Качественный транскрипт для суммаризации | --device cpu --compute-type int8_float32 (~460с) |
| Максимальная точность | --device cpu --compute-type float32 (~880с) |
CUDA: compute_type и качество
На NVIDIA GPU дефолт — float16, и для большинства случаев это оптимальный выбор.
Результаты тестирования compute_type на GPU (RTX 3060 Laptop, 6 GB)
Скорость (файл 16 мин, русский язык):
| Модель | float16 | int8_float32 | int8_float16 |
|---|---|---|---|
| medium | 53с (~18x) | 64с (~15x) | 54с (~18x) |
| large-v3 | 86с (~11x) | 113с (~8.5x) | 125с (~7.7x) |
Скорость (файл 46 мин, русский язык):
| Модель | float16 |
|---|---|
| medium | 127с (~22x реалтайм) |
| large-v3 | 271с (~10x реалтайм) |
Качество (файл 16 мин):
| Модель | float16 | int8_float32 | int8_float16 |
|---|---|---|---|
| medium | Отлично | Отлично (≈float16) | Хорошо (1-2 ошибки) |
| large-v3 | Хорошо (ед. галлюцинации) | Плохо (повтор "Ага" ×18) | Неприемлемо (мусор, иероглифы) |
Качество (файл 46 мин):
| Модель | float16 | Проблемы |
|---|---|---|
| medium | Отлично | Единичные ляпы ("email" вместо "ML"), стабилен |
| large-v3 | Плохо | Галлюцинации на 3+ языках (китайский, арабский), повторы фраз, "Аминь" вместо "Угу" |
Выводы по CUDA compute_type
float16— оптимальный дефолт: самый быстрый и стабильныйint8_float32не дал выигрыша: на 20% медленнее float16, качество для medium сопоставимо, для large-v3 — деградацияint8_float16: по скорости ≈ float16 для medium, но large-v3 даёт мусорint8: рискует галлюцинациями на large-v3 и длинных записях (повтор фраз ×25)- medium устойчивее к квантизации, чем large-v3 — все варианты compute_type дают приемлемый результат
- large-v3 на длинных записях (>20 мин): галлюцинации даже с float16 — medium надёжнее
Настройка по платформам
Для Linux/WSL x86_64 и Windows x64 используется один extra cuda и явный
выбор --device cuda либо device = "cuda" в TOML. Команды установки из Git,
клона и для разработки приведены в README.
Обычный запуск всегда использует ONNX CPU, независимо от драйвера и extra.
Драйвер NVIDIA устанавливается отдельно. Полный системный CUDA Toolkit не нужен для пути через extra; на Windows требуется Visual C++ Runtime x64. Состав Windows DLL проверен статически; реальная транскрипция без Toolkit пока не проверена. Версии и границы проверки — ADR-001. CUDA extra для ARM в этой задаче не поддерживается.
Совместимость GPU
| GPU | VRAM | CC | medium float16 | large-v3 float16 | Рекомендация |
|---|---|---|---|---|---|
| RTX 3060 | 6 GB | 8.6 | ✅ | ✅ | medium float16 (дефолт) |
| RTX 4050 | 6 GB | 8.9 | ✅ | ✅ | medium float16 |
| Quadro M3000M | 4 GB | 5.0 | ❌ | ❌ | --device cpu или openvino |
Quadro M3000M и другие GPU с CC < 7.0 (Maxwell, Pascal): CUDA не работает — float16 требует CC ≥ 7.0, float32 падает с ошибкой (CTranslate2 4.x не включает sm_50/sm_60 в пребилды). Используйте
--device cpu --compute-type int8_float32или--device openvino.
Ожидаемая скорость
Замеры на RTX 3060 Laptop (6 GB) и Intel CPU (WSL2):
| Конфигурация | 16 мин файл | 46 мин файл | Отн. скорость |
|---|---|---|---|
| GPU + medium float16 | 53с | 127с | ~18-22x реалтайм |
| GPU + large-v3 float16 | 86с | 271с | ~10-11x реалтайм |
| GPU + medium int8_float32 | 64с | — | ~15x реалтайм |
| GPU + medium int8_float16 | 54с | — | ~18x реалтайм |
| OpenVINO + small int8 | 93с | 153с | ~10-16x реалтайм |
| OpenVINO + medium int8 | 171-205с | 413с | ~4-6x реалтайм |
| OpenVINO + large-v3 fp16 | 416с | — | ~2.3x реалтайм |
| CPU + medium int8_float32 | ~460с* | — | ~2x реалтайм |
| CPU + medium float32 | 658с (11 мин) | ~26 мин | ~1.5x реалтайм |
| CPU + large-v3 int8 | 839с (14 мин) | ~37 мин | ~1:1 реалтайм |
* Замер CPU int8_float32 на AMD Ryzen 7 8845H (8 потоков), файл 14:41.
Результаты тестирования качества
Тесты проведены на реальных записях рабочих созвонов (русский язык, технические термины: SQL, PostgreSQL, Greenplum, Airflow, ClickHouse, Docker, CDR, GTP, MAP).
| Конфигурация | Качество (короткие, ≤16 мин) | Качество (длинные, >40 мин) | Проблемы |
|---|---|---|---|
| medium float16 GPU | Отлично | Отлично | Единичные ляпы в терминах ("email" вместо "ML") |
| medium int8_float32 GPU | Отлично | — | Качество ≈ float16, но на 20% медленнее |
| medium int8_float16 GPU | Хорошо | — | 1-2 ошибки |
| large-v3 float16 GPU | Хорошо | Плохо | Галлюцинации на длинных записях (мусор на 3+ языках) |
| large-v3 int8_float32 GPU | Плохо | — | Повтор фраз ("Ага" ×18), искажения |
| large-v3 int8_float16 GPU | Неприемлемо | — | Мусор, китайские/арабские символы, потеря текста |
| large-v3 int8 GPU | Плохо | Плохо | Галлюцинации (фразы ×25), потеря контента |
| medium int8_float32 CPU | Отлично | — | Качество ≈ float32, на уровне облачных сервисов |
| medium float32 CPU | Отлично | Хорошо | Эталон качества |
| large-v3 int8 CPU | Хорошо | — | Без галлюцинаций (на коротких файлах) |
Ключевые выводы
- Указание языка (
--language ru) критично — auto-detect может ошибиться и выдать мусор - medium + float16 на GPU — лучший баланс скорости и качества для любых записей
- large-v3 ненадёжен на длинных записях (>20 мин) — галлюцинации даже с float16; medium стабильнее на любой длине
- medium устойчив к квантизации — все варианты compute_type дают приемлемый результат; large-v3 деградирует катастрофически при любом int8
- CPU: int8_float32 — лучший баланс — 1.5x быстрее float32 при том же качестве
- OpenVINO быстрее, но CPU бэкенд качественнее — разница в pipeline декодирования (temperature fallback, фильтры галлюцинаций), а не в квантизации
Потенциальные направления развития
Качественный pipeline для OpenVINO
Сейчас качественный pipeline декодирования (temperature fallback, фильтры галлюцинаций, VAD) доступен только через CTranslate2, т.е. на CPU и NVIDIA CUDA. Пользователи Intel Arc и AMD Radeon получают скорость OpenVINO, но без защиты от галлюцинаций.
Решение: реализовать temperature fallback, compression_ratio и log_prob фильтры поверх OpenVINO GenAI WhisperPipeline. Эти эвристики — логика на Python (~50-100 строк), не зависящая от inference engine. Это даст Intel Arc / AMD GPU то же качество, что сейчас есть только у CUDA-пользователей.
CUDA: int8_float32 / int8_float16 — протестировано
На CPU int8_float32 показал качество на уровне float32 при 1.5x ускорении.
На GPU (RTX 3060) результат другой: для medium int8_float32 даёт сопоставимое
качество, но на 20% медленнее float16 — выигрыша нет. Для large-v3 любой int8
вариант (включая int8_float32) вызывает галлюцинации — float32 аккумулятор не спасает
глубокую модель на GPU. Вывод: float16 остаётся оптимальным дефолтом для CUDA.
NVIDIA Parakeet TDT — проверено, отклонено
Оценивалась гипотеза: multilingual Parakeet TDT 0.6B v3 через onnx-asr может обойти
Whisper medium int8 на x86 CPU. На двух 15-минутных отрывках реальных русских ИТ-встреч
(Intel i7-11800H) Parakeet показал 2.7x преимущество по скорости и -35% RAM, но
качество ниже — систематическая редукция тихих реплик менти до Mm-hmm, вставки
кусков польского/испанского, сильное искажение ИТ-терминов. Попытка тюнинга Silero VAD
threshold не помогла — проблема inherent для модели на тихой русской речи.
Код бэкенда не вмержен в master; эксперимент сохранён в ветке
feature/parakeet-backend. Подробности и когда стоит пересмотреть —
ADR-005.
Troubleshooting
CUDA не обнаружен
Убедитесь, что nvidia-smi возвращает информацию о GPU. Драйвер NVIDIA предоставляет libcuda.so.1,
без которого CUDA не работает — его нельзя поставить через pip.
Отсутствующие библиотеки и несовместимый GPU
При отсутствии cuBLAS подключите extra в том окружении, откуда запускается программа, по инструкции README. На Windows ошибка загрузки DLL может также означать отсутствие Visual C++ Runtime.
no kernel image / invalid device function означают несовместимость GPU
с выбранной сборкой runtime. Установка extra её не исправит. Ошибки драйвера
требуют проверки драйвера; нехватка VRAM — меньшей модели или явного выбора CPU.
Исходная ошибка сохраняется. CLI/TOML с явной CUDA не переходят молча на CPU
ни при загрузке, ни при распознавании.
ARM (aarch64)
CUDA extra не поддерживается проектом на этой архитектуре. Наличие отдельных NVIDIA wheels для ARM само по себе не подтверждает рабочий путь транскрипции.