- Mistral Voxtral Realtime 4B モデル向けの、C言語のみで実装された推論パイプラインで、外部依存が一切ないスタンドアロン構成
- Metal GPUアクセラレーション(MPS) と BLAS(OpenBLAS/Accelerate) バックエンドをサポートし、ストリーミングAPI を通じてリアルタイム音声入力とトークン出力を処理
- メモリマップされたBF16重み、スライディングウィンドウベースのエンコーダ、ローリングKVキャッシュ により、長い音声入力でもメモリ使用量を一定に維持
- マイク入力、stdinパイプ、ffmpeg変換による多様な音声入力方式をサポートし、代替トークン表示と遅延調整オプション(-I) を提供
- MITライセンスで公開されており、Apple M3 Max基準でリアルタイムの約2.5倍の速度を達成し、軽量なローカル音声認識を実現可能
Voxtral.c 概要
- Mistral AIのVoxtral Realtime 4Bモデル向けの純Cベース推論エンジンで、C標準ライブラリ以外への依存はない
- MPSバックエンドは高速な推論速度を提供し、BLAS(OpenBLAS/Accelerate) はCPUベース環境で動作
- Pythonランタイム、CUDA、vLLM なしでも完全なローカル推論が可能
- python_simple_implementation.py ファイルを通じて、シンプルなPython参照実装も提供
- 必要なのは PyTorch、safetensors、soundfile、soxr のみ
主な機能
- Zero dependencies: 外部ライブラリなしでCだけで実行可能
- Metal GPUアクセラレーション: Apple Silicon環境で自動有効化され、GPU演算の融合とバッチ化されたアテンション処理を実施
- ストリーミング出力: 生成されたトークンを即座にstdoutへ出力
- Streaming C API: 音声を順次入力し、トークン文字列をリアルタイムで受信
- メモリマップ重み: safetensorsファイルをmmapで直接ロードし、即時利用可能
- マイク入力対応(macOS): 自動無音検出機能を含む
- Chunked Encoder: 音声を重なりのあるチャンク単位で処理し、メモリ使用量を一定に維持
- Rolling KV Cache: 8192ポジションのスライディングウィンドウでキャッシュを自動圧縮し、無制限長の音声を処理可能
使用方法
- 基本コマンド
./voxtral -d voxtral-model -i audio.wav : ファイルベースの音声認識
./voxtral -d voxtral-model --from-mic : マイク入力のリアルタイム認識(macOS)
ffmpeg パイプを通じてさまざまな音声フォーマットを入力可能
- 代替トークン表示
--alt <cutoff> オプションで類似発音候補もあわせて表示
cutoff 値が高いほど、より多くの候補を表示
- 遅延調整 (-Iオプション)
- エンコーダ呼び出し周期を秒単位で設定
- 低い値(例: 0.5秒)は低遅延・高GPU負荷 / 高い値(例: 5秒)は効率的な処理
- デフォルトは2.0秒、リアルタイムストリーミングには1.0〜2.0秒を推奨
C API構造
- vox_stream_t ベースのストリーミングAPIを提供
feed() : 音声入力
get() : トークン受信
finish() : 残りの音声を処理
flush() : バッファを強制処理
- vox_stream_set_alt() で代替トークン数を設定可能
- vox_transcribe() 関数で単一ファイルの一括処理が可能
モデルのダウンロードと構成
- HuggingFace から約8.9GBのモデル重みをダウンロード
consolidated.safetensors (BF16重み)
tekken.json (トークナイザ語彙)
params.json (モデル設定)
- Apache-2.0ライセンスのモデル、MITライセンスのコード
性能ベンチマーク
- Apple M3 Max (40コアGPU、128GB RAM) 基準
- MPSバックエンド: エンコーダ 284ms、デコーダ 23.5ms/ステップ
- BLASバックエンド: エンコーダ 約8秒、デコーダ 335ms/ステップ
- 60秒音声基準で平均31.6ms/ステップ、リアルタイムの約2.5倍の速度
- デコーダはMetalコマンドバッファの単一呼び出しでトークンごとの全演算を実行
モデルアーキテクチャ
- 総計40億パラメータ(4B) 規模のストリーミング音声-テキストモデル
- 音声エンコーダ: 32層 causal transformer、1280次元、32ヘッド、ウィンドウ 750
- アダプタ: Linear(5120→3072) → GELU → Linear(3072→3072)
- LLMデコーダ: 26層 transformer (Ministral-3ベース)、3072次元、GQA(32ヘッド/8KV)
- Tekkenトークナイザ、語彙サイズ 131,072
- 対応言語: 英語、スペイン語、フランス語、ポルトガル語、ヒンディー語、ドイツ語、オランダ語、イタリア語、アラビア語、ロシア語、中国語、日本語、韓国語
メモリ要件
- モデル重み: 8.9GB (オンデマンドmmap)
- GPUキャッシュ: 約8.4GB (BF16→F16変換後)
- KVキャッシュ: 最大1.8GB (スライディングウィンドウ制限)
- 作業バッファ: 約200MB
ビルドとプラットフォーム
- macOS Apple Silicon:
make mps (最速)
- macOS Intel / Linux(OpenBLAS) :
make blas
- Ubuntu/Debian:
sudo apt install libopenblas-dev
- Fedora:
sudo dnf install openblas-devel
ライセンス
- コード: MIT
- モデル: Apache-2.0
- オープンソースとして誰でも修正および再配布可能
1件のコメント
Hacker Newsのコメント
私はオープンソースアプリの Handy と Parakeet V3 を組み合わせて STT(音声認識)を使っています。
速度と精度の面で、この組み合わせを超えるものはまだ見たことがありません。ほぼ即座に文字起こしされ、多少の精度低下があっても AI の 文脈を読む能力 のおかげで問題になりません。
Voxtral C 実装を Handy に統合してみましたが、M1 Max MacBook(64GB)では文字起こしが遅すぎました。ほかの実装も試す予定です
私は Salvatore の voxtral.c と flux2.c プロジェクトのファンです。
外部依存なしで軽量に動く選択肢として、今後も最適化が進むことを願っています。ですが現状では実運用には遅すぎます(AMD 7800X3D/Blas 環境基準)。
llms-py の Voice Input 機能 を追加する際、UX の面では Omarchy の voxtype.io サポートが最も良く、その次が Whisper.cpp でした。
OpenAI Whisper は遅いものの、依然として安定したローカル文字起こしの選択肢です。
また、Mistral の Voxtral Transcription API は速度と価格の両面で印象的でした。— 1分あたり $0.003 と非常に高速かつ低価格です。CPU やディスクに制約がある環境では最良の選択だと思います
次は新しく出た Qwen 0.6 の文字起こしモデルを試してみるつもりです。ベンチマークどおりなら、CPU 専用最適化と 8bit 量子化 まで考慮した軽量チェーンへ発展する可能性が高いです。
Hetzner のようなサーバーレンタル環境でも導入できる必要があるので、Intel・AMD・ARM の各セット向け最適化を試す予定です
Handy にはオーバーレイ機能があるそうですが、私のシステムでは動作しません
Linux ではインストールは簡単でしたが、Whisper.cpp や Moonshine のような リアルタイム文字起こし はまだできません。
--from-micオプションが Mac のみ対応なので、ffmpeg で音声をキャプチャしてみましたが、マイク入力の接続には失敗しました。私のシステムはデフォルトモデルを動かすにはスペック不足のようです。
voxtral-q4.gguf モデル を試してみたいです
Audacity や OBS Studio では録音できるので、リアルタイムでも可能な気がします。
個人的には、file→ffmpeg→voxtral、次に mic→ffmpeg→file、最後に mic→ffmpeg→voxtral の順で試すと思います
タイトルには CPU 専用とありますが、実際には GPU アクセラレーション もサポートしています。リポジトリの説明に明記されています
このプロジェクトと Rust ランタイム実装が同時に HN のメインに上がっています。興味深い競争構図 です
MLX バージョンの実装もあります → voxmlx
私は 音声-テキスト(STT) 分野に強い関心があります。
さまざまなアクセントや専門用語が混ざったデータを扱いたいのですが、手元にある大規模な音声サンプルデータでモデルを学習させるにはどこから始めればよいのかわかりません。助言を求めます
16GB の M3 MacBook Pro で動かしてみましたが、読み込みはされるものの フリーズするか非常に遅い です
20年前なら 200MB 程度でできていたことに、今では 9GB モデル が必要だというのは奇妙に感じます