CosyVoice 3
CosyVoice 3は、Alibaba/QwenAudioによる多言語CosyVoice TTSプロジェクトの現行世代です。TomoriBotはservers/tts/cosyvoice3/で公式ランタイムをラップし、他のローカル音声エンドポイントと同じPOST /synthesizeインターフェースを公開します。
TomoriBotは既定で公式の**FunAudioLLM/Fun-CosyVoice3-0.5B-2512**チェックポイントを使用します。これは上流が推奨する現行のCosyVoice 3リリースで、通常の非量子化モデルを使用しつつ、CosyVoiceの低遅延設計を保ったまま16 GBのNVIDIA GPUで無理なく動作するほど小型です。
現行のCosyVoice 3リリースが対応しているのは次の内容です。
- 中国語、英語、日本語、韓国語、ドイツ語、スペイン語、フランス語、イタリア語、ロシア語
- 18種類以上の中国語方言・アクセント
- ゼロショット音声クローン
- 多言語およびクロスリンガル音声クローン
- 言語、方言、感情、話速、音量に関する自然言語の指示
- 上流ランタイムでの
[breath]や[laughter]を含む細かな制御 - 上流ランタイムでのテキスト入力・音声出力ストリーミング
公式のCosyVoice 3サンプルには、現時点で重要な日本語に関する注意点が1つ含まれています。日本語テキストはカタカナに変換された状態で示されているという点です。日本語は対応言語ですが、通常の日本語表記では発音が思わしくない場合、合成テキストをカタカナに変換することが上流の推奨する回避策です。
TomoriBotがリクエストをどう対応させるか
Section titled “TomoriBotがリクエストをどう対応させるか”ラッパーは通常のクローン型サイドカーのフィールドを受け付けます。
textref_audioref_textinstructlanguage
現行のCosyVoice 3 APIは次のように選択されます。
| リクエスト | CosyVoice 3のパス |
|---|---|
| 参照音声+文字起こし | inference_zero_shot |
| 文字起こしなしの参照音声 | inference_cross_lingual |
instructまたは明示的なlanguage | inference_instruct2 |
最良の通常クローン品質を得るには、参照音声とそれに対応する文字起こしの両方を用意してください。CosyVoice 3の現行の指示APIは参照音声を条件にしますが、参照文字起こしを同時には受け付けないため、instructを使うリクエストは公式のinference_instruct2パスに切り替わります。
スタイルと感情の制御
Section titled “スタイルと感情の制御”このエンドポイントはスクリプトマークアップ形式をプレーンにして登録してください。発話の方向付けは、任意のインラインの
角括弧タグではなく、エンドポイントのグローバルなvoice_instructionsフィールドに属します。これにより
発話全体を通して指示の意味が保たれ、[happy] Hello. [sad] Goodbye.のようなスクリプトを矛盾する2つの
グローバル指示として扱ってしまう事態を避けられます。ネイティブの[breath]と[laughter]のサポートは、
TomoriBotが正確なプロバイダー対応のタグ機能を提示できるようになるまで、意図的に見送られています。
/synthesizeのinstructフィールドは、CosyVoice 3の指示条件付けに渡されます。例としては
「安堵しているが、まだ疲れているように話す」「できるだけ早口で話す」「興奮を抑えながら小声で話す」
などがあります。
ストリーミング
Section titled “ストリーミング”CosyVoice 3は上流で双方向ストリーミングに対応しています。このプロジェクトはテキスト入力ストリーミングと音声出力ストリーミングの両方を文書化しており、最適化された構成では最初の音声までの遅延が約150ミリ秒という低さになります。
TomoriBotの現行のカスタムTTSインターフェースは、Discordの音声メッセージ1件につき完全な音声レスポンス
1つを期待するため、このサイドカーは完全なWAVを返却し、上流の推論は既定でstream=Falseとします。
COSYVOICE3_UPSTREAM_STREAM=1は上流のジェネレーターをテストする場合にのみ設定してください。ストリー
ミング対応の音声トランスポートが存在するまでは、TomoriBotの応答遅延を減らすことはありません。
ハードウェア
Section titled “ハードウェア”TomoriBotの推奨される出発点は次のとおりです。
- 16 GBのVRAMを搭載したNVIDIA GPU
- Python 3.10
- CUDA 12に対応した最近のNVIDIAドライバー
git- TomoriBotの音声サンプル正規化用の
ffmpeg - 上流の音声互換性の問題が起きる場合、Linuxでは
soxとlibsox-dev
モデル自体は0.5Bパラメーターで、16 GBのカードに収めるための量子化は不要です。Hugging Faceのチェックポイントのダウンロードは、パラメーター数から想像するよりもはるかに大きくなります。これはフローモデル、音声トークナイザー、英語テキストモデル、そしてベースとRL両方のLLM重みも同梱しているためです。現行のモデルパッケージには、Python環境とランタイムを別として、おおよそ10 GBのディスク容量を見込んでください。
CPU推論は上流ランタイムを通じて可能ですが、低遅延を要するDiscordの音声用途としては推奨される経路ではありません。
インストール
Section titled “インストール”Linux / WSL2(推奨)
Section titled “Linux / WSL2(推奨)”TomoriBotリポジトリのルートから実行します。
bash servers/tts/cosyvoice3/install-cosyvoice3.shservers/tts/cosyvoice3/.venv/bin/python servers/tts/cosyvoice3/server.pyまたは、設定済みのサイドカーとTomoriBotを一緒に起動します。
bun run launch --cosyvoice3インストーラーは次の作業を行います。
- レビュー済みの
QwenAudio/CosyVoiceコミット074ca6dc9e80a2f424f1f74b48bdd7d3fea531ccを、サブモジュールを含めて再帰的にservers/tts/cosyvoice3/CosyVoice/にチェックアウトする。 servers/tts/cosyvoice3/.venvを作成する。- 現行の上流CosyVoiceの依存関係と、小さなラッパーの依存関係セットをインストールする。
FunAudioLLM/Fun-CosyVoice3-0.5B-2512をHugging Faceのリビジョン29e01c4e8d000f4bcd70751be16fa94bf3d85a18でCosyVoice/pretrained_models/Fun-CosyVoice3-0.5B/にダウンロードする。
通常の再実行では、これらの正確なリビジョンが維持されます。インストールを意図的に更新するには、
COSYVOICE3_UPDATE=1を設定し、明示的なCOSYVOICE3_RUNTIME_COMMITやCOSYVOICE3_MODEL_REVISIONの
オーバーライドを与えてください。インストーラーは、記録済みのリビジョンと一致しないチェックアウトや
モデルへ黙って切り替えることを拒否します。
上流の依存関係は現在、CUDA 12.1のパッケージインデックスを使うPyTorch 2.3.1、Linux上のCUDA 12対応ONNX Runtimeパッケージ、Linux上のTensorRT 10.13パッケージを使用します。より新しいPyTorch CUDAビルドを必要とするハードウェアを使用している場合は、上流の依存関係をインストールした後にサイドカーのvenv内へ互換性のあるPyTorchビルドをインストールし、お使いのドライバーでテストしてください。
Windows PowerShell
Section titled “Windows PowerShell”ネイティブのWindowsはベストエフォートの経路として提供されています。
.\servers\tts\cosyvoice3\install-cosyvoice3.ps1.\servers\tts\cosyvoice3\.venv\Scripts\python.exe servers\tts\cosyvoice3\server.pyNVIDIA GPUを使用する場合はWSL2を推奨します。現行の上流の依存関係は、LinuxではGPU版のONNX Runtimeを、WindowsではCPU版のONNX Runtimeをインストールするため、WSL2の方がCosyVoiceプロジェクトが低遅延のために最適化・テストしている構成により近くなります。
TomoriBotへの登録
Section titled “TomoriBotへの登録”/providersを実行し、新しいカスタムエンドポイントを追加を選んで、音声エンドポイントを次のように設定します。
- 機能: 音声
- API互換性:
tts-clone - エンドポイントURL:
http://127.0.0.1:8017 - 音声ソースモード: 音声クローン
- スクリプトマークアップ形式: プレーン
- 指示の対応: 有効
接続を保存したら、それを選択して音声モデルを追加します。分かりやすいモデルコードとしてはFun-CosyVoice3-0.5B-2512が挙げられます。
続いて/config > モデル > モデルの切り替えを開き、CosyVoice 3の音声エンドポイントを有効化してください。
ペルソナ音声の割り当て
Section titled “ペルソナ音声の割り当て”通常のゼロショットクローンの場合:
- 背景ノイズがほとんどまたはまったくない、話者1人による10〜20秒のクリアなサンプルを準備します。
/configでモデル > TTSパラメーターと音声を開き、サンプルをアップロードします。- 可能であれば対応する文字起こしを入力します。CosyVoice 3はこれを文字起こし付きゼロショットのパスに使用します。
/configでペルソナ > 音声を開き、そのサンプルをペルソナに割り当てます。
クロスリンガルクローンにも対応しています。参照する話者は、生成するテキストとは異なる言語を話していても構いません。参照文字起こしが用意できない場合、ラッパーはCosyVoice 3専用のクロスリンガルパスを使用します。
/generate voice-messageでテストする
Section titled “/generate voice-messageでテストする”通常のチャットのやり取りで音声ツールが選ばれるのを待たずに、有効なエンドポイントをテストするには/generate voice-messageを使用します。ペルソナに設定済みのサンプルを使うことも、その場限りのサンプルをアップロードすることもできます。サンプルをアップロードする場合は、可能であればモーダル内でその文字起こしを入力してください。
表現力豊かな発話にするには、モーダルにグローバルな発話方向を入力するか、voiceツールに
voice_instructionsを送らせてください。読み上げるスクリプトはプレーンテキストのままにしてください。
任意のインラインスタイルタグは、発話全体に対する指示として誤って扱われるのではなく、合成前に取り
除かれます。
| 変数 | 既定値 | 用途 |
|---|---|---|
COSYVOICE3_RUNTIME_DIR | servers/tts/cosyvoice3/CosyVoice | 公式CosyVoiceのチェックアウト |
COSYVOICE3_MODEL_DIR | CosyVoice/pretrained_models/Fun-CosyVoice3-0.5B | ローカルのチェックポイントディレクトリ |
COSYVOICE3_MODEL_ID | FunAudioLLM/Fun-CosyVoice3-0.5B-2512 | セットアップがダウンロードするHugging Faceモデル |
COSYVOICE3_RUNTIME_COMMIT | 上記のレビュー済みコミット | CosyVoiceのチェックアウトリビジョン |
COSYVOICE3_MODEL_REVISION | 上記のモデルリビジョン | Hugging Faceのスナップショットリビジョン |
COSYVOICE3_UPDATE | 0 | インストーラーによる明示的なリビジョン更新を許可 |
TOMORI_TTS_HOST | 127.0.0.1 | ラッパーのバインドアドレス |
COSYVOICE3_PORT | 8017 | ラッパーのポート。未設定時はTOMORI_TTS_PORTにフォールバック |
TOMORI_TTS_PORT | 未設定 | 後方互換の共有ポートフォールバック |
TOMORI_TTS_MAX_TEXT_CHARS | 2000 | 合成テキストの最大長 |
COSYVOICE3_UPSTREAM_STREAM | 0 | CosyVoiceの内部ストリーミングジェネレーターを有効化 |
COSYVOICE3_MAX_REF_AUDIO_BYTES | 26214400 | デコード後の参照音声の最大サイズ |
COSYVOICE3_MAX_REF_AUDIO_SECONDS | 30 | 参照音声の最大長 |
COSYVOICE3_BEARER_TOKEN | 未設定 | /synthesize用の任意のベアラートークン |
COSYVOICE3_ALLOW_REMOTE_BIND | 0 | ループバック以外のバインドを許可。リモート公開を確認しベアラートークンを使用すること |
COSYVOICE3_SPEED | 1.0 | 上流の推論に渡されるグローバルな数値の速度倍率 |
COSYVOICE3_DEFAULT_INSTRUCT | 空 | リクエストが指定しなかった場合に追加される任意の指示 |
COSYVOICE3_FP16 | 0 | 公式ランタイムにfp16モードの使用を要求 |
COSYVOICE3_LOAD_TRT | 0 | 適切に準備された場合に上流のTensorRT読み込みを有効化 |
COSYVOICE3_LOAD_VLLM | 0 | 別途依存関係がインストールされている場合に上流のvLLM読み込みを有効化 |
既定ではTensorRT、vLLM、fp16はいずれも無効です。通常のPyTorchランタイムはすでに対象とする16 GBのGPUに収まり、インストールも単純で、既定の経路を最適化専用のセットアップにしてしまうことも避けられます。
パフォーマンスとモデルの種類
Section titled “パフォーマンスとモデルの種類”既定: ベースのFun-CosyVoice3-0.5B-2512
Section titled “既定: ベースのFun-CosyVoice3-0.5B-2512”これはTomoriBotで推奨される既定モデルです。話者の類似度が高く、現行のCosyVoice 3のクローンおよび指示モードすべてに対応し、16 GBのGPUでも量子化を必要としません。
現行のチェックポイントパッケージにはllm.rl.ptも含まれています。上流はベースとRLの結果を別々に公開しています。RL重みは一部のコンテンツ誤り指標を改善する一方、公開表ではベースの結果がわずかに高い話者類似度スコアを維持しています。TomoriBotはペルソナの音声クローンを重視するため、ラッパーは既定として通常のllm.ptのままにしています。
現行の公式ローダーは常にllm.ptという名前のファイルを読み込みます。既定のインストールを上書きせずにRL重みを試すには、モデルディレクトリを複製し、複製した方のllm.ptをllm.rl.ptに置き換え、COSYVOICE3_MODEL_DIRをその複製先に向けてください。
vLLMとTensorRT
Section titled “vLLMとTensorRT”CosyVoice 3は、任意のvLLMおよびTensorRTのパスにも対応しています。上流は現在、V1エンジンを使うvLLM 0.11.x以降と、レガシー経路としてのvLLM 0.9.0を文書化しています。これらのランタイムにはバージョンやハードウェアに関する追加の制約があるため、TomoriBotは既定ではインストールも有効化も行いません。
これらは通常のPyTorchサイドカーが動作するようになってから使用してください。Discordの音声メッセージという用途では、すでに小型な0.5Bモデルを最適化するよりも、余計なランタイムの複雑さを避ける方が普通は有用です。
現行のCosyVoiceコードリポジトリはApache License 2.0のもとでライセンスされており、FunAudioLLM/Fun-CosyVoice3-0.5B-2512のHugging Faceリポジトリも同様にApache-2.0と表示されています。
さらに、上流のモデルカードには、表示されている内容は学術的なデモンストレーション目的であり、一部の例はインターネット由来である可能性があるという免責事項が含まれています。ある公開中の上流の議論では、この免責事項が重みの商用利用にどう関係するのかについて、明確な説明を求めています。TomoriBotはこのモデルを再配布しません。セルフホストするユーザーは、特に商用利用の前に、自らのデプロイのために現行の上流ライセンスとモデルカードの条件を確認してください。