# Ускорение транскрипции ## Режимы `--device` - `auto` (по умолчанию) — CUDA при наличии `nvidia-smi`, иначе ONNX на CPU - `cuda` — строго NVIDIA GPU, ошибка если недоступен - `openvino` — авто-выбор OpenVINO GPU или CPU - `openvino-gpu` — строго Intel GPU через OpenVINO - `openvino-cpu` — строго CPU через OpenVINO (3-10x на x86, зависит от модели) - `cpu` — строго CPU (faster-whisper/CTranslate2) ## Какой бэкенд на каком оборудовании | Оборудование | Рекомендуемый `--device` | Бэкенд | Ожидаемая скорость | |---|---|---|---| | NVIDIA GPU (6+ GB VRAM) | `auto` / `cuda` | faster-whisper (CTranslate2) | 7-19x реалтайм | | Любой CPU без NVIDIA | `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, модели и записи. Автоматический профиль без NVIDIA рассчитан на русскую речь: GigaAM других языков не понимает. Для них берите Whisper — `openvino-cpu` на x86 или `cpu` на любой платформе. ## OpenVINO OpenVINO ускоряет inference на x86 процессорах (Intel и AMD) через оптимизированные инструкции (AVX2, AVX-512, VNNI, AMX). Ставится автоматически на Linux и Windows (x86_64/AMD64). - **Модели**: предконвертированные из [HuggingFace](https://huggingface.co/OpenVINO) (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](benchmarks/2026-08-12-openvino-large-v3-turbo-comparison.md). На 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` ```bash 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 рекомендуется задать число потоков равным числу **физических ядер** (не виртуальных): ```bash 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 / WSL2 (x86_64) Библиотека cuBLAS ставится автоматически (зависимость `nvidia-cublas-cu12` подтягивается при установке). Дополнительных шагов не требуется. > На ARM (aarch64) cuBLAS через pip недоступен — нужен системный CUDA toolkit. ### Windows Нужен системный **CUDA 12** (ctranslate2 4.7 не совместим с CUDA 11 и 13): ```bash winget install -e --id Nvidia.CUDA --version 12.9 # требует запуска от имени администратора ``` После установки перезапустите терминал. ## Совместимость 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 | Хорошо | — | Без галлюцинаций (на коротких файлах) | ### Ключевые выводы 1. **Указание языка (`--language ru`) критично** — auto-detect может ошибиться и выдать мусор 2. **medium + float16 на GPU — лучший баланс** скорости и качества для любых записей 3. **large-v3 ненадёжен на длинных записях (>20 мин)** — галлюцинации даже с float16; medium стабильнее на любой длине 4. **medium устойчив к квантизации** — все варианты compute_type дают приемлемый результат; large-v3 деградирует катастрофически при любом int8 5. **CPU: int8_float32 — лучший баланс** — 1.5x быстрее float32 при том же качестве 6. **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](adr/005-parakeet-evaluation.md). ## Troubleshooting ### CUDA не обнаружен Убедитесь, что `nvidia-smi` возвращает информацию о GPU. Драйвер NVIDIA предоставляет `libcuda.so.1`, без которого CUDA не работает — его нельзя поставить через pip. ### Windows: ошибка при загрузке модели на GPU GPU на Windows требует **CUDA 12** (ctranslate2 4.7 не совместим с CUDA 11 и 13). Установите: ```bash winget install -e --id Nvidia.CUDA --version 12.9 # требует запуска от имени администратора ``` После установки перезапустите терминал. ### ARM (aarch64) cuBLAS через pip недоступен на ARM — нужен системный CUDA toolkit.