vibevoice.cpp:Microsoft VibeVoice(TTS+話者分離付き長文ASR)をggml/C++に移植、推論はPython不要

Reddit r/LocalLLaMA / 2026/5/5

📰 ニュースDeveloper Stack & InfrastructureTools & Practical UsageModels & Research

要点

  • 記事では、音声クローン付きTTS(speech-to-speech)と話者分離付きの長文ASRを提供する、Microsoft VibeVoiceの純粋なC++(ggml)移植版「vibevoice.cpp」が紹介されています。
  • 推論バックエンドとしてCPU・CUDA・Metal・Vulkanをサポートし、単一バイナリとしてもlibvibevoice.soとしても実行でき、flat C ABIによる組み込みも可能です。
  • TTS向けにはGGUFの事前変換モデルを用意し、7Bパラメータの長文ASRは、開始/終了時刻、話者ラベル、テキストを含むJSONセグメントとして出力します。
  • 68秒サンプルでCUDA(Q4_K)時のRTFが約28秒などの性能が報告されており、長時間入力ではメモリ使用量が大きく増えることも示されています(CPUで最大17分までテスト)。
  • 元のPython/Transformers/vLLM構成と比べて、推論からPythonやtorchを排除しつつ、同等の中核モデル構成を維持し、CIでTTS→ASRのクローズドループ想起テストも実行しています。

数週間前に 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 でそのまま使える準備ができています!

質問やフィードバックには喜んでお答えします!

submitted by /u/mudler_it
[link] [comments]