数週間前に vibevoice.cpp を出荷しました。これは、Microsoftの
VibeVoice(ボイス・クローニング付きの音声から音声へのモデル、https://github.com/microsoft/VibeVoice)を純粋なC++で ggml に移植したものです。エンジンが「最初の移植」段階を大きく超えて、他の人たちが実際に動かしてみたいと思える何かになってきたところなので、ここで続報を投稿したいと思いました。
この作業は LocalAI チームの <3 によって支えられています!
できること:
- TTS:事前に変換した音声プロンプトを使用(上流の .pt 音声のいずれでも、こちらのものでも、あなたのものでも scripts/convert_voice_to_gguf.py によって変換可能)。30秒の参照クリップを渡すと、クローニングした声で 24kHz の音声を生成します。事前変換済みの GGUF(0.5B リアルタイムモデル)を https://huggingface.co/mudler/vibevoice.cpp-models で提供
- 話者ダイアライゼーション付きのロングフォームASR:7Bパラメータモデル。出力として返します
- JSON セグメント {start, end, speaker, content}。最大 17 分までテスト済み
- 音声をワンショットで入力可能。
バックエンド:CPU(CPUのみのベースライン)、CUDA、Metal、Vulkan、ggml の
backend dispatch 経由の hipBLAS。単一バイナリ、または埋め込み用の libvibevoice.so +フラットな C ABI(purego/cgo/dlopen に対応しやすい)です。
数値:
推論 RTF ピーク RSS 68秒サンプル、CUDA Q4_K(GB10):28秒 0.41 ~6 GB 68秒サンプル、CPU Q4_K(R9):150秒 2.20 ~8 GB 17分音声、CPU Q8_0:1929秒 1.94 ~26 GB 上流の Microsoft の Python + Transformers + vLLM プラグインと比較:
- 同じ Qwen2.5 7B/0.5B のバックボーン、同じ DPM-Solver の拡散ヘッド、同じウィンドウ付き prefill(mlx-audio のパターンに従い、テキストトークン5個/音声フレーム6個)。
- クローズド・ループ TTS→ASR テストで固定シードに対して 100% のソース単語リコールを保証。CIで実行。
- 推論時に Python は使わず、vLLM も使わず、torch も不要。
制限 / 正直なところ:
- 17分音声のピークは、エンコーダの活性化プール + 14GB の Q8_0 重みの都合で、CPUではまだ 26 GB です。Q4_K はモデル側を削減します(ディスク上で約10GB)が、エンコーダのプールには別途作業が必要です。
- 拡散ヘッドは潜在フレームごとに小さなグラフを20個構築します。ここでのグラフ再利用が次の明白な改善点です。
- まだストリーミング出力には対応していません。完全な WAV/フルのトランスクリプトを出力します。
- ASR のトランスクリプト品質は上流が提供しているものと同等です。17分のイタリア語音声では、自然な文の区切りを通して回復したトランスクリプトが忠実でした。
リポジトリ:https://github.com/mudler/vibevoice.cpp(MIT)
モデル:https://huggingface.co/mudler/vibevoice.cpp-models
LocalAI 連携:この作業は LocalAI チームの <3 によって行われました。vibevoice.cpp はすでにバックエンドとして、LocalAI でそのまま使える準備ができています!
質問やフィードバックには喜んでお答えします!
[link] [comments]




