Author SHA1 Message Date
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
Dmitriy DementievandClaude Opus 4.6 248f260005 docs(gpu): CPU int8_float32, сравнение pipeline-ов, CUDA рекомендации
- Добавлена секция CPU бэкенда: int8_float32 как рекомендация, тюнинг потоков
- Объяснение разницы качества OpenVINO vs CTranslate2 (pipeline декодирования)
- Секция CUDA: int8_float32/int8_float16 как альтернатива для тестирования
- Обновлена таблица OpenVINO моделей (medium fp16)
- Обновлены таблицы скорости и качества

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 10:45:17 +03:00
Dmitriy DementievandClaude Opus 4.6 413cb3e6d8 feat(openvino): добавить medium fp16 модель как опцию
OpenVINO/whisper-medium-fp16-ov доступна через --compute-type fp16.
На CPU fp16 эмулируется программно (медленно), но на Intel Arc GPU
даёт аппаратное ускорение через XMX. Не меняет дефолты.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 09:48:29 +03:00
Dmitriy DementievandClaude Opus 4.6 9d41b893c3 docs(readme): добавить int8_float32 в таблицу compute_type
Бенчмарк показал: int8_float32 даёт 1.5x ускорение на CPU при сохранении
качества float32. Добавлен как рекомендуемый вариант для CPU.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 09:04:24 +03:00
3 changed files with 106 additions and 1 deletions
+1
View File
@@ -243,6 +243,7 @@ language = "en"
|-----|--------|----------|----------|--------------------| |-----|--------|----------|----------|--------------------|
| `float16` | CUDA | ~4.5-5 GB | Отлично | **По умолчанию для CUDA** | | `float16` | CUDA | ~4.5-5 GB | Отлично | **По умолчанию для CUDA** |
| `int8_float16` | CUDA | ~4.7 GB | Отлично | GPU от 6 GB, альтернатива float16 | | `int8_float16` | CUDA | ~4.7 GB | Отлично | GPU от 6 GB, альтернатива float16 |
| `int8_float32` | CPU | Среднее | Отлично | **Рекомендуется для CPU** — 1.5x быстрее float32 при том же качестве |
| `int8` | CUDA / OpenVINO | Низкое | Хорошо, но бывают галлюцинации | **По умолчанию для OpenVINO** | | `int8` | CUDA / OpenVINO | Низкое | Хорошо, но бывают галлюцинации | **По умолчанию для OpenVINO** |
| `fp16` | OpenVINO | Низкое | Отлично | OpenVINO large-v3 (выбирается автоматически) | | `fp16` | OpenVINO | Низкое | Отлично | OpenVINO large-v3 (выбирается автоматически) |
| `float32` | CPU | Среднее | Отлично | **По умолчанию для CPU** | | `float32` | CPU | Среднее | Отлично | **По умолчанию для CPU** |
+104 -1
View File
@@ -37,7 +37,7 @@ OpenVINO ускоряет inference на x86 процессорах (Intel и AM
| tiny | OpenVINO/whisper-tiny-int8-ov | — | | tiny | OpenVINO/whisper-tiny-int8-ov | — |
| base | — | OpenVINO/whisper-base-fp16-ov | | base | — | OpenVINO/whisper-base-fp16-ov |
| small | OpenVINO/whisper-small-int8-ov | — | | small | OpenVINO/whisper-small-int8-ov | — |
| medium | OpenVINO/whisper-medium-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 | OpenVINO/whisper-large-v3-int8-ov | OpenVINO/whisper-large-v3-fp16-ov |
### Результаты тестирования OpenVINO ### Результаты тестирования OpenVINO
@@ -77,6 +77,83 @@ OpenVINO ускоряет inference на x86 процессорах (Intel и AM
- **medium** — для повседневного использования и обработки ИИ. Ключевые термины верные, единичные ляпы не влияют на смысл конспекта. Оптимальный баланс скорости и качества. - **medium** — для повседневного использования и обработки ИИ. Ключевые термины верные, единичные ляпы не влияют на смысл конспекта. Оптимальный баланс скорости и качества.
- **large-v3** — для важных записей, где нужна дословная точность. Лучшая пунктуация и связность. На OpenVINO (416с) быстрее, чем medium на чистом CPU (734с) — лучшее качество при выше скорости. - **large-v3** — для важных записей, где нужна дословная точность. Лучшая пунктуация и связность. На OpenVINO (416с) быстрее, чем medium на чистом CPU (734с) — лучшее качество при выше скорости.
## 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
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](https://github.com/dementev-dev/local-transcriber/issues).
## Настройка по платформам ## Настройка по платформам
### Linux / WSL2 (x86_64) ### Linux / WSL2 (x86_64)
@@ -115,9 +192,12 @@ winget install -e --id Nvidia.CUDA --version 12.9 # требует запус
| **OpenVINO + small int8** | **93с** | **153с** | **~10-16x реалтайм** | | **OpenVINO + small int8** | **93с** | **153с** | **~10-16x реалтайм** |
| **OpenVINO + medium int8** | **171-205с** | **413с** | **~4-6x реалтайм** | | **OpenVINO + medium int8** | **171-205с** | **413с** | **~4-6x реалтайм** |
| **OpenVINO + large-v3 fp16** | **416с** | — | **~2.3x реалтайм** | | **OpenVINO + large-v3 fp16** | **416с** | — | **~2.3x реалтайм** |
| **CPU + medium int8_float32** | **~460с*** | — | **~2x реалтайм** |
| CPU + medium float32 | 658с (11 мин) | ~26 мин | ~1.5x реалтайм | | CPU + medium float32 | 658с (11 мин) | ~26 мин | ~1.5x реалтайм |
| CPU + large-v3 int8 | 839с (14 мин) | ~37 мин | ~1:1 реалтайм | | CPU + large-v3 int8 | 839с (14 мин) | ~37 мин | ~1:1 реалтайм |
\* Замер на AMD Ryzen 7 8845H (8 потоков), файл 14:41. На эталонном 16-мин файле — TBD.
## Результаты тестирования качества ## Результаты тестирования качества
Тесты проведены на реальных записях рабочих созвонов (русский язык, технические термины: Тесты проведены на реальных записях рабочих созвонов (русский язык, технические термины:
@@ -128,6 +208,7 @@ SQL, PostgreSQL, Greenplum, Airflow, ClickHouse, Docker, CDR, GTP, MAP).
| large-v3 int8 GPU | Плохо | Галлюцинации (фразы ×25), потеря контента | | large-v3 int8 GPU | Плохо | Галлюцинации (фразы ×25), потеря контента |
| large-v3 float16 GPU | Отлично | — | | large-v3 float16 GPU | Отлично | — |
| medium float16 GPU | Хорошо | Редкие мелкие ляпы в терминах | | medium float16 GPU | Хорошо | Редкие мелкие ляпы в терминах |
| medium int8_float32 CPU | Отлично | Качество ≈ float32, на уровне облачных сервисов |
| medium float32 CPU | Хорошо | Сопоставимо с large-v3 int8, без галлюцинаций | | medium float32 CPU | Хорошо | Сопоставимо с large-v3 int8, без галлюцинаций |
| large-v3 int8 CPU | Хорошо | Без галлюцинаций (на коротких файлах) | | large-v3 int8 CPU | Хорошо | Без галлюцинаций (на коротких файлах) |
@@ -137,6 +218,28 @@ SQL, PostgreSQL, Greenplum, Airflow, ClickHouse, Docker, CDR, GTP, MAP).
2. **float16/float32 стабильнее int8** — особенно на записях >20 минут 2. **float16/float32 стабильнее int8** — особенно на записях >20 минут
3. **medium + float16 на GPU — лучший баланс** скорости и качества для повседневного использования 3. **medium + float16 на GPU — лучший баланс** скорости и качества для повседневного использования
4. **large-v3 + 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 ## Troubleshooting
@@ -20,6 +20,7 @@ MODEL_REPOS: dict[tuple[str, str], str] = {
("base", "fp16"): "OpenVINO/whisper-base-fp16-ov", ("base", "fp16"): "OpenVINO/whisper-base-fp16-ov",
("small", "int8"): "OpenVINO/whisper-small-int8-ov", ("small", "int8"): "OpenVINO/whisper-small-int8-ov",
("medium", "int8"): "OpenVINO/whisper-medium-int8-ov", ("medium", "int8"): "OpenVINO/whisper-medium-int8-ov",
("medium", "fp16"): "OpenVINO/whisper-medium-fp16-ov",
("large-v3", "int8"): "OpenVINO/whisper-large-v3-int8-ov", ("large-v3", "int8"): "OpenVINO/whisper-large-v3-int8-ov",
("large-v3", "fp16"): "OpenVINO/whisper-large-v3-fp16-ov", ("large-v3", "fp16"): "OpenVINO/whisper-large-v3-fp16-ov",
} }