コンテンツにスキップ

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がリクエストをどう対応させるか”

ラッパーは通常のクローン型サイドカーのフィールドを受け付けます。

  • text
  • ref_audio
  • ref_text
  • instruct
  • language

現行のCosyVoice 3 APIは次のように選択されます。

リクエストCosyVoice 3のパス
参照音声+文字起こしinference_zero_shot
文字起こしなしの参照音声inference_cross_lingual
instructまたは明示的なlanguageinference_instruct2

最良の通常クローン品質を得るには、参照音声とそれに対応する文字起こしの両方を用意してください。CosyVoice 3の現行の指示APIは参照音声を条件にしますが、参照文字起こしを同時には受け付けないため、instructを使うリクエストは公式のinference_instruct2パスに切り替わります。

このエンドポイントはスクリプトマークアップ形式をプレーンにして登録してください。発話の方向付けは、任意のインラインの 角括弧タグではなく、エンドポイントのグローバルなvoice_instructionsフィールドに属します。これにより 発話全体を通して指示の意味が保たれ、[happy] Hello. [sad] Goodbye.のようなスクリプトを矛盾する2つの グローバル指示として扱ってしまう事態を避けられます。ネイティブの[breath][laughter]のサポートは、 TomoriBotが正確なプロバイダー対応のタグ機能を提示できるようになるまで、意図的に見送られています。

/synthesizeinstructフィールドは、CosyVoice 3の指示条件付けに渡されます。例としては 「安堵しているが、まだ疲れているように話す」「できるだけ早口で話す」「興奮を抑えながら小声で話す」 などがあります。

CosyVoice 3は上流で双方向ストリーミングに対応しています。このプロジェクトはテキスト入力ストリーミングと音声出力ストリーミングの両方を文書化しており、最適化された構成では最初の音声までの遅延が約150ミリ秒という低さになります。

TomoriBotの現行のカスタムTTSインターフェースは、Discordの音声メッセージ1件につき完全な音声レスポンス 1つを期待するため、このサイドカーは完全なWAVを返却し、上流の推論は既定でstream=Falseとします。 COSYVOICE3_UPSTREAM_STREAM=1は上流のジェネレーターをテストする場合にのみ設定してください。ストリー ミング対応の音声トランスポートが存在するまでは、TomoriBotの応答遅延を減らすことはありません。

TomoriBotの推奨される出発点は次のとおりです。

  • 16 GBのVRAMを搭載したNVIDIA GPU
  • Python 3.10
  • CUDA 12に対応した最近のNVIDIAドライバー
  • git
  • TomoriBotの音声サンプル正規化用のffmpeg
  • 上流の音声互換性の問題が起きる場合、Linuxではsoxlibsox-dev

モデル自体は0.5Bパラメーターで、16 GBのカードに収めるための量子化は不要です。Hugging Faceのチェックポイントのダウンロードは、パラメーター数から想像するよりもはるかに大きくなります。これはフローモデル、音声トークナイザー、英語テキストモデル、そしてベースとRL両方のLLM重みも同梱しているためです。現行のモデルパッケージには、Python環境とランタイムを別として、おおよそ10 GBのディスク容量を見込んでください。

CPU推論は上流ランタイムを通じて可能ですが、低遅延を要するDiscordの音声用途としては推奨される経路ではありません。

TomoriBotリポジトリのルートから実行します。

Terminal window
bash servers/tts/cosyvoice3/install-cosyvoice3.sh
servers/tts/cosyvoice3/.venv/bin/python servers/tts/cosyvoice3/server.py

または、設定済みのサイドカーとTomoriBotを一緒に起動します。

Terminal window
bun run launch --cosyvoice3

インストーラーは次の作業を行います。

  1. レビュー済みのQwenAudio/CosyVoiceコミット074ca6dc9e80a2f424f1f74b48bdd7d3fea531ccを、サブモジュールを含めて再帰的にservers/tts/cosyvoice3/CosyVoice/にチェックアウトする。
  2. servers/tts/cosyvoice3/.venvを作成する。
  3. 現行の上流CosyVoiceの依存関係と、小さなラッパーの依存関係セットをインストールする。
  4. FunAudioLLM/Fun-CosyVoice3-0.5B-2512をHugging Faceのリビジョン29e01c4e8d000f4bcd70751be16fa94bf3d85a18CosyVoice/pretrained_models/Fun-CosyVoice3-0.5B/にダウンロードする。

通常の再実行では、これらの正確なリビジョンが維持されます。インストールを意図的に更新するには、 COSYVOICE3_UPDATE=1を設定し、明示的なCOSYVOICE3_RUNTIME_COMMITCOSYVOICE3_MODEL_REVISIONの オーバーライドを与えてください。インストーラーは、記録済みのリビジョンと一致しないチェックアウトや モデルへ黙って切り替えることを拒否します。

上流の依存関係は現在、CUDA 12.1のパッケージインデックスを使うPyTorch 2.3.1、Linux上のCUDA 12対応ONNX Runtimeパッケージ、Linux上のTensorRT 10.13パッケージを使用します。より新しいPyTorch CUDAビルドを必要とするハードウェアを使用している場合は、上流の依存関係をインストールした後にサイドカーのvenv内へ互換性のあるPyTorchビルドをインストールし、お使いのドライバーでテストしてください。

ネイティブのWindowsはベストエフォートの経路として提供されています。

Terminal window
.\servers\tts\cosyvoice3\install-cosyvoice3.ps1
.\servers\tts\cosyvoice3\.venv\Scripts\python.exe servers\tts\cosyvoice3\server.py

NVIDIA GPUを使用する場合はWSL2を推奨します。現行の上流の依存関係は、LinuxではGPU版のONNX Runtimeを、WindowsではCPU版のONNX Runtimeをインストールするため、WSL2の方がCosyVoiceプロジェクトが低遅延のために最適化・テストしている構成により近くなります。

/providersを実行し、新しいカスタムエンドポイントを追加を選んで、音声エンドポイントを次のように設定します。

  • 機能: 音声
  • API互換性: tts-clone
  • エンドポイントURL: http://127.0.0.1:8017
  • 音声ソースモード: 音声クローン
  • スクリプトマークアップ形式: プレーン
  • 指示の対応: 有効

接続を保存したら、それを選択して音声モデルを追加します。分かりやすいモデルコードとしてはFun-CosyVoice3-0.5B-2512が挙げられます。

続いて/config > モデル > モデルの切り替えを開き、CosyVoice 3の音声エンドポイントを有効化してください。

通常のゼロショットクローンの場合:

  1. 背景ノイズがほとんどまたはまったくない、話者1人による10〜20秒のクリアなサンプルを準備します。
  2. /configでモデル > TTSパラメーターと音声を開き、サンプルをアップロードします。
  3. 可能であれば対応する文字起こしを入力します。CosyVoice 3はこれを文字起こし付きゼロショットのパスに使用します。
  4. /configでペルソナ > 音声を開き、そのサンプルをペルソナに割り当てます。

クロスリンガルクローンにも対応しています。参照する話者は、生成するテキストとは異なる言語を話していても構いません。参照文字起こしが用意できない場合、ラッパーはCosyVoice 3専用のクロスリンガルパスを使用します。

通常のチャットのやり取りで音声ツールが選ばれるのを待たずに、有効なエンドポイントをテストするには/generate voice-messageを使用します。ペルソナに設定済みのサンプルを使うことも、その場限りのサンプルをアップロードすることもできます。サンプルをアップロードする場合は、可能であればモーダル内でその文字起こしを入力してください。

表現力豊かな発話にするには、モーダルにグローバルな発話方向を入力するか、voiceツールに voice_instructionsを送らせてください。読み上げるスクリプトはプレーンテキストのままにしてください。 任意のインラインスタイルタグは、発話全体に対する指示として誤って扱われるのではなく、合成前に取り 除かれます。

変数既定値用途
COSYVOICE3_RUNTIME_DIRservers/tts/cosyvoice3/CosyVoice公式CosyVoiceのチェックアウト
COSYVOICE3_MODEL_DIRCosyVoice/pretrained_models/Fun-CosyVoice3-0.5Bローカルのチェックポイントディレクトリ
COSYVOICE3_MODEL_IDFunAudioLLM/Fun-CosyVoice3-0.5B-2512セットアップがダウンロードするHugging Faceモデル
COSYVOICE3_RUNTIME_COMMIT上記のレビュー済みコミットCosyVoiceのチェックアウトリビジョン
COSYVOICE3_MODEL_REVISION上記のモデルリビジョンHugging Faceのスナップショットリビジョン
COSYVOICE3_UPDATE0インストーラーによる明示的なリビジョン更新を許可
TOMORI_TTS_HOST127.0.0.1ラッパーのバインドアドレス
COSYVOICE3_PORT8017ラッパーのポート。未設定時はTOMORI_TTS_PORTにフォールバック
TOMORI_TTS_PORT未設定後方互換の共有ポートフォールバック
TOMORI_TTS_MAX_TEXT_CHARS2000合成テキストの最大長
COSYVOICE3_UPSTREAM_STREAM0CosyVoiceの内部ストリーミングジェネレーターを有効化
COSYVOICE3_MAX_REF_AUDIO_BYTES26214400デコード後の参照音声の最大サイズ
COSYVOICE3_MAX_REF_AUDIO_SECONDS30参照音声の最大長
COSYVOICE3_BEARER_TOKEN未設定/synthesize用の任意のベアラートークン
COSYVOICE3_ALLOW_REMOTE_BIND0ループバック以外のバインドを許可。リモート公開を確認しベアラートークンを使用すること
COSYVOICE3_SPEED1.0上流の推論に渡されるグローバルな数値の速度倍率
COSYVOICE3_DEFAULT_INSTRUCTリクエストが指定しなかった場合に追加される任意の指示
COSYVOICE3_FP160公式ランタイムにfp16モードの使用を要求
COSYVOICE3_LOAD_TRT0適切に準備された場合に上流のTensorRT読み込みを有効化
COSYVOICE3_LOAD_VLLM0別途依存関係がインストールされている場合に上流の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.ptllm.rl.ptに置き換え、COSYVOICE3_MODEL_DIRをその複製先に向けてください。

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はこのモデルを再配布しません。セルフホストするユーザーは、特に商用利用の前に、自らのデプロイのために現行の上流ライセンスとモデルカードの条件を確認してください。