Files
local-transcriber/docs/gpu.md
T
Dmitriy Dementiev dae9d107c9 docs: уточнены ограничения авто-профиля и профиль turbo
- Зачем:
  - документация обещала large-v3-turbo на NVIDIA, где он недоступен, и умалчивала, что модель по умолчанию без CUDA понимает только русскую речь.
- Что:
  - large-v3-turbo перенесён из таблицы faster-whisper в раздел OpenVINO с измеренными размерами моделей.
  - языковое ограничение авто-профиля и предупреждение CLI описаны в README, gpu.md и ADR-006.
  - в backlog добавлен пункт про turbo для faster-whisper, в gpu.md снято расхождение по скорости openvino-cpu.
- Проверка:
  - вычитка diff, проверка якорной ссылки на docs/gpu.md.
2026-08-12 11:53:09 +03:00

21 KiB
Raw Blame History

Ускорение транскрипции

Режимы --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 (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 / WSL2 (x86_64)

Библиотека cuBLAS ставится автоматически (зависимость nvidia-cublas-cu12 подтягивается при установке). Дополнительных шагов не требуется.

На ARM (aarch64) cuBLAS через pip недоступен — нужен системный CUDA toolkit.

Windows

Нужен системный CUDA 12 (ctranslate2 4.7 не совместим с CUDA 11 и 13):

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.

Troubleshooting

CUDA не обнаружен

Убедитесь, что nvidia-smi возвращает информацию о GPU. Драйвер NVIDIA предоставляет libcuda.so.1, без которого CUDA не работает — его нельзя поставить через pip.

Windows: ошибка при загрузке модели на GPU

GPU на Windows требует CUDA 12 (ctranslate2 4.7 не совместим с CUDA 11 и 13). Установите:

winget install -e --id Nvidia.CUDA --version 12.9   # требует запуска от имени администратора

После установки перезапустите терминал.

ARM (aarch64)

cuBLAS через pip недоступен на ARM — нужен системный CUDA toolkit.