Первоначальная версия VidConf
This commit is contained in:
54
deploy/whisper/download-model.py
Normal file
54
deploy/whisper/download-model.py
Normal file
@@ -0,0 +1,54 @@
|
||||
"""Идемпотентная предзагрузка модели 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)
|
||||
Reference in New Issue
Block a user