最近ローカルLLMにハマっているのだが、ひょんなことから「WhisperXで話者分離&字幕作成」をやってみようと思い立った。
ところが、RTX 4080を積んだ Ubuntu 24.04 環境で実行しようとすると libcudnn_cnn_infer.so.8 がないというエラーが発生。調べたところ、Ubuntu 24.04 では CUDA 11.8 + cuDNN 8 の組み合わせが直接インストールできない模様。
色々試した結果、DockerでUbuntu 22.04ベースの環境を作るのが一番スムーズだった。構築手順を備忘録として残す。
NVIDIA Container Toolkitのインストール
DockerからGPUを使うには、まず NVIDIA Container Toolkit をセットアップする。 手順は公式ドキュメント ⧉通り。以下、参考まで。
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.listsudo sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.listsudo apt-get updateexport NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1sudo apt-get install -y \ nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \ nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \ libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \ libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}ベースイメージを取得
Ubuntu 22.04(Jammy)の最新イメージを取得する。
docker pull ubuntu:jammy-20250730Dockerfile作成
以下のDockerfileを作成する。 CUDA 11.8 + cuDNN 8 をインストールし、WhisperXと依存ライブラリを入れる。 CUDA 12もcublasで求められるのでインストールする。
FROM ubuntu:jammy-20250730
# コンテナ内のシステムを最新の状態に更新RUN apt update && apt install -y --no-install-recommends \ build-essential \ software-properties-common \ wget \ gnupg \ git \ ffmpeg \ python3-pip \ ca-certificates
# NVIDIA CUDAリポジトリ追加 & CUDA 11.8 + cuDNN 8 + CUDA 12.3 インストールRUN wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb && \ dpkg -i cuda-keyring_1.0-1_all.deb && \ apt update && \ apt -y install cuda-11-8 libcudnn8 libcudnn8-dev cuda-12-3
# パス設定ENV PATH="/usr/local/cuda-11.8/bin:${PATH}"ENV LD_LIBRARY_PATH="/usr/local/cuda-11.8/lib64:/usr/local/cuda-12.3/lib64:${LD_LIBRARY_PATH}"
# WhisperX & pyannote.audioインストールRUN pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 && \ pip install whisperx && \ pip install "pyannote.audio"
# コンテナが起動した際のデフォルトコマンドCMD ["/bin/bash"]イメージのビルド
docker build -t ubuntu:whisperx .WhisperXの実行
ホストに音声ファイルを用意して、コンテナから実行する。
例: /home/me/Documents/makesrt/audio.wav
docker run \ -v /home/me/Documents/makesrt:/root/makesrt \ --gpus all \ --rm \ -w /root/makesrt \ ubuntu:whisperx \ whisperx "audio.wav" \ --compute_type "float16" \ --device "cuda" \ --language "en" --diarize \ --hf_token <HUGGINGFACE_TOKEN> \ --output_dir "./output" \ --output_format "all" \オプション解説
-v: ホストとコンテナ間でディレクトリを共有-w: ワーキングディレクトリ--gpus all: GPUを全て利用--diarize: 話者分離を有効化(要Hugging Face Token)--compute_type "float16": RTX 4080などのGPUで高速化
これでWhisperXがGPUで実行される。CPUに比べて爆速。
まとめ
Ubuntu 24.04でWhisperXを動かそうとすると、CUDA/cuDNNのバージョン制約に引っかかる。
色々やりようはあると思うが、今回は Ubuntu 22.04ベースのDockerイメージを作ることで解決した。
- ローカル環境を汚さない
- GPUをフル活用できる
- 他の環境でも再現性が高い
結論:やっぱりDockerは正義。