初めに
今回は、piper-plusのDockerイメージを使って、ブラウザ上で操作できるGradio WebUIのTTS環境を構築します。
piper-plusはDockerイメージ群を提供しており、CLI推論・FastAPIサーバー・Gradio WebUIの3つの利用モードに対応しています。PIPER_MODEL 環境変数を指定するだけで、起動時にモデルが自動ダウンロードされるため、Dockerさえあれば他の環境構築は不要です。

開発環境
- OS: Linux推奨(Docker Desktop経由でWindows/macOSも可)
- Docker: 24.x以上
- Docker Compose: v2
- (オプション)NVIDIA GPU + nvidia-container-toolkit
GPU推論を使う場合は、ホストマシンにNVIDIA GPU用のドライバとnvidia-container-toolkitがインストールされている必要があります。CPU推論のみであれば不要です。
Dockerイメージの構成
piper-plusは用途別に4つのDockerイメージを提供しています。
| イメージ | 用途 | 説明 |
|---|---|---|
webui |
Gradio WebUI | ブラウザ上でTTSを操作できるUI。CPUのみ |
python-inference |
Python推論 | CLI/FastAPIサーバー。CPU/GPU切替対応 |
python-train |
モデル学習 | PyTorch Lightningベースの学習パイプライン |
cpp-inference |
C++推論 | 軽量なC++バイナリによる推論 |
この記事では主にwebuiイメージの使い方を紹介します。
Gradio WebUIの起動
リポジトリのクローンとビルド
まず、piper-plusのリポジトリをクローンし、webuiイメージをビルドします。
git clone https://github.com/ayutaz/piper-plus.git cd piper-plus docker build -t piper-webui -f docker/webui/Dockerfile .
コンテナの起動(モデル自動ダウンロード)
PIPER_MODEL 環境変数にモデル名を指定すると、起動時にモデルが自動でダウンロードされます。ダウンロードされたモデルはボリュームマウントした models/ ディレクトリに保存され、2回目以降はキャッシュから読み込まれます。
mkdir -p models docker run -it -p 7860:7860 -e PIPER_MODEL=css10 -v ./models:/models piper-webui
初回起動時のログ:
Checking model: css10 Downloading model: css10... Model ready: /models/css10-ja-6lang-fp16.onnx * Running on local URL: http://0.0.0.0:7860
既にモデルがダウンロード済みの場合はダウンロードがスキップされ、即座にWebUIが起動します。
ブラウザでアクセス
コンテナが起動したら、ブラウザで以下のURLにアクセスします。
http://localhost:7860
Gradio WebUIが表示されます。画面には以下の要素があります。
- テキスト入力欄: 合成したいテキストを入力
- 言語選択: ja / en / zh / ko / es / fr / pt / sv から選択
- モデル選択: マウントされたモデルから選択
- パラメータ調整: 発話速度(length_scale)、ランダム性(noise_scale)、音素長ばらつき(noise_w)
- 合成ボタン: クリックで音声合成を実行
- 音声プレイヤー: 合成結果を再生・ダウンロード
手動でモデルを配置する場合
PIPER_MODEL を指定せずに、事前にダウンロードしたモデルをマウントすることもできます。
docker run -it -p 7860:7860 -v ./models:/models:ro piper-webui
models/ ディレクトリにはONNXモデルファイルとconfig.jsonを配置します。
models/ ├── css10-ja-6lang-fp16.onnx └── config.json
docker-composeによる起動
リポジトリにはdocker-compose.ymlが付属しています。
cd docker/webui
PIPER_MODEL 環境変数でダウンロードするモデルを指定して起動します。
PIPER_MODEL=css10 docker compose up
docker-compose.ymlの内容:
version: '3.8' services: piper-webui: build: context: ../.. dockerfile: docker/webui/Dockerfile container_name: piper-webui ports: - "7860:7860" volumes: - ${MODELS_DIR:-./models}:/models - ${OUTPUT_DIR:-./output}:/output environment: - PIPER_MODEL=${PIPER_MODEL:-} - PIPER_MODEL_DIR=/models - GRADIO_SERVER_NAME=0.0.0.0 - GRADIO_SERVER_PORT=7860 - PYTHONUNBUFFERED=1 restart: unless-stopped healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:7860/')"] interval: 30s timeout: 10s retries: 3 start_period: 40s
ヘルスチェックも設定されているため、コンテナの状態を docker ps で確認できます。
複数モデルの利用
複数のモデルを配置する場合は、models/ ディレクトリに並べて配置します。WebUI上でモデルを切り替えて使用できます。
models/
├── css10-ja-6lang-fp16.onnx
├── config.json
└── tsukuyomi/ # オプション
├── tsukuyomi-chan-6lang-fp16.onnx
└── config.json
つくよみちゃんモデルなど追加のモデルをダウンロードする場合:
docker run --rm -e PIPER_MODEL=tsukuyomi -v ./models:/models piper-webui echo "done"
所感
PIPER_MODEL 環境変数を指定するだけでモデルの自動ダウンロードからWebUIの起動まで完結します。Dockerさえあれば、PythonやONNX Runtimeのセットアップは不要です。ボリュームマウントによりモデルがホスト側にキャッシュされるため、2回目以降は即座に起動します。