諸事情によりコンテナでWhisperを実行したくなったと思いねえ。しかし初回ダウンロードにはとても時間がかかる。毎回ロードするのがわかっているならモデルファイルは焼いておきたい。
FROM python:3.13-trixie
ENV DEBIAN_FRONTEND=noninteractive \
WHISPER_CACHE_DIR=/opt/whisper-cache \
PYTHONUNBUFFERED=1
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
ffmpeg \
build-essential \
pkg-config \
libavformat-dev \
libavcodec-dev \
libavdevice-dev \
libavutil-dev \
libavfilter-dev \
libswscale-dev \
libswresample-dev \
&& rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir faster-whisper
RUN mkdir -p "${WHISPER_CACHE_DIR}" \
&& python - <<'PY'
import os
from faster_whisper import download_model
model_name = "large-v3"
download_root = os.environ["WHISPER_CACHE_DIR"]
download_model(model_name, output_dir=download_root)
PY
WORKDIR /app
ENV WHISPER_MODEL_NAME=large-v3
CMD ["python"]
イメージにはダウンロードしたモデルが保存されている。
root@9b61b0c2018b:/app# ls -la /opt/whisper-cache/ total 3018420 drwxr-xr-x 3 root root 4096 Nov 4 06:12 . drwxr-xr-x 1 root root 4096 Nov 4 06:12 .. drwxr-xr-x 3 root root 4096 Nov 4 06:08 .cache -rw-r--r-- 1 root root 2394 Nov 4 06:08 config.json -rw-r--r-- 1 root root 3087284237 Nov 4 06:12 model.bin -rw-r--r-- 1 root root 340 Nov 4 06:08 preprocessor_config.json -rw-r--r-- 1 root root 2480617 Nov 4 06:08 tokenizer.json -rw-r--r-- 1 root root 1068114 Nov 4 06:08 vocabulary.json
便利...ではあるけど、別にコンテナのアーキテクチャに非依存なモデルなのでS3とかEFSにでもおいておけばいいような気はする。