Files
vidconf/deploy/whisper/download-model.py

55 lines
2.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""Идемпотентная предзагрузка модели faster-whisper.
Без предзагрузки первая транскрибация после старта воркера сама тянет веса
модели из HuggingFace Hub в рантайме (минуты простоя пайплайна на первом
сеансе) — раньше предзагрузки не было вовсе.
Использует ТУ ЖЕ функцию, что и сам faster-whisper при ленивой загрузке
модели (`faster_whisper.utils.download_model`, см.
`backend/core/plugins/faster_whisper.py::_get_model` — `WhisperModel(...,
download_root=...)` внутри вызывает её с `cache_dir=download_root`), поэтому
создаёт кэш `huggingface_hub`, полностью совместимый с тем, что ожидает
плагин в `WHISPER_CACHE_DIR` (`config/plugins.yaml`,
`transcriber.options.download_root`) — повторный запуск (в т.ч. сам запуск
воркера) ничего не перекачивает: `snapshot_download` идемпотентен по факту
наличия файлов в кэше.
Запускается init-контейнером `whisper-model-init` (сборка backend-образа,
профили compose `transcribe`/`transcribe-gpu`, см. `deploy/docker-compose.yml`)
— faster-whisper уже есть в зависимостях backend/worker (`pyproject.toml`).
Путь кэша — КОНТРАКТ с `backend/services/ai_tiers.py` (см. докстринг модуля):
детект доступности уровня AI (`services/ai_levels.py`) и сам плагин
транскрибера (`transcriber.options.download_root` в `config/plugins.yaml`)
ожидают модель именно по пути `{WHISPER_MODELS_ROOT}/{модель}` (например,
`/models/whisper/small`) — НЕ по плоскому корню тома. `WHISPER_MODELS_ROOT`
здесь должен буквально совпадать со значением одноимённой константы в
`ai_tiers.py`.
"""
import os
import sys
WHISPER_MODEL = os.environ.get("WHISPER_MODEL", "small")
WHISPER_MODELS_ROOT = os.environ.get("WHISPER_MODELS_ROOT", "/models/whisper")
def main() -> None:
from faster_whisper.utils import download_model
cache_dir = f"{WHISPER_MODELS_ROOT}/{WHISPER_MODEL}"
print(
f"[download-whisper-model] модель '{WHISPER_MODEL}' -> {cache_dir}",
flush=True,
)
path = download_model(WHISPER_MODEL, cache_dir=cache_dir)
print(f"[download-whisper-model] готово: {path}", flush=True)
if __name__ == "__main__":
try:
main()
except Exception as exc: # noqa: BLE001
print(f"[download-whisper-model] ошибка: {exc}", file=sys.stderr)
sys.exit(1)