Voxtral Mini で Rust を使ってリアルタイム音声認識を構築する

序章

2026年、AIエコシステムは依然として大規模で不透明なクラウドモデルが支配していました。数少ないコミュニティ主導のプロジェクトが、ラップトップやブラウザタブで動作する 完全オープンソースのリアルタイム推論 を提供することでギャップを埋め始めました。  Voxtral Mini 4B Realtimeプロジェクトは最近の代表例です。  Mistral の Voxtral Mini モデルを完全に Rust で実装し、Burn ML フレームワークを使用して、ネイティブなコマンドラインインターフェース(CLI)と WebGPU 上で動作する WebAssembly(WASM)パッケージを公開しています。

この記事では、主要な概念、アーキテクチャ、ベンチマーク、およびローカルまたはブラウザでモデルを実行する手順について説明します。

エンジン:Voxtral Mini 4B Realtime

  • モデルタイプ:音声からテキストへの因果エンコーダ/デコーダアーキテクチャ。
  • 重み:4‑B パラメータ(約9 GB SafeTensors)または 2.5 GB Q4‑GGUF 量子化シャード。
  • 実装:Pure Rust + Burn ML。Burn クレートは CubeCL 上で JIT スタイルのテンソル演算を提供し、Vulkan、Metal、または WebGPU をターゲットにできます。
  • 機能
  • GPU アクセラレーション(デフォルトは wgpu)
  • ネイティブトークナイザー(Tekken)または WASM 互換
  • clap / indicatif 進捗バー付き CLI
  • HuggingFace Hub 連携による重みのダウンロード
  • wasm‑pack を使った WASM コンパイル、ライブデモ付き

アーキテクチャの概要

Audio 16kHz mono → Mel‑spec (B,128,T)
    ↓
Causal encoder (32 layers, 1280 dim, 750‑token window)
    ↓
Conv‑downsample → Reshape [B,T/16,5120]
    ↓
Adapter (3072 dim)
    ↓
Autoregressive decoder (26 layers, 3072 dim, GQA)
    ↓
Token IDs → Text

エンコーダは 64 トークンのチャンクを潜在表現として生成し、デコーダは KV‑キャッシュを保持し、タイムステップごとにトークンを発行します。カスタム WGSL コンピュートシェーダーは dequantisation + 行列計算を融合し、Q4‑GGUF では naive f32 パスと比べて 4 倍高速なデコードを実現します。

パフォーマンススナップショット

リポジトリには in‑tree ベンチマークハーネスが含まれ、16 コア NVIDIA DGX‑Spark 上で以下が報告されています。

パス Encode ms Decode ms RTF Tokens/s メモリ
Q4 GGUF ネイティブ 1 021 5 578 0.416 19.4 703 MB
F32 ネイティブ 887 23 689 1.543 4.6 9.2 GB
Q4 GGUF WASM (ブラウザ) ~14 ~0.5 (ブラウザ)

RTF 0.416 は、文字起こしが音声時間の半分以下で完了することを意味し、ライブチャットやコールセンターに十分です。Q4 ルートはまた <3 GB で、クライアント側モデルをデプロイ可能にします。

クイックスタート – ネイティブ CLI

  1. Rust、Cargo、およびオプションの依存関係をインストール:
    curl https://sh.rustup.rs -sSf | sh  # Rust が無い場合
    sudo apt-get install libgl1-mesa-dev libvulkan-dev  # wgpu 用
    
  2. 重みをダウンロード(約9 GB)HuggingFace Hub 経由:
    uv run --with huggingface_hub \
       hf download mistralai/Voxtral-Mini-4B-Realtime-2602 \
       --local-dir models/voxtral
    
  3. 文字起こしを実行:
    cargo run --release --features "wgpu,cli,hub" --bin voxtral-transcribe -- \
      --audio audio.wav --model models/voxtral
    
  4. Q4 量子化版(≈2.5 GB)のパス:
    cargo run --release --features "wgpu,cli,hub" --bin voxtral-transcribe -- \
      --audio audio.wav --gguf models/voxtral-q4.gguf --tokenizer models/voxtral/tekken.json
    

クイックスタート – ブラウザデモ (WASM + WebGPU)

  1. ビルドツールをインストール (rustup target add wasm32-unknown-unknown, npm i -g wasm-pack bun).
  2. WASM パッケージをコンパイル:
    wasm-pack build --target web --no-default-features --features wasm
    
  3. 一時的な HTTPS 証明書を生成(WebGPU はセキュリティコンテキストが必要):
    openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \
      -keyout /tmp/voxtral-key.pem -out /tmp/voxtral-cert.pem \
      -days 7 -nodes -subj "/CN=localhost"
    
  4. ローカルでサーブ:
    bun serve.mjs
    
  5. https://localhost:8443 にアクセスし、証明書を受け入れ、Load from Server をクリック。これで 2.5 GB のモデルシャードをページにストリームし、マイクで録音または .wav ファイルをアップロードして使用できます。
  6. さらに、ホスト済み HuggingFace Space(https://huggingface.co/spaces/TrevorJS/voxtral-mini-realtime)にブラウザを指すと、手動設定をスキップできます。

よくある問題と修正法

  • 左側パディング問題:元の mistral-common は最初の 32 の無音トークンをパディングしますが、Q4 デコーダには不十分です。プロジェクトはパディングを 76 トークン(38 デコーダ位置)に増やします。パッチは src/audio/pad.rs にあります。
  • メモリ予算:ブラウザでは 2 GB ArrayBuffer の制限があるため、GGUF ファイルを 512 MB ごとに分割します。簡単な split -b 512m スクリプトで生成可能です。
  • ワークグループ制限:WebGPU は 1 つのディスパッチあたり 256 ワークグループを制限します。リポジトリは cubecl-wgpu を修正し、reduce カーネルのサイズを制限します。
  • GPU サポート:システムは Vulkan、Metal、または WebGPU アダプタをエクスポートする必要があります。無ければ CI は GPU 集中テストをスキップします。

プロジェクトの拡張

リポジトリは実験に適した設計です。

エリア 開始方法
新しい量子化スキームを追加 gguf モジュールをフォークし、新しい Dequant trait を実装
エンコーダを置き換える src/models/…/encoder.rs を修正し、再ベンチマーク
サーバーとしてデプロイ CLI ロジックを Actix‑web または Axum に包み、HTTP エンドポイントを追加
さらに多くのトークナイザーを統合 C の tekken 拡張を純粋な Rust のトークナイザーに置き換え

結論

Voxtral Mini 4B Realtime を Rust で実装することで、低遅延かつ高精度の音声認識をクライアントサイドだけで、ブラウザ内でも実現できることを示しています。わずか 2.5 GB の量子化モデルで 0.4 のリアルタイム係数を実現し、ほとんどの商用 API を上回り、100 % オープンソースを維持します。ビデオチャットアシスタント、ハンズフリー文字起こしツール、教育デモなど、どんなプロジェクトでも、しっかりドキュメント化された堅牢な基盤を提供します。

ハッキングを楽しみ、トークンを高速に保ち、オーディオをクリアにすることを願っています!

この記事を共有