feat(openvino): добавлена поддержка Intel GPU через OpenVINO
- Зачем: - OpenVINO backend хардкодил "CPU", хотя Intel Arc GPU доступен и даёт ~2x ускорение. - Что: - новые device modes: --device openvino-gpu, openvino-cpu; openvino — авто-детект GPU/CPU. - detect_device() проверяет Intel GPU через OpenVINO Core API (с fail-safe). - OpenVINOBackend передаёт "GPU"/"CPU" в WhisperPipeline вместо хардкода "CPU". - подсказка "Совет: --model large-v3" при наличии GPU и модели не large-v3. - .gitattributes для нормализации line endings (eol=lf). - 150 тестов, включая GPU detection, routing, fallback, CLI device info. - README, docs/gpu.md, docs/PRD.md обновлены для Intel GPU. - Проверка: - uv run pytest (150 passed). - uv run transcribe --device openvino-gpu file.mp4 на Intel Arc 140T GPU. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.6
parent
dc59d2a620
commit
617181f2dc
@@ -46,10 +46,18 @@ MODEL_REQUIRED_FILES = [
|
||||
class OpenVINOBackend:
|
||||
"""Бэкенд транскрипции через openvino-genai WhisperPipeline."""
|
||||
|
||||
def __init__(self, compute_type_explicit: bool = True):
|
||||
"""compute_type_explicit=False означает, что compute_type пришёл из дефолтов."""
|
||||
def __init__(
|
||||
self,
|
||||
ov_device: str = "openvino-cpu",
|
||||
compute_type_explicit: bool = True,
|
||||
):
|
||||
"""ov_device: "openvino", "openvino-gpu" или "openvino-cpu".
|
||||
compute_type_explicit=False означает, что compute_type пришёл из дефолтов.
|
||||
"""
|
||||
self._ov_device = ov_device
|
||||
self._compute_type_explicit = compute_type_explicit
|
||||
self.actual_compute_type: str | None = None
|
||||
self.actual_ov_device: str | None = None
|
||||
|
||||
def ensure_model_available(
|
||||
self,
|
||||
@@ -76,6 +84,22 @@ class OpenVINOBackend:
|
||||
_validate_model_dir(downloaded_path)
|
||||
return str(downloaded_path)
|
||||
|
||||
def _resolve_ov_device(self) -> str:
|
||||
"""Резолвит device string в OpenVINO device: ``"GPU"`` или ``"CPU"``."""
|
||||
if self._ov_device == "openvino-gpu":
|
||||
return "GPU"
|
||||
if self._ov_device == "openvino-cpu":
|
||||
return "CPU"
|
||||
# "openvino" → авто-детект
|
||||
try:
|
||||
from openvino import Core
|
||||
|
||||
if "GPU" in Core().available_devices:
|
||||
return "GPU"
|
||||
except Exception:
|
||||
pass
|
||||
return "CPU"
|
||||
|
||||
def create_model(
|
||||
self,
|
||||
model_path: str,
|
||||
@@ -85,7 +109,9 @@ class OpenVINOBackend:
|
||||
"""Создаёт WhisperPipeline."""
|
||||
import openvino_genai as ov_genai
|
||||
|
||||
return ov_genai.WhisperPipeline(model_path, "CPU")
|
||||
ov_dev = self._resolve_ov_device()
|
||||
self.actual_ov_device = ov_dev
|
||||
return ov_genai.WhisperPipeline(model_path, ov_dev)
|
||||
|
||||
def transcribe(
|
||||
self,
|
||||
|
||||
Reference in New Issue
Block a user