From 6f7e61c779921e4dddc004c4174b6153b04f045f Mon Sep 17 00:00:00 2001 From: Dmitriy Dementiev Date: Mon, 23 Mar 2026 15:58:12 +0300 Subject: [PATCH] =?UTF-8?q?docs(adr):=20ADR-004=20=E2=80=94=20=D0=B4=D0=B5?= =?UTF-8?q?=D1=84=D0=BE=D0=BB=D1=82=D1=8B=20compute=5Ftype=20=D0=B8=20?= =?UTF-8?q?=D1=81=D1=82=D1=80=D0=B0=D1=82=D0=B5=D0=B3=D0=B8=D1=8F=20=D1=83?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D1=80=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Бенчмарк показал: OpenVINO fp16 даёт 3.7x ускорение, но теряет качество на русской разговорной речи. CTranslate2 int8_float32 — оптимальный баланс. Следующий шаг — DirectML бэкенд для AMD Radeon iGPU. Co-Authored-By: Claude Opus 4.6 (1M context) --- docs/adr/004-compute-type-defaults.md | 59 +++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/adr/004-compute-type-defaults.md 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 как нового бэкенда