Llasa TTSモデルのシンプルな高速推論サーバーです。vLLM、SGLang、またはTransformersを推論バックエンドとして選択できます。
Llasaは、LLaMAアーキテクチャをベースにしたText-to-Speech (TTS) モデルです。テキストを入力として受け取り、対応するspeech tokenを出力します。これらのspeech tokenは、XCodec2によって音声波形に変換されます。
system_promptパラメータ対応、メタデータ対応UI(gradio_ui_captions.py)追加--output-sample-rateオプション追加テキスト入力
↓
[テキスト正規化]
↓
[vLLM/SGLang/Transformers + Llasa] → Speech token生成
↓
[XCodec2] → 音声波形デコード
↓
WAV音声出力(16kHz または 44.1kHz)
WSL2のUbuntu 24.04、Python 3.12、CUDA 12.9の環境で動作確認済みです。
# XCodec2のインストール(44.1kHz対応版、16kHzモデルとの後方互換性あり)
uv pip install https://huggingface.co/NandemoGHS/Anime-XCodec2-44.1kHz/resolve/main/xcodec2-0.1.6.tar.gz
# 推論バックエンドのインストール(いずれか1つ以上を選択)
# vLLMを使用する場合
uv pip install vllm==0.10.2 --torch-backend=auto
uv pip install -r requirements.txt
# SGLangを使用する場合
uv pip install "sglang[all]==0.5.3" --prerelease=allow
uv pip install -r requirements.txt
# transformersを使用する場合
uv pip install -r requirements.txt
# 環境によってはCUDAのバージョンにあったtorchの再インストールが必要かもしれません
# uv pip install -U torch torchaudio --index-url https://download.pytorch.org/whl/cu***
# 開発環境が必要な場合
uv pip install -r requirements-dev.txt
python run_server.py
サーバーは http://localhost:8000 で起動します。
# SGLangバックエンドを使用
python run_server.py --backend sglang
# Transformersバックエンドを使用
python run_server.py --backend transformers
# FP8モデルを使用
python run_server.py --llasa-model-id NandemoGHS/Anime-Llasa-3B-FP8
# キャプション対応モデルを使用
python run_server.py --llasa-model-id NandemoGHS/Anime-Llasa-3B-Captions
# 44.1kHzモデルを使用(output-sample-rateの設定が必須)
python run_server.py --xcodec2-model-id NandemoGHS/Anime-XCodec2-44.1kHz --output-sample-rate 44100
# カスタムポートで起動
python run_server.py --port 9000
# vLLM/SGLangの設定を調整 (マルチGPUなど)
python run_server.py --backend sglang --gpu-memory-utilization 0.9 --tensor-parallel-size 2
# すべてのオプションを確認
python run_server.py --help
利用可能な引数:
--backend: 推論バックエンド(選択肢: vllm, sglang, transformers、デフォルト: vllm)--llasa-model-id: Llasaモデル ID(デフォルト: NandemoGHS/Anime-Llasa-3B)--xcodec2-model-id: XCodec2モデル ID(デフォルト: NandemoGHS/Anime-XCodec2)--tensor-parallel-size: vLLM/SGLangのTensor Parallelのサイズ(デフォルト: 1、マルチGPU時に使用)--gpu-memory-utilization: GPU メモリ使用率(デフォルト: 0.8)--max-model-len: コンテキスト長(デフォルト: 2048)--device: 仕様デバイス(デフォルト: cuda)--output-sample-rate: 出力音声のサンプリングレート(Hz)(デフォルト: 16000)
NandemoGHS/Anime-XCodec2-44.1kHz)を使用する場合は 44100 を指定する必要があります--host: バインドホスト(デフォルト: 0.0.0.0)--port: バインドポート(デフォルト: 8000)--reload: 自動リロード有効化上記の推論サーバを使い、ブラウザから簡単に音声生成ができる簡易的なWeb UIも提供しています。
python gradio_ui.py
Web UIは http://localhost:7860 で起動します。
キャプション対応モデル(NandemoGHS/Anime-Llasa-3B-Captions)を使用する場合は、メタデータ入力に対応した専用UIを使用できます:
python gradio_ui_captions.py
このUIでは、以下のメタデータを指定して音声の特徴を細かく制御できます:
プリセット例も用意されており、簡単に試すことができます。
# 推論サーバーのURLを指定
python gradio_ui.py --server-url http://192.168.1.100:8000
# カスタムポートでWeb UIを起動
python gradio_ui.py --port 8080
# 公開リンクを生成(外部アクセス可能)
python gradio_ui.py --share
# 環境変数で推論サーバーのURLを設定
LLASA_SERVER_URL=http://192.168.1.100:8000 python gradio_ui.py
利用可能な引数:
--server-url: APIサーバーのURL(デフォルト: http://localhost:8000、
環境変数 LLASA_SERVER_URL でも設定可能)--host: Web UIのホスト(デフォルト: 0.0.0.0)--port: Web UIのポート(デフォルト: 7860)--share: Gradio公開リンクを生成テキストから音声を生成します。
パラメータ:
text (必須): 生成するテキストreference_audio (オプション): リファレンス音声ファイル(WAV形式推奨)reference_text (オプション): リファレンス音声のテキストsystem_prompt (オプション): システムプロンプト(キャプション対応モデル用。メタデータを含む)temperature (デフォルト: 0.8): Llasaのtemperaturetop_p (デフォルト: 1.0): Llasaのtop-prepetition_penalty (デフォルト: 1.1): Llasaのrepetition penaltymax_tokens (デフォルト: 2048): 生成する最大トークン数レスポンス: WAV形式の音声データ(wav、デフォルト16kHz、モノラル)
--output-sample-rate オプションで変更可能import requests
url = "http://localhost:8000/tts"
data = {
"text": "こんにちは、これはテスト音声です。",
}
response = requests.post(url, data=data)
with open("output.wav", "wb") as f:
f.write(response.content)
import requests
url = "http://localhost:8000/tts"
data = {
"text": "これは生成したい新しいテキストです。",
"reference_text": "これはリファレンス音声のテキストです。",
}
files = {
"reference_audio": open("reference.wav", "rb"),
}
response = requests.post(url, data=data, files=files)
with open("output.wav", "wb") as f:
f.write(response.content)
import requests
url = "http://localhost:8000/tts"
# システムプロンプトを構築
system_prompt = """emotion: serious
profile: 落ち着いた女性声
mood: シリアス、深刻
speed: 一定
prosody: メリハリがある、断定的
pitch_timbre: 中低音、張りのある声
style: ナレーション風
notes:
caption: 落ち着いた中低音の女性声。シリアスな雰囲気で、張りのある声で断定的に話す。ナレーションのようなスタイル。"""
data = {
"text": "今思えば、あの時すでに運命の歯車は狂っていたのだろう",
"system_prompt": system_prompt,
}
response = requests.post(url, data=data)
with open("output.wav", "wb") as f:
f.write(response.content)
あるいは、utils.pyのbuild_system_prompt()関数を使用してより簡単に構築できます:
import requests
from llasa_server.utils import build_system_prompt
url = "http://localhost:8000/tts"
# メタデータからシステムプロンプトを構築
system_prompt = build_system_prompt(
caption="落ち着いた中低音の女性声。シリアスな雰囲気で、張りのある声で断定的に話す。ナレーションのようなスタイル。",
emotion="serious",
profile="落ち着いた女性声",
mood="シリアス、深刻",
speed="一定",
prosody="メリハリがある、断定的",
pitch_timbre="中低音、張りのある声",
style="ナレーション風",
)
data = {
"text": "今思えば、あの時すでに運命の歯車は狂っていたのだろう",
"system_prompt": system_prompt,
}
response = requests.post(url, data=data)
with open("output.wav", "wb") as f:
f.write(response.content)
# シンプルなTTS
curl -X POST "http://localhost:8000/tts" \
-F "text=こんにちは、これはテスト音声です。" \
-o output.wav
# リファレンス音声付き
curl -X POST "http://localhost:8000/tts" \
-F "text=これは生成したい新しいテキストです。" \
-F "reference_text=これはリファレンス音声のテキストです。" \
-F "reference_audio=@reference.wav;type=audio/wav" \
-o output.wav
APIサーバーを起動:
python run_server.py
別のターミナルでWeb UIを起動:
python gradio_ui.py
ブラウザで http://localhost:7860 にアクセス
UIで以下を設定:
「音声を生成」ボタンをクリック
キャプション対応モデルでAPIサーバーを起動:
python run_server.py --llasa-model-id NandemoGHS/Anime-Llasa-3B-Captions
別のターミナルでメタデータ対応UIを起動:
python gradio_ui_captions.py
ブラウザで http://localhost:7860 にアクセス
UIで以下を設定:
「音声を生成」ボタンをクリック
Examplesタブでプリセット例を選択して、すぐに試すこともできます。
curl http://localhost:8000/health
llasa-server/
├── llasa_server/
│ ├── __init__.py
│ ├── api.py # FastAPI エンドポイント
│ ├── codec.py # XCodec2 ラッパー
│ ├── config.py # サーバー設定管理
│ ├── engine_vllm.py # vLLM エンジン
│ ├── engine_base.py # エンジン抽象基底クラス
│ ├── engine_sglang.py # SGLang エンジン
│ ├── engine_transformers.py # Transformers エンジン
│ ├── server.py # メインサーバークラス
│ └── utils.py # ユーティリティ類(メタデータ構築関数含む)
├── run_server.py # APIサーバー起動スクリプト
├── gradio_ui.py # Gradio Web UI(通常版)
├── gradio_ui_captions.py # Gradio Web UI(メタデータ対応版)
├── example_client.py # 推論のサンプルスクリプト
├── requirements.txt # 必要ライブラリ
├── requirements-dev.txt # 開発用ライブラリ
└── README.md # このドキュメント
このリポジトリのコードはMITライセンスの下で提供されています。
利用しているモデルのライセンスについては、各モデルの提供元を確認してください。デフォルトで使われているAnime-Llasa-3BおよびAnime-XCodec2はCC BY-NC 4.0ライセンスです。
6 commits
Python
100.0%
Llasa TTSモデルのシンプルな高速推論サーバーです。vLLM、SGLang、またはTransformersを推論バックエンドとして選択できます。
Llasaは、LLaMAアーキテクチャをベースにしたText-to-Speech (TTS) モデルです。テキストを入力として受け取り、対応するspeech tokenを出力します。これらのspeech tokenは、XCodec2によって音声波形に変換されます。
system_promptパラメータ対応、メタデータ対応UI(gradio_ui_captions.py)追加--output-sample-rateオプション追加テキスト入力
↓
[テキスト正規化]
↓
[vLLM/SGLang/Transformers + Llasa] → Speech token生成
↓
[XCodec2] → 音声波形デコード
↓
WAV音声出力(16kHz または 44.1kHz)
WSL2のUbuntu 24.04、Python 3.12、CUDA 12.9の環境で動作確認済みです。
# XCodec2のインストール(44.1kHz対応版、16kHzモデルとの後方互換性あり)
uv pip install https://huggingface.co/NandemoGHS/Anime-XCodec2-44.1kHz/resolve/main/xcodec2-0.1.6.tar.gz
# 推論バックエンドのインストール(いずれか1つ以上を選択)
# vLLMを使用する場合
uv pip install vllm==0.10.2 --torch-backend=auto
uv pip install -r requirements.txt
# SGLangを使用する場合
uv pip install "sglang[all]==0.5.3" --prerelease=allow
uv pip install -r requirements.txt
# transformersを使用する場合
uv pip install -r requirements.txt
# 環境によってはCUDAのバージョンにあったtorchの再インストールが必要かもしれません
# uv pip install -U torch torchaudio --index-url https://download.pytorch.org/whl/cu***
# 開発環境が必要な場合
uv pip install -r requirements-dev.txt
python run_server.py
サーバーは http://localhost:8000 で起動します。
# SGLangバックエンドを使用
python run_server.py --backend sglang
# Transformersバックエンドを使用
python run_server.py --backend transformers
# FP8モデルを使用
python run_server.py --llasa-model-id NandemoGHS/Anime-Llasa-3B-FP8
# キャプション対応モデルを使用
python run_server.py --llasa-model-id NandemoGHS/Anime-Llasa-3B-Captions
# 44.1kHzモデルを使用(output-sample-rateの設定が必須)
python run_server.py --xcodec2-model-id NandemoGHS/Anime-XCodec2-44.1kHz --output-sample-rate 44100
# カスタムポートで起動
python run_server.py --port 9000
# vLLM/SGLangの設定を調整 (マルチGPUなど)
python run_server.py --backend sglang --gpu-memory-utilization 0.9 --tensor-parallel-size 2
# すべてのオプションを確認
python run_server.py --help
利用可能な引数:
--backend: 推論バックエンド(選択肢: vllm, sglang, transformers、デフォルト: vllm)--llasa-model-id: Llasaモデル ID(デフォルト: NandemoGHS/Anime-Llasa-3B)--xcodec2-model-id: XCodec2モデル ID(デフォルト: NandemoGHS/Anime-XCodec2)--tensor-parallel-size: vLLM/SGLangのTensor Parallelのサイズ(デフォルト: 1、マルチGPU時に使用)--gpu-memory-utilization: GPU メモリ使用率(デフォルト: 0.8)--max-model-len: コンテキスト長(デフォルト: 2048)--device: 仕様デバイス(デフォルト: cuda)--output-sample-rate: 出力音声のサンプリングレート(Hz)(デフォルト: 16000)
NandemoGHS/Anime-XCodec2-44.1kHz)を使用する場合は 44100 を指定する必要があります--host: バインドホスト(デフォルト: 0.0.0.0)--port: バインドポート(デフォルト: 8000)--reload: 自動リロード有効化上記の推論サーバを使い、ブラウザから簡単に音声生成ができる簡易的なWeb UIも提供しています。
python gradio_ui.py
Web UIは http://localhost:7860 で起動します。
キャプション対応モデル(NandemoGHS/Anime-Llasa-3B-Captions)を使用する場合は、メタデータ入力に対応した専用UIを使用できます:
python gradio_ui_captions.py
このUIでは、以下のメタデータを指定して音声の特徴を細かく制御できます:
プリセット例も用意されており、簡単に試すことができます。
# 推論サーバーのURLを指定
python gradio_ui.py --server-url http://192.168.1.100:8000
# カスタムポートでWeb UIを起動
python gradio_ui.py --port 8080
# 公開リンクを生成(外部アクセス可能)
python gradio_ui.py --share
# 環境変数で推論サーバーのURLを設定
LLASA_SERVER_URL=http://192.168.1.100:8000 python gradio_ui.py
利用可能な引数:
--server-url: APIサーバーのURL(デフォルト: http://localhost:8000、
環境変数 LLASA_SERVER_URL でも設定可能)--host: Web UIのホスト(デフォルト: 0.0.0.0)--port: Web UIのポート(デフォルト: 7860)--share: Gradio公開リンクを生成テキストから音声を生成します。
パラメータ:
text (必須): 生成するテキストreference_audio (オプション): リファレンス音声ファイル(WAV形式推奨)reference_text (オプション): リファレンス音声のテキストsystem_prompt (オプション): システムプロンプト(キャプション対応モデル用。メタデータを含む)temperature (デフォルト: 0.8): Llasaのtemperaturetop_p (デフォルト: 1.0): Llasaのtop-prepetition_penalty (デフォルト: 1.1): Llasaのrepetition penaltymax_tokens (デフォルト: 2048): 生成する最大トークン数レスポンス: WAV形式の音声データ(wav、デフォルト16kHz、モノラル)
--output-sample-rate オプションで変更可能import requests
url = "http://localhost:8000/tts"
data = {
"text": "こんにちは、これはテスト音声です。",
}
response = requests.post(url, data=data)
with open("output.wav", "wb") as f:
f.write(response.content)
import requests
url = "http://localhost:8000/tts"
data = {
"text": "これは生成したい新しいテキストです。",
"reference_text": "これはリファレンス音声のテキストです。",
}
files = {
"reference_audio": open("reference.wav", "rb"),
}
response = requests.post(url, data=data, files=files)
with open("output.wav", "wb") as f:
f.write(response.content)
import requests
url = "http://localhost:8000/tts"
# システムプロンプトを構築
system_prompt = """emotion: serious
profile: 落ち着いた女性声
mood: シリアス、深刻
speed: 一定
prosody: メリハリがある、断定的
pitch_timbre: 中低音、張りのある声
style: ナレーション風
notes:
caption: 落ち着いた中低音の女性声。シリアスな雰囲気で、張りのある声で断定的に話す。ナレーションのようなスタイル。"""
data = {
"text": "今思えば、あの時すでに運命の歯車は狂っていたのだろう",
"system_prompt": system_prompt,
}
response = requests.post(url, data=data)
with open("output.wav", "wb") as f:
f.write(response.content)
あるいは、utils.pyのbuild_system_prompt()関数を使用してより簡単に構築できます:
import requests
from llasa_server.utils import build_system_prompt
url = "http://localhost:8000/tts"
# メタデータからシステムプロンプトを構築
system_prompt = build_system_prompt(
caption="落ち着いた中低音の女性声。シリアスな雰囲気で、張りのある声で断定的に話す。ナレーションのようなスタイル。",
emotion="serious",
profile="落ち着いた女性声",
mood="シリアス、深刻",
speed="一定",
prosody="メリハリがある、断定的",
pitch_timbre="中低音、張りのある声",
style="ナレーション風",
)
data = {
"text": "今思えば、あの時すでに運命の歯車は狂っていたのだろう",
"system_prompt": system_prompt,
}
response = requests.post(url, data=data)
with open("output.wav", "wb") as f:
f.write(response.content)
# シンプルなTTS
curl -X POST "http://localhost:8000/tts" \
-F "text=こんにちは、これはテスト音声です。" \
-o output.wav
# リファレンス音声付き
curl -X POST "http://localhost:8000/tts" \
-F "text=これは生成したい新しいテキストです。" \
-F "reference_text=これはリファレンス音声のテキストです。" \
-F "reference_audio=@reference.wav;type=audio/wav" \
-o output.wav
APIサーバーを起動:
python run_server.py
別のターミナルでWeb UIを起動:
python gradio_ui.py
ブラウザで http://localhost:7860 にアクセス
UIで以下を設定:
「音声を生成」ボタンをクリック
キャプション対応モデルでAPIサーバーを起動:
python run_server.py --llasa-model-id NandemoGHS/Anime-Llasa-3B-Captions
別のターミナルでメタデータ対応UIを起動:
python gradio_ui_captions.py
ブラウザで http://localhost:7860 にアクセス
UIで以下を設定:
「音声を生成」ボタンをクリック
Examplesタブでプリセット例を選択して、すぐに試すこともできます。
curl http://localhost:8000/health
llasa-server/
├── llasa_server/
│ ├── __init__.py
│ ├── api.py # FastAPI エンドポイント
│ ├── codec.py # XCodec2 ラッパー
│ ├── config.py # サーバー設定管理
│ ├── engine_vllm.py # vLLM エンジン
│ ├── engine_base.py # エンジン抽象基底クラス
│ ├── engine_sglang.py # SGLang エンジン
│ ├── engine_transformers.py # Transformers エンジン
│ ├── server.py # メインサーバークラス
│ └── utils.py # ユーティリティ類(メタデータ構築関数含む)
├── run_server.py # APIサーバー起動スクリプト
├── gradio_ui.py # Gradio Web UI(通常版)
├── gradio_ui_captions.py # Gradio Web UI(メタデータ対応版)
├── example_client.py # 推論のサンプルスクリプト
├── requirements.txt # 必要ライブラリ
├── requirements-dev.txt # 開発用ライブラリ
└── README.md # このドキュメント
このリポジトリのコードはMITライセンスの下で提供されています。
利用しているモデルのライセンスについては、各モデルの提供元を確認してください。デフォルトで使われているAnime-Llasa-3BおよびAnime-XCodec2はCC BY-NC 4.0ライセンスです。
6 commits
Python
100.0%