Irodori-TTS サーバ:インストール、常駐、アクセス、CLI
最終更新: 2026-10-07
目的と構成
usrv18(AlmaLinux 9.8、RTX PRO 6000 Blackwell 96 GB)で Irodori-TTS を使用する。低頻度の音声合成向けに、モデルを GPU に常駐させない構成を採用している。
Windows CLI
│ HTTP (port 8002)
▼
Flask + Waitress(常駐、GPUは使用しない)
│ リクエストごとに子プロセスを起動
▼
Irodori-TTS infer.py(GPUにモデルをロード → WAV生成 → 終了)
Flask プロセス自身は torch と Irodori-TTS を import しない。合成を担当する infer.py プロセスが終了すると CUDA コンテキストも終了するので、待機中の Irodori-TTS は GPU メモリを消費しない。
項目 |
設定 |
|---|---|
サーバ |
|
API |
|
モデル |
|
API 形式 |
|
常駐サービス |
Flask + Waitress ( |
GPU の使い方 |
合成要求ごとにロードし、終了後に解放 |
出力 |
WAV |
サーバ側ファイル
パス |
内容 |
|---|---|
|
公式 Irodori-TTS リポジトリ |
|
Irodori-TTS の Python 環境 |
|
常駐 API。GPU 推論処理は持たない |
|
1 回だけ |
|
参照音声の配置場所 |
|
Hugging Face のモデル・codec キャッシュ |
|
systemd のサービス定義 |
初回インストール
Irodori-TTS は Qwen ASR とは別環境に置く。
sudo mkdir -p /opt/irodori-tts
sudo chown tkamiya:tkamiya /opt/irodori-tts
git clone https://github.com/Aratako/Irodori-TTS.git /opt/irodori-tts
cd /opt/irodori-tts
uv sync --extra cu128
uv pip install --python .venv/bin/python Flask waitress
mkdir -p voices hf-cache
irodori_tts_flask.py、irodori_tts_once.py、irodori-tts-flask.service をサーバへ配置する。
cp irodori_tts_flask.py irodori_tts_once.py /opt/irodori-tts/
sudo cp irodori-tts-flask.service /etc/systemd/system/irodori-tts.service
CLI 単体の事前確認
サービス化の前に、公式 CLI が GPU で WAV を生成できることを確認する。初回は checkpoint と codec が /opt/irodori-tts/hf-cache に取得される。
cd /opt/irodori-tts
HF_HOME=/opt/irodori-tts/hf-cache \
IRODORI_ATTENTION_BACKEND=sdpa \
.venv/bin/python infer.py \
--hf-checkpoint Aratako/Irodori-TTS-v4.1-Small \
--text 'これは Irodori-TTS の GPU テストです。' \
--no-ref \
--model-device cuda --codec-device cuda \
--model-precision bf16 --codec-precision bf16 \
--output-wav test.wav
Blackwell で optional な FlashAttention カーネルへの依存を避けるため、サービスでは IRODORI_ATTENTION_BACKEND=sdpa を指定している。安定性を優先した設定である。
常駐サービス
/etc/systemd/system/irodori-tts.service:
[Unit]
Description=Irodori-TTS Flask API (load GPU model per request)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=tkamiya
Group=tkamiya
WorkingDirectory=/opt/irodori-tts
Environment=HOME=/home/tkamiya
Environment=HF_HOME=/opt/irodori-tts/hf-cache
Environment=CUDA_VISIBLE_DEVICES=0
Environment=IRODORI_MODEL=Aratako/Irodori-TTS-v4.1-Small
Environment=IRODORI_RUNNER=/opt/irodori-tts/irodori_tts_once.py
Environment=IRODORI_INFER=/opt/irodori-tts/infer.py
Environment=IRODORI_VOICES_DIR=/opt/irodori-tts/voices
Environment=IRODORI_OUTPUT_DIR=/var/tmp/irodori-tts-output
Environment=IRODORI_DEVICE=cuda
Environment=IRODORI_PRECISION=bf16
Environment=IRODORI_ATTENTION_BACKEND=sdpa
ExecStart=/opt/irodori-tts/.venv/bin/waitress-serve --host=0.0.0.0 --port=8002 --threads=1 --call irodori_tts_flask:create_app
Restart=on-failure
RestartSec=5
TimeoutStopSec=60
[Install]
WantedBy=multi-user.target
起動・停止・ログ確認:
sudo systemctl daemon-reload
sudo systemctl enable --now irodori-tts
sudo systemctl status irodori-tts
sudo systemctl restart irodori-tts
sudo systemctl stop irodori-tts
sudo systemctl start irodori-tts
journalctl -u irodori-tts -f
LAN 上のクライアントから接続するには、ポート 8002 を許可する。
sudo firewall-cmd --permanent --add-port=8002/tcp
sudo firewall-cmd --reload
待機中に VRAM を消費していないことは、次で確認できる。
nvidia-smi
watch -n 1 nvidia-smi
合成中だけ infer.py が GPU メモリを使用し、応答が返った後はプロセスと GPU メモリが消える。
API アクセス
動作確認
curl http://127.0.0.1:8002/health
curl http://127.0.0.1:8002/v1/models
curl http://127.0.0.1:8002/v1/audio/voices
GET /health:gpu_resident: falseを含む状態を返す。GET /v1/models: API に指定できるモデル IDirodori-ttsを返す。GET /v1/audio/voices: サーバに登録済みの参照音声 ID を返す。
音声合成 API
POST /v1/audio/speech に JSON を送ると、WAV バイト列が返る。
curl -sS http://127.0.0.1:8002/v1/audio/speech \
-H 'Content-Type: application/json' \
-d '{
"model": "irodori-tts",
"input": "こんにちは。これは API 経由の音声合成です。",
"voice": "none",
"response_format": "wav",
"irodori": {
"caption": "落ち着いた、明瞭な日本語の講義調。"
}
}' \
--output sample.wav
voice は参照音声の ID、または参照音声を使わない none を指定する。irodori には必要に応じて以下を加えられる。
項目 |
意味 |
|---|---|
|
声質・話し方を指定する Voice Design テキスト |
|
サンプリング step 数 |
|
発話長の倍率 |
|
|
|
|
このサーバは GPU に同時に複数のモデルをロードしないよう、リクエストを直列に実行する。
参照音声の登録
参照 WAV などの音声ファイルをサーバの voices/ に置く。ファイル名の拡張子を除いた部分が voice ID になる。
cp /path/to/teacher.wav /opt/irodori-tts/voices/teacher.wav
curl http://127.0.0.1:8002/v1/audio/voices
この場合、クライアント側からは teacher を指定する。参照音声はサーバ側で管理するため、Windows から音声パスを送る必要はない。
Windows 用 CLI
irodori_tts_api.py を Windows の任意のフォルダに置く。標準の接続先は http://192.168.27.18:8002 であり、環境変数 IRODORI_TTS_API または --server で変更できる。
接続・voice の確認
python irodori_tts_api.py --health
python irodori_tts_api.py --list-voices
基本的な合成
python irodori_tts_api.py ^
--text "統計力学の講義を始めます。" ^
--voice none ^
--caption "落ち着いた、明瞭な講義調の日本語。" ^
--output lecture.wav
登録済み参照音声を使う合成
python irodori_tts_api.py ^
--text "本日の内容を確認します。" ^
--voice teacher ^
--caption "落ち着いて自然な話し方。" ^
--output lecture_teacher.wav
長い原稿をファイルから渡す
python irodori_tts_api.py ^
--text-file narration.txt ^
--voice teacher ^
--caption "親しみやすく、明瞭な講義調。" ^
--output narration.wav
速度を優先する設定
品質を確認したうえで、低頻度利用時に待ち時間を短くしたい場合は sway sampling と少ない step 数を試せる。
python irodori_tts_api.py ^
--text "短い確認用の文章です。" ^
--voice none ^
--caption "自然な日本語。" ^
--sway --num-steps 6 ^
--output quick.wav
主な CLI オプション:
オプション |
内容 |
|---|---|
|
合成する文字列 / UTF-8 テキストファイル |
|
出力 WAV ファイル |
|
API の URL |
|
|
|
Voice Design テキスト |
|
サンプリング step 数 |
|
発話長の倍率 |
|
sway sampling の指定 |
|
HTTP 待機時間。既定値は 1800 秒 |
|
接続状態 / 登録 voice の確認 |
運用上の注意
常駐するのは HTTP 受付プロセスだけで、モデル本体は常駐しない。そのため、最初のロード時間は発生するが、GPU メモリを他用途に空けておける。
モデルと codec は
hf-cacheに残るため、2 回目以降にモデルをネットワークから再取得することはない。現在の API は WAV 出力と、サーバ側に登録した単一の参照音声を基本にしている。
直接
InferenceRuntimeを使う Windows 側の従来構成は、モデルを再利用して高速化する代わりに RTX 5070 の VRAM を常駐使用する。本構成では用途をサーバへ移し、その VRAM 使用を避ける。