| docker | ||
| test | ||
| .gitignore | ||
| docker-compose.yml | ||
| README.md | ||
whisper-test (faster-whisper on DGX Spark/ThinkStation PGX)
NVIDIA DGX Spark 相当環境(Lenovo ThinkStation PGX)で、faster-whisper を CUDA で確実に動かすための最小構成をまとめたリポジトリです。ホスト側 CUDA 13 が既に入っており変更しづらい研究用マシンでも、Docker 上で CUDA 12.4 + cuDNN 9 でビルドした CTranslate2 を用いて GPU 推論を再現できます。
公式 faster-whisper リポジトリ: https://github.com/SYSTRAN/faster-whisper
なぜこの構成が必要か
faster-whisperは CTranslate2 を利用し、ビルド時の CUDA/cuDNN と実行環境が一致していないと GPU 版が動作しない。- ThinkStation PGX ではホストに CUDA 13 が入っており、
pip install ctranslate2すると CPU 版や CUDA 非対応ビルドが入ることがある。 - 公式手順だけでは CUDA 版が入らず、
ValueError: This CTranslate2 package was not compiled with CUDA supportとなるケースがあった。 - そこで CUDA 12.4 + cuDNN 9 を明示した Docker で CTranslate2 をソースビルドし、Python バインディングを明示的に再インストールすることで再現性を確保。
提供物
docker-compose.ymlとdocker/Dockerfileによる GPU 対応コンテナ構成- ベース:
nvidia/cuda:12.4.1-cudnn-devel-ubuntu22.04 - CTranslate2 v4.6.2 を CUDA 有効でソースビルド
pipで入る CPU 版ctranslate2を一度アンインストールし、ビルド済み Python バインディングを再インストール
- ベース:
- FastAPI + Uvicorn の簡易サーバ (
docker/server.py)POST /transcribeで音声を受け取り、Whisper 推論結果を返却GET /healthでモデル名・デバイス・compute_type を返却
- サンプル音声とテストスクリプト(
test/)
仕組みのポイント
- CUDA 12.x + cuDNN 9 で CTranslate2 をビルドし、実行時も同一バージョンを保証
entrypoint.shでLD_LIBRARY_PATHを明示設定し、nvidia.cublas.lib/nvidia.cudnn.libのパスを動的に追加- ホスト CUDA 13 と切り離すため Docker を必須とし、NVIDIA Container Toolkit を前提に GPU を渡す
前提条件
- NVIDIA Container Toolkit 導入済み
- GPU ドライバがホストに正しく入っていること
- ホスト側 CUDA は 13 系のままで可(変更不要)
ローカルCPU実行(任意)
Docker を使わず手元の Python (.venv) で CPU 推論だけ試す場合の簡易手順:
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r docker/requirements.txt
# CPU でサンプル音声を実行
FW_DEVICE=cpu FW_COMPUTE_TYPE=int8 python3 test/transcribe_cpu.py
※ CPU のみの確認用。GPU を使う場合は Docker 構成を推奨。
セットアップ
# ビルド
docker compose build
# 起動(GPU 必須)
docker compose up -d
# ヘルスチェック
curl http://localhost:8002/health
推論APIの使い方
curl -X POST http://localhost:8002/transcribe \
-F "file=@test/003.wav" \
-F "language=ja" \
-F "beam_size=5" \
-F "vad_filter=true"
レスポンスには text と segments(start/end/text)、language, language_probability が含まれます。
環境変数でモデルや実行設定を変更できます:
FW_MODEL(デフォルトlarge-v3)FW_DEVICE(デフォルトcuda)FW_COMPUTE_TYPE(デフォルトfloat16)
Docker コンテナ内で test/ のスクリプトを実行する例
ホストに Python を入れずに検証したい場合、起動済みコンテナ内でテストスクリプトを実行できます。
# 1) コンテナに入る(compose が起動している前提)
docker compose exec whisper bash
# 2) GPU 版サンプル(デフォルトの large-v3 / float16)
python3 test/transcribe.py
# 3) CPU で試したい場合(compute_type を切り替え)
FW_DEVICE=cpu FW_COMPUTE_TYPE=int8 python3 test/transcribe_cpu.py
いずれも test/003.wav を入力にし、標準出力へテキストと各セグメントを表示します。自分の音声で試す場合は python3 test/transcribe.py /path/to/your.wav のようにパスを指定してください。
ディレクトリ構成(抜粋)
docker-compose.yml— サービス定義(GPU リクエスト含む)docker/Dockerfile— CUDA 12.4 + cuDNN 9 ベースで CTranslate2 をソースビルドdocker/entrypoint.sh— CUDA ライブラリパスを動的設定し uvicorn 起動docker/server.py— FastAPI サーバ(/health, /transcribe)docker/requirements.txt— 最小依存:faster-whisper,fastapi,uvicorn[standard],python-multiparttest/— サンプル音声とローカル実行スクリプト
再現のための注意点
pip install faster-whisperだけでは CUDA 版ctranslate2は保証されない- CUDA バージョン不一致だとインストール成功しても実行時に GPU を掴まない
- 本 Dockerfile は一度 CPU 版をアンインストールし、ビルド済み CUDA 版を再インストールして整合性を取る