Files
local-transcriber/docs/gpu.md
Dmitriy DementievandClaude Opus 4.6 8ae74d2748 docs(gpu): потенциальные направления — quality pipeline для OpenVINO, CUDA int8_float32
Зафиксированы два направления развития:
- temperature fallback и фильтры галлюцинаций для OpenVINO бэкенда
- тестирование int8_float32/int8_float16 на CUDA

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 11:00:31 +03:00

16 KiB
Raw Permalink Blame History

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

Режимы --device

  • auto (по умолчанию) — CUDA → OpenVINO GPU → OpenVINO CPU → CPU (первый доступный)
  • cuda — строго NVIDIA GPU, ошибка если недоступен
  • openvino — авто-выбор OpenVINO GPU или CPU
  • openvino-gpu — строго Intel GPU через OpenVINO
  • openvino-cpu — строго CPU через OpenVINO (ускорение 2-4x на x86)
  • cpu — строго CPU (faster-whisper/CTranslate2)

Какой бэкенд на каком оборудовании

Оборудование Рекомендуемый --device Бэкенд Ожидаемая скорость
NVIDIA GPU (6+ GB VRAM) auto / cuda faster-whisper (CTranslate2) 7-19x реалтайм
Intel Arc iGPU / dGPU auto / openvino-gpu OpenVINO GenAI (GPU) TBD
Intel/AMD x86 CPU auto / openvino-cpu OpenVINO GenAI (CPU) 3-6x реалтайм*
Любой CPU (fallback) cpu faster-whisper (CTranslate2) ~1.5x реалтайм
Apple Silicon (macOS) cpu faster-whisper (CTranslate2) ~2x реалтайм

* По результатам тестирования на Intel и AMD CPU. Реальная скорость зависит от 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)
  • Аудиодекодирование: через 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

Результаты тестирования OpenVINO

Реальные записи рабочих созвонов (русский, техтермины: 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 (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с) — лучшее качество при выше скорости.

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 рекомендуется задать число потоков равным числу физических ядер (не виртуальных):

OMP_NUM_THREADS=8 transcribe meeting.mp4 --device cpu --compute-type int8_float32

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, и для большинства случаев это оптимальный выбор.

Однако large-v3 с int8 на GPU может давать галлюцинации на длинных записях (зафиксировано: повтор фраз ×25, потеря контента). Причина — чистый int8 без float аккумулятора теряет точность в глубокой модели.

Альтернатива для тестирования:

compute_type Ожидаемый эффект
float16 Дефолт — отлично работает
int8_float32 Потенциально быстрее float16, качество на уровне float32. Не протестировано — ждём feedback
int8_float16 int8 веса + float16 аккумулятор. Может быть быстрее int8_float32 при приемлемом качестве
int8 Быстрый, но рискует галлюцинациями на large-v3 и длинных записях

Если у вас есть NVIDIA GPU и вы протестировали int8_float32 / int8_float16 — поделитесь результатами через issues.

Настройка по платформам

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 medium float16 large-v3 float16 Рекомендация
RTX 3060 6 GB medium float16 (дефолт)
RTX 4050 6 GB medium float16
Quadro M3000M 4 GB ⚠️ tight medium float16 или int8

Ожидаемая скорость

Замеры на RTX 3060 Laptop (6 GB) и Intel CPU (WSL2):

Конфигурация 16 мин файл 42 мин файл Отн. скорость
GPU + medium float16 ~35с ~133с ~19x реалтайм
GPU + large-v3 float16 ~90с ~350с ~7x реалтайм
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 реалтайм

* Замер на AMD Ryzen 7 8845H (8 потоков), файл 14:41. На эталонном 16-мин файле — TBD.

Результаты тестирования качества

Тесты проведены на реальных записях рабочих созвонов (русский язык, технические термины: SQL, PostgreSQL, Greenplum, Airflow, ClickHouse, Docker, CDR, GTP, MAP).

Конфигурация Качество (длинная запись, 42 мин) Проблемы
large-v3 int8 GPU Плохо Галлюцинации (фразы ×25), потеря контента
large-v3 float16 GPU Отлично
medium float16 GPU Хорошо Редкие мелкие ляпы в терминах
medium int8_float32 CPU Отлично Качество ≈ float32, на уровне облачных сервисов
medium float32 CPU Хорошо Сопоставимо с large-v3 int8, без галлюцинаций
large-v3 int8 CPU Хорошо Без галлюцинаций (на коротких файлах)

Ключевые выводы

  1. Указание языка (--language ru) критично — auto-detect может ошибиться и выдать мусор
  2. float16/float32 стабильнее int8 — особенно на записях >20 минут
  3. medium + float16 на GPU — лучший баланс скорости и качества для повседневного использования
  4. large-v3 + float16 на GPU — для максимального качества важных записей
  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 ускорении. На CUDA аналогичный эффект может решить проблему галлюцинаций large-v3 с int8 при сохранении скорости GPU. Требуется тестирование на реальном NVIDIA GPU.

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.