Docker¶
Образы¶
Образы публикуются в GitHub Container Registry при каждом выпуске:
| Образ | Платформы | Для чего |
|---|---|---|
ghcr.io/sergeyshk/stt-ru:<версия>, :latest |
linux/amd64, linux/arm64 | CPU |
ghcr.io/sergeyshk/stt-ru:<версия>-gpu, :latest-gpu |
linux/amd64 | NVIDIA GPU |
В образе - stt-ru со всеми дополнениями (сервис, оценка качества, ffmpeg) и модель по умолчанию: контейнер распознает без сети. Команда по умолчанию - stt-ru serve --host 0.0.0.0, вместо нее можно передать любую команду stt-ru. Рабочий каталог - /data, пользователь - stt с uid 1000.
Веб-сервис¶
docker run -d --name stt-ru -p 8000:8000 -e STT_RU_TOKEN=my-secret-token ghcr.io/sergeyshk/stt-ru
Веб-интерфейс - на http://<адрес сервера>:8000. Параметры сервиса передаются после имени образа вместе с командой:
docker run -d -p 8000:8000 -e STT_RU_TOKEN=my-secret-token ghcr.io/sergeyshk/stt-ru serve --host 0.0.0.0 -j 2 --max-size 1000
docker stop останавливает сервис штатно: образ останавливается сигналом SIGINT, как Ctrl+C. Состояние контейнера показывает healthcheck: у serve - ответ /healthz, у других команд контейнер здоров, пока работает.
Команды для файлов¶
Каталог с записями монтируется в /data:
docker run --rm -v "$PWD:/data" ghcr.io/sergeyshk/stt-ru transcribe call.wav
docker run --rm -v "$PWD:/data" --user "$(id -u):$(id -g)" ghcr.io/sergeyshk/stt-ru transcribe calls/ -o out/ -f srt,csv
docker run -d -v /archive:/data --user "$(id -u):$(id -g)" ghcr.io/sergeyshk/stt-ru transcribe wav -r -o out --watch --delete-source
Команды в контейнере работают от пользователя с uid 1000. Чтобы записывать результаты (-o, --summary) или удалять исходники в каталоге другого пользователя, добавьте --user "$(id -u):$(id -g)".
Другие модели¶
Другие модели скачиваются при первом запуске в /opt/huggingface внутри контейнера и пропадают вместе с ним. Чтобы не скачивать их заново после пересоздания контейнера, подключите к /opt/huggingface именованный том: при первом подключении Docker скопирует в него модель из образа. Том хранит файлы и после обновления образа; если в новой версии сменится модель по умолчанию, она скачается в том.
docker run -d -p 8000:8000 -e STT_RU_TOKEN=my-secret-token -v stt-models:/opt/huggingface ghcr.io/sergeyshk/stt-ru serve --host 0.0.0.0 -m t-tech/t-one
Docker Compose¶
docker/compose.yaml в репозитории запускает сервис с портом 8000, токеном и перезапуском. Токен берется из переменной окружения или файла .env рядом с файлом Compose:
echo "STT_RU_TOKEN=my-secret-token" > docker/.env
docker compose -f docker/compose.yaml up -d
GPU¶
Образ -gpu распознает на NVIDIA GPU через CUDA 13. Нужны:
- GPU поколения Turing (compute capability 7.5) или новее: CUDA 13 не поддерживает Maxwell, Pascal и Volta;
- драйвер NVIDIA 580 или новее;
- NVIDIA Container Toolkit.
docker run -d --gpus all -p 8000:8000 -e STT_RU_TOKEN=my-secret-token ghcr.io/sergeyshk/stt-ru:latest-gpu
docker compose -f docker/compose.yaml -f docker/compose.gpu.yaml up -d
Без GPU образ распознает на CPU.
Сборка образа¶
make docker # docker build -f docker/Dockerfile -t stt-ru .
make docker-gpu # docker build -f docker/Dockerfile.gpu -t stt-ru:gpu .
Аргумент сборки MODEL меняет модель, которая загружается в образ; пустое значение собирает образ без модели. Команды образа по-прежнему берут модель по умолчанию, поэтому загруженную модель указывают параметром -m:
docker build -f docker/Dockerfile --build-arg MODEL=t-tech/t-one -t stt-ru:t-one .
docker run -d -p 8000:8000 -e STT_RU_TOKEN=my-secret-token stt-ru:t-one serve --host 0.0.0.0 -m t-tech/t-one