docs(adr): ADR-004 — дефолты compute_type и стратегия ускорения

Бенчмарк показал: OpenVINO fp16 даёт 3.7x ускорение, но теряет качество
на русской разговорной речи. CTranslate2 int8_float32 — оптимальный баланс.
Следующий шаг — DirectML бэкенд для AMD Radeon iGPU.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Dmitriy Dementiev
2026-03-23 15:58:12 +03:00
co-authored by Claude Opus 4.6
parent e6210fc73f
commit 6f7e61c779
+59
View File
@@ -0,0 +1,59 @@
# ADR-004: Дефолты compute_type и стратегия ускорения
**Статус**: Принято
**Дата**: 2026-03-23
## Контекст
После внедрения OpenVINO (ADR-003) дефолты compute_type выбирались из соображений
скорости: fp16 для OpenVINO, float32 для CPU. Бенчмарк на реальной записи совещания
(14:41, русский, 3 участника, AMD Ryzen 7 8845H) показал, что квантизация существенно
влияет на качество распознавания русской речи.
### Результаты бенчмарка (medium модель)
| Бэкенд + compute_type | Время | Качество |
|---|---|---|
| OpenVINO fp16 | ~240с | Среднее — грубые ошибки на нечёткой речи |
| CTranslate2 int8_float32 | ~599с | Отличное — на уровне облачного Whisper.ai |
| CTranslate2 float32 | ~881с | Отличное (эталон) |
| OpenVINO fp16, large-v3 | ~503с | Плохое — хуже medium на том же бэкенде |
**Ключевые наблюдения:**
1. OpenVINO fp16 хорошо распознаёт «чёткие» англоязычные термины (DWH, NiFi, FineBI),
но ломается на быстрой разговорной русской речи ("датарентген" → "госпиталин ген").
2. large-v3 через OpenVINO fp16 деградирует сильнее medium — ошибки округления
накапливаются в большей модели.
3. CTranslate2 int8_float32 (mixed precision: int8 матрицы, float32 аккумулятор)
даёт качество, сопоставимое с float32, при 1.5x ускорении.
## Решение
### Дефолт для CPU: оставить float32
int8_float32 показал отличные результаты, но выборка одна. Оставляем float32 как
безопасный дефолт — пользователи, которым важна скорость, могут явно указать
`--compute-type int8_float32`.
### OpenVINO — оставить как есть
OpenVINO fp16 остаётся дефолтом для OpenVINO-бэкенда. Это осознанный trade-off:
3.7x ускорение за счёт потери качества на сложных участках. Для случаев, когда
нужно максимальное качество, пользователь выбирает `--device cpu`.
### Направление ускорения: DirectML
Для получения скорости GPU при сохранении качества float16 — нужен новый бэкенд
на базе onnxruntime-directml. DirectX 12 работает с любым GPU на Windows, включая
AMD Radeon iGPU. Float16 на реальном GPU (аппаратный) не имеет проблем CPU-квантизации.
Приоритет реализации:
1. DirectML бэкенд (Radeon iGPU, потенциально Intel Arc)
2. Ryzen AI NPU (XDNA) — когда tooling от AMD дозреет
## Последствия
- Дефолты не меняются — обратная совместимость сохранена
- Пользователи с AMD получают рекомендацию `--compute-type int8_float32` в документации
- Архитектура (ADR-003) уже поддерживает добавление DirectML как нового бэкенда