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 メモリを消費しない。

項目

設定

サーバ

usrv18 (192.168.27.18)

API

http://192.168.27.18:8002

モデル

Aratako/Irodori-TTS-v4.1-Small

API 形式

POST /v1/audio/speech

常駐サービス

Flask + Waitress (irodori-tts.service)

GPU の使い方

合成要求ごとにロードし、終了後に解放

出力

WAV

サーバ側ファイル

パス

内容

/opt/irodori-tts

公式 Irodori-TTS リポジトリ

/opt/irodori-tts/.venv

Irodori-TTS の Python 環境

/opt/irodori-tts/irodori_tts_flask.py

常駐 API。GPU 推論処理は持たない

/opt/irodori-tts/irodori_tts_once.py

1 回だけ infer.py を実行して終了する runner

/opt/irodori-tts/voices/

参照音声の配置場所

/opt/irodori-tts/hf-cache/

Hugging Face のモデル・codec キャッシュ

/etc/systemd/system/irodori-tts.service

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 に指定できるモデル ID irodori-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 には必要に応じて以下を加えられる。

項目

意味

caption

声質・話し方を指定する Voice Design テキスト

num_steps

サンプリング step 数

duration_scale

発話長の倍率

t_schedule_mode

linear または sway

sway_coeff

sway 使用時の係数

このサーバは 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 オプション:

オプション

内容

--text / --text-file

合成する文字列 / UTF-8 テキストファイル

--output

出力 WAV ファイル

--server

API の URL

--voice

none または登録済み voice ID

--caption

Voice Design テキスト

--num-steps

サンプリング step 数

--duration-scale

発話長の倍率

--sway, --sway-coeff

sway sampling の指定

--timeout

HTTP 待機時間。既定値は 1800 秒

--health, --list-voices

接続状態 / 登録 voice の確認

運用上の注意

  • 常駐するのは HTTP 受付プロセスだけで、モデル本体は常駐しない。そのため、最初のロード時間は発生するが、GPU メモリを他用途に空けておける。

  • モデルと codec は hf-cache に残るため、2 回目以降にモデルをネットワークから再取得することはない。

  • 現在の API は WAV 出力と、サーバ側に登録した単一の参照音声を基本にしている。

  • 直接 InferenceRuntime を使う Windows 側の従来構成は、モデルを再利用して高速化する代わりに RTX 5070 の VRAM を常駐使用する。本構成では用途をサーバへ移し、その VRAM 使用を避ける。