diff --git a/docs/adr/004-compute-type-defaults.md b/docs/adr/004-compute-type-defaults.md new file mode 100644 index 0000000..c9e268b --- /dev/null +++ b/docs/adr/004-compute-type-defaults.md @@ -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 как нового бэкенда