[論文を読む] [デモ] [顔を抱きしめる]
Moshi は、音声テキスト基盤モデルおよび全二重音声対話フレームワークです。最先端のストリーミング ニューラル オーディオ コーデックである Mimi を使用します。 Mimi は、24 kHz オーディオを 1.1 kbps の帯域幅で 12.5 Hz 表現まで、完全なストリーミング方式 (レイテンシー 80 ミリ秒、フレーム サイズ) で処理しますが、SpeechTokenizer などの既存の非ストリーミング コーデック (50 Hz) よりも優れたパフォーマンスを発揮します。 、4kbps)、または SemantiCodec(50 Hz、1.3kbps)。
Moshi は2 つのオーディオ ストリームをモデル化します。1 つは Moshi に対応し、もう 1 つはユーザーに対応します。推論時、ユーザーからのストリームはオーディオ入力から取得され、Moshi のストリームはモデルの出力からサンプリングされます。これら 2 つのオーディオ ストリームに沿って、Moshi は自身の音声、つまり内部の独白に対応するテキスト トークンを予測します。これにより、生成の品質が大幅に向上します。小さな深度トランスフォーマーは特定のタイム ステップのコードブック間の依存関係をモデル化し、大きな 7B パラメーターの時間トランスフォーマーは時間的な依存関係をモデル化します。 Moshi は、理論上のレイテンシー 160 ミリ秒 (Mimi のフレーム サイズの 80 ミリ秒 + 音響遅延 80 ミリ秒) を達成し、L4 GPU での実際の全体的なレイテンシーは 200 ミリ秒と低くなります。
今すぐライブデモで Moshi に話しかけてください。
Mimi は、SoundStream や EnCodec などの以前のニューラル オーディオ コーデックに基づいて構築されており、エンコーダーとデコーダーの両方にトランスフォーマーを追加し、12.5 Hz の全体的なフレーム レートに一致するようにストライドを調整します。これにより、Mimi はテキスト トークンの平均フレーム レート (約 3 ~ 4 Hz) に近づくことができ、Moshi の自己回帰ステップ数を制限できます。 SpeechTokenizer と同様に、Mimi は蒸留損失を使用して、最初のコードブック トークンが WavLM の自己教師あり表現と一致するようにします。これにより、単一のモデルで意味情報と音響情報をモデル化できます。興味深いことに、Mimi は完全に因果的でストリーミング的ですが、遅延を引き起こすことなく、WavLM からの非因果的表現と十分によく一致することを学習します。最後に、EBEN と同様に、Mimi は特徴マッチングとともに敵対的トレーニング損失のみを使用し、ビットレートが低いにもかかわらず主観的な品質の点で大幅な改善を示しています。
このリポジトリには、moshi 推論スタックの 3 つの異なるバージョンがあります。
PyTorch を使用する Python バージョンはmoshi/
ディレクトリにあります。
M シリーズ Mac 用の MLX を使用する Python バージョンは、 moshi_mlx/
ディレクトリにあります。
運用環境で使用される Rust バージョンは、 rust/
ディレクトリにあります。これには、特に Rust での Mimi 実装が含まれており、 Python バインディングはrustymimi
として利用可能です。
最後に、ライブ デモのコードがclient/
ディレクトリに提供されます。
3つのモデルをリリースします。
私たちの音声コーデック Mimi、
男性合成音声(モシコ)を微調整したモシ、
Moshiは女性の合成音声(Moshika)を微調整しました。
バックエンドに応じて、利用可能なファイル形式と量子化は異なります。各モデルの HuggingFace リポジトリのリストは次のとおりです。 Mimi はそれらのそれぞれにバンドルされており、常に同じチェックポイント形式を使用します。
PyTorch (bf16) 用の Moshika: kyutai/moshika-pytorch-bf16。
PyTorch (bf16) 用の Mosiko: kyutai/mosiko-pytorch-bf16。
MLX 用のモシカ (int4、int8、bf16): kyutai/moshika-mlx-q4、kyutai/moshika-mlx-q8、kyutai/moshika-mlx-bf16。
MLX 用の Mosiko (int4、int8、bf16): kyutai/mosiko-mlx-q4、kyutai/mosiko-mlx-q8、kyutai/mosiko-mlx-bf16。
Rust/Candle 用の Moshika (int8、bf16): kyutai/moshika-candle-q8、kyutai/moshika-mlx-bf16。
Rust/Candle 用の Mosiko (int8, bf16): kyutai/mosiko-candle-q8、kyutai/mosiko-mlx-bf16。
すべてのモデルは CC-BY 4.0 ライセンスに基づいてリリースされています。
少なくとも Python 3.10 が必要ですが、3.12 が推奨されます。特定の要件については、個々のバックエンド ディレクトリを確認してください。以下を使用して PyTorch クライアントと MLX クライアントをインストールできます。
pip install moshi # moshi PyTorch、PyPIpip install moshi_mlx # moshi MLX、PyPI から、Python 3.12 に最適。# または Moshi および Moshi-MLX の最新バージョン。pip install -e "git+https://git@github .com/kyutai-labs/moshi.git#egg=moshi&subdirectory=moshi"pip install -e "git+https://[email protected]/kyutai-labs/moshi.git#egg=moshi_mlx&subdirectory=moshi_mlx"pip install rustymimi # mimi、PyPI からの Python バインディングを使用した Rust 実装
Python 3.12 を使用していない場合は、 moshi_mlx
またはrustymimi
( moshi_mlx
依存するもの) をインストールするときにエラーが発生する可能性があります。次に、Rust ツールチェーンをインストールするか、Python 3.12 に切り替える必要があります。
現在のコードベースが Windows 上で動作することを期待していますが、正式なサポートは提供していません。 MLX バージョンを MacBook Pro M3 でテストしました。現時点では、PyTorch バージョンの量子化はサポートされていないため、大量のメモリ (24GB) を搭載した GPU が必要になります。
Rust バックエンドを使用するには、Rust ツールチェーンの最新バージョンが必要です。 GPU サポートをコンパイルするには、特にnvcc
を使用して、GPU に適切にインストールされた CUDA も必要です。
PyTorch ベースの API はmoshi
ディレクトリにあります。オーディオ トークナイザー (mimi) と言語モデル (moshi) のストリーミング バージョンを提供します。
対話型モードで実行するには、モデルを実行するサーバーを起動する必要があります。その後、Web UI またはコマンド ライン クライアントを使用できます。
次のコマンドでサーバーを起動します。
python -m moshi.server [--gradio-tunnel] [--hf-repo kyutai/moshika-pytorch-bf16]
次に、localhost:8998 の Web UI にアクセスします。 GPU が離れたマシン上にある場合、http を使用する Web サイトではオーディオ ワークレット API の使用が許可されていないため、これは機能しません。これを回避するには 2 つの方法があります。
ssh -L
フラグを使用して、リモート 8998 ポートをローカルホストに転送します。次に、前述のように localhost:8998 に接続します。
--gradio-tunnel
引数を使用すると、どこからでもアクセスできる URL を持つトンネルが設定されます。このトンネルは米国を通過するため、大幅な遅延が発生する可能性があることに注意してください (ヨーロッパからは最大 500 ミリ秒)。 --gradio-tunnel-token
使用すると、固定のシークレット トークンを設定し、長期間同じアドレスを再利用できます。
--hf-repo
使用して、適切な Hugging Face リポジトリを設定することで、別の事前トレーニング済みモデルを選択できます。
http 経由で localhost ではないサーバーにアクセスすると、Web UI でのマイクの使用で問題が発生する可能性があります (一部のブラウザーでは、https を使用した場合のみ許可されます)。
ローカルクライアントも利用できます。
python -m moshi.client [--url URL_TO_GADIO]
ただし、Web ブラウザとは異なり、このクライアントはベアボーンであることに注意してください。エコー キャンセレーションを実行したり、フレームをスキップして増大する遅延を補おうとしたりしません。
詳細については、特に API を直接使用する方法については、moshi/README.md をチェックしてください。
moshi_mlx
インストールしたら、次を実行できます。
python -m moshi_mlx.local -q 4 # 重みを 4 ビットに量子化しますpython -m moshi_mlx.local -q 8 # 重みを 8 ビットに量子化します# そして、別の事前トレーニング済みモデルを使用します: python -m moshi_mlx.local -q 4 --hf-レポきゅうたい/moshika-mlx-q4 python -m moshi_mlx.local -q 8 --hf-repo kyutai/moshika-mlx-q8# `-q` フラグと `--hf-repo` フラグが常に一致するように注意してください。
このコマンド ライン インターフェイスもベアボーンです。エコー キャンセルは実行しません。また、フレームをスキップして増大する遅延を補正しようともしません。
あるいは、 python -m moshi_mlx.local_web
を実行して Web UI を使用することもできます。接続は http 経由で、localhost:8998 になります。
Rust 推論サーバーを実行するには、 rust
ディレクトリ内から次のコマンドを使用します。
カーゴ実行 --features cuda --bin moshi-backend -r -- --config moshi-backend/config.json スタンドアロン
macOS を使用する場合は、 --features cuda
--features metal
に置き換えることができます。
あるいは、 config.json
ではなくconfig-q8.json
を使用して、量子化された q8 モデルを使用することもできます。いずれかのファイルの"hf_repo"
キーを変更することで、別の事前トレーニング済みモデル (例: Moshika) を選択できます。
サーバーが「スタンドアロン ワーカー リスニング」を出力すると、Web UI を使用できるようになります。デフォルトでは、Rust サーバーは https を使用するため、localhost:8998 になります。
サイトが安全ではないという警告が表示されます。 Chrome を使用している場合は、[詳細] または [詳細] を選択し、[この安全でないサイトにアクセスする] または [ローカルホスト (安全ではない) に進む] を選択することでこれらを回避できます。
モデル全体の品質を向上させる追加のエコー キャンセレーションを提供する Web UI を使用することをお勧めします。ほとんどのコマンドは、指定された URL でこの UI を直接提供し、通常はそれ以上何もする必要がないことに注意してください。
あるいは、Rust バージョンと Python バージョンのコマンド ライン インターフェイスも提供しています。プロトコルは Web UI と同じであるため、サーバー側で変更するものは何もありません。
参考までに、Moshi のクライアントのリストを次に示します。
rust
ディレクトリ内から次のコマンドを実行します。
カーゴ実行 --bin moshi-cli -r -- tui --host localhost
Python -m moshi.client
ドッカーの構成
NVIDIA コンテナ ツールキットが必要です
Web UI は、次の手順でこのリポジトリから構築できます ( npm
がインストールされている必要があります)。
CDクライアント npmインストール npm ビルドを実行する
Web UI はclient/dist
ディレクトリにあります。
Moshi をさらに開発するために、このリポジトリのクローンからインストールしたい場合は、次の操作を行うことができます。
# repopip install -e 'moshi[dev]'pip install -e 'moshi_mlx[dev]'pre-commit install のクローンのルートから
ローカルでrustymimi
ビルドしたい場合(Rustが適切にインストールされていると仮定して):
pip インストール マチュリン maturin dev -r -m Rust/mimi-pyo3/Cargo.toml
問題を開く前に、「よくある質問」セクションを確認してください。
現在のコードは、Python 部分については MIT ライセンス、Rust バックエンドについては Apache ライセンスに基づいて提供されています。 Web クライアント コードは MIT ライセンスに基づいて提供されます。このコードの一部は、MIT ライセンスの下でリリースされた AudioCraft に基づいていることに注意してください。
モデルの重みは CC-BY 4.0 ライセンスに基づいてリリースされています。
Mimi または Moshi を使用する場合は、次の論文を引用してください。
@techreport{kyutai2024moshi, title={Moshi: a speech-text foundation model for real-time dialogue}, author={Alexandre D'efossez and Laurent Mazar'e and Manu Orsini and Am'elie Royer and Patrick P'erez and Herv'e J'egou and Edouard Grave and Neil Zeghidour}, year={2024}, eprint={2410.00037}, archivePrefix={arXiv}, primaryClass={eess.AS}, url={https://arxiv.org/abs/2410.00037}, }