世界を動かす技術を、日本語で。

Pure C、CPU専用の推論を用いた「Mistral Voxtral Realtime 4B」音声認識モデル

概要

  • Voxtral Realtime 4B Pure C Implementation は、Mistral AIの音声認識モデルをC言語のみで実装した推論パイプライン
  • 外部依存ゼロ で、C標準ライブラリ以外不要。MPS(Apple Silicon)やBLAS(OpenBLAS)で動作
  • ストリーミングAPIとライブ音声対応、FFmpeg連携やPythonリファレンス実装も提供
  • 効率的なメモリ管理 と高速推論、長時間音声にも対応
  • ビルド・利用方法が簡単 で、幅広い環境で活用可能

Voxtral Realtime 4B Pure C Implementation 概要

  • Mistral AIのVoxtral Realtime 4Bモデル をC言語のみで実装した推論エンジン
  • 追加ライブラリ不要、C標準ライブラリのみで完結
  • MPS(Apple Silicon)による高速推論、BLAS(OpenBLAS等)はやや低速
  • オーディオ処理は重複ウィンドウ付きチャンクエンコーダ、入力長に関わらずメモリ使用量を制限
  • FFmpeg連携で多様な音声フォーマットに対応、stdinやマイク入力もサポート

特徴

  • ゼロ依存 :Cのみで動作、他のライブラリ不要
  • Metal GPUアクセラレーション :Apple Siliconで自動利用、GPUバッチ処理対応
  • ストリーミング出力 :トークン単位でリアルタイムに標準出力へ出力
  • C APIによるストリーミング :音声を逐次投入し、トークン列を即時取得
  • メモリマップド重み :safetensorsのBF16重みをmmapで即時利用
  • ライブマイク入力 :macOSで--from-mic指定、無音検出機能付き
  • WAV/RAW入力対応 :16bit PCM WAV自動リサンプリング
  • チャンクエンコーダ :重複チャンクで長時間音声も効率処理
  • ローリングKVキャッシュ :8192ポジションで自動圧縮、無制限長音声対応

クイックスタート

  • ビルド(バックエンド選択)

    • make mps:Apple Silicon(最速)
    • make blas:Intel MacやLinux(OpenBLAS必須)
  • モデルダウンロード

    • ./download_model.sh:約8.9GB
  • 音声ファイルの文字起こし

    • ./voxtral -d voxtral-model -i audio.wav
  • ライブマイク入力(macOS)

    • ./voxtral -d voxtral-model --from-mic
  • FFmpegによる多様な音声形式対応

    • ffmpeg -i audio.mp3 -f s16le -ar 16000 -ac 1 - 2>/dev/null | ./voxtral -d voxtral-model --stdin
  • 低遅延ストリーミング

    • ./voxtral -d voxtral-model --stdin -I 0.5

Pythonリファレンス実装

  • 自己完結型Python実装 も提供
    • 必要パッケージ:torch, safetensors, soundfile, soxr
    • 実行例:python python_simple_implementation.py voxtral-model audio.wav
  • vLLM不要、シンプルな参照用

使い方

  • 基本的な文字起こし

    • ./voxtral -d voxtral-model -i recording.wav
    • 標準出力にトークンを逐次出力
    • 詳細出力制御:--silent(無出力)、--debug(詳細)
  • 類似トークン表示

    • --alt <cutoff>指定で、類似トークン候補も表示
    • カットオフ値で候補の許容度調整
  • 処理間隔(-I)

    • -I <秒数>でエンコーダの処理周期を制御
    • 低値:レスポンス向上、GPU負荷増
    • 高値:効率重視、バッチ処理
  • 標準入力から音声読込

    • --stdin指定で、WAV/RAW自動判別
    • FFmpeg連携で多様な形式を即時変換
  • ライブマイク入力

    • --from-mic(macOS専用)、無音時は自動スキップ
    • Ctrl+Cで停止、遅延発生時は警告表示

C API利用例

  • オフライン文字起こし

    • vox_loadでモデル読込、vox_stream_initでストリーム生成
    • vox_stream_feedで音声投入、vox_stream_getでトークン取得
    • vox_stream_finishで残り音声処理、vox_stream_freeで解放
  • リアルタイムストリーミング

    • 音声チャンクを逐次vox_stream_feed、都度vox_stream_getでトークン取得
    • vox_stream_flushでバッファ即時処理、vox_set_processing_intervalで処理間隔調整
  • 類似トークン取得

    • vox_stream_set_alt(s, 3, 0.5)で最大3候補、カットオフ0.5
    • vox_stream_get_altで候補取得
  • ワンショット変換

    • vox_transcribe(ctx, "audio.wav")で一括文字起こし

ビルド・動作環境

  • バックエンド選択

    • make:利用可能なバックエンド表示
    • make blas:BLASアクセラレーション(macOSはAccelerate、LinuxはOpenBLAS)
    • make mps:Apple Silicon Metal GPU(最速、macOS専用)
  • OpenBLASインストール例(Linux)

    • Ubuntu/Debian:sudo apt install libopenblas-dev
    • Fedora:sudo dnf install openblas-devel
  • モデルダウンロード

    • ./download_model.shでHuggingFaceから約8.9GB取得
    • ファイル構成:
      • consolidated.safetensors(全重み、BF16)
      • tekken.json(トークナイザ辞書)
      • params.json(モデル設定)

ベンチマーク(Apple M3 Max)

  • MPS(Metal)
    • エンコーダ(3.6秒音声):284ms
    • デコーダプリフィル:252ms
    • デコーダ1ステップ:23.5ms
  • BLAS(OpenBLAS)
    • エンコーダ:約8秒
    • デコーダプリフィル:約1.2秒
    • デコーダ1ステップ:335ms

注意点・今後の課題

  • 現状はサンプル数が少なく、本番運用には追加テストが必要
  • KVキャッシュの長時間ストレステスト推奨
  • モデル推論パイプラインの理解・再現は完了済み
  • 今後の改善は容易

モチベーションと背景

  • Mistralによるオープンウェイト公開に感謝
  • vLLMとの提携だけではモデルの普及が限定的
  • 誰でも読めるC/Python実装を提供し、より広い利用を促進

まとめ

  • Voxtral Realtime 4B Pure C Implementation は、依存ゼロ・高速・多機能な音声認識推論エンジン
  • C/Python両実装 で、研究や実用に幅広く活用可能
  • 簡単なビルド・導入・利用手順 で、実験・検証・応用に最適

Hackerたちの意見

https://llmspy.org/docs/features/voice-input

https://docs.mistral.ai/models/voxtral-mini-transcribe-26-02

マイクだけじゃなくて、モニターポートからも音声をキャプチャして、ウェブから聞こえてくる音声をリアルタイムでトランスクリプションする方法に興味があるんだ。誰か成功した人いる?例えば、AudacityやOBS Studioでその音声をキャプチャして後でやることはできるから、リアルタイムでもできるはず。私のマシンがついていければだけど。

音声認識にはすごく興味があるんだけど、方言やいろんな用語の使い方が難しくて、どこから始めればいいのかまだ混乱してる。自分が持ってる大量の音声サンプルでモデルをトレーニングしたいんだけど、HNの音声認識モデルに関わってる人たちからアイデアもらえないかな?

面白いね、これとRustのランタイム実装が今フロントページで競ってるよ。クールなプロジェクトだね!

MLXの実装もあるよ: https://github.com/awni/voxmlx

Salvatoreのvoxtral.cとflux2.cプロジェクトの大ファンなんだ。外部依存なしでスリムなオプションがあればいいなと思ってる。残念ながら、Voice Inputサポートをllms-pyに追加すると、今のところ実用には遅すぎる(AMD 7800X3D/Blas)。結局、Omarchyのvoxtype.ioへの新しいサポートが一番使いやすかったし、次がWhisper.cpp。遅いけど、OpenAIのWhisperもローカルトランスクリプションの選択肢としてはまだしっかりしてる。Mistralの新しいVoxtral Transcription APIのパフォーマンスと価格にも感動してるよ。めっちゃ速いし、すごく安い($0.003/分)。CPUやディスクに制約がある環境では、IMO最高の選択肢だと思う。

話してる間にトランスクリプションする方法をずっと探してるんだ。視覚的なフィードバックが必要だと思うんだよね。voxtypeはそれに対応してるのかな?(ぱっと見では何も見つけられなかった)Handyはオーバーレイがあるって言ってるけど、私のシステムではうまく動かないみたい。

こんにちは!このモデルは素晴らしいけど、ローカルでの推論には大きすぎるよね。Whisperのミディアム(「ベース」は正直ほとんど使えないし、「ラージ」は大きすぎる)って、いろんな環境にはいい選択だと思う。転写の質は確かに少し劣るけど(しかも、リアルなオンラインモードもないし)。でも…新しいQwen 0.6の転写モデルを試す時が来たかな。もし、彼らのベンチマーク通りに動けば、CPU実行のために最初から設計された依存関係なしの推論チェーンに向けて、かなり真剣な最適化ができるかも。多くの場合、こういう転写システムをHetznerみたいなサーバーレンタル業者でオンラインでインストールしたいからね。だから、次はこれに取り組むつもり。もしうまくいけば、Intel、AMD、ARMの命令セットに特化した大規模な最適化の時だね。パフォーマンスが良ければ、8ビット量子化も考えてみるかも。

ついに、LLMのオープンウェイトを動かすためのシンプルなCライブラリが出たの?

サイバーセキュリティの観点から見ると、このプロジェクトは性能だけじゃなくて、透明性でも印象的だね。