1770694368
2026-02-10 01:26:00
ネイティブおよびブラウザーで実行されるストリーミング音声認識。純粋な Rust 実装 ミストラルの Voxtral Mini 4B リアルタイム を使用したモデル やけど ML フレームワーク。
第 4 四半期の GGUF 量子化パス (2.5 GB) は、WASM + WebGPU を介してブラウザー タブで完全にクライアント側で実行されます。 ライブで試してみてください。
# Download model weights (~9 GB)
uv run --with huggingface_hub
hf download mistralai/Voxtral-Mini-4B-Realtime-2602 --local-dir models/voxtral
# Transcribe an audio file (f32 SafeTensors path)
cargo run --release --features "wgpu,cli,hub" --bin voxtral-transcribe --
--audio audio.wav --model models/voxtral
# Or use the Q4 quantized path (~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
# Build WASM package
wasm-pack build --target web --no-default-features --features wasm
# Generate self-signed cert (WebGPU requires secure context)
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"
# Start dev server
bun serve.mjs
開ける https://localhost:8443をクリックし、証明書を受け入れて、 サーバーからのロード モデルのシャードをダウンロードします。マイクから録音するか、WAV ファイルをアップロードして文字起こしします。
HuggingFace Spaces でホストされたデモ ローカルセットアップをスキップしたい場合。
Audio (16kHz mono)
-> Mel spectrogram [B, 128, T]
-> Causal encoder (32 layers, 1280 dim, sliding window 750)
-> Conv 4x downsample -> Reshape [B, T/16, 5120]
-> Adapter [B, T/16, 3072]
-> Autoregressive decoder (26 layers, 3072 dim, GQA 32Q/8KV)
-> Token IDs -> Text
| F32 (ネイティブ) | Q4 GGUF (ネイティブ + ブラウザ) | |
|---|---|---|
| 重み | SafeTensor (~9 GB) | GGUF Q4_0 (~2.5 GB) |
| 線形運用 | テンソルマットムルの書き込み | カスタム WGSL シェーダ (融合 dequant + matmul) |
| 埋め込み | f32 テンソル (1.5 GiB) | Q4 の GPU (216 MB) + ルックアップ用の CPU バイト |
| ブラウザ | いいえ | はい (WASM + WebGPU) |
アップストリームの mistral-common ライブラリは、32 個の無音トークン (12.5 Hz) でオーディオを左パッドします。 mel/conv/reshape パイプラインの後、これにより、38 個のデコーダー プレフィックス位置のうち 16 個のみが無音でカバーされ、残りの 22 個には実際のオーディオが含まれます。 f32 モデルはこれを適切に処理しますが、Q4_0 量子化により、デコーダはプレフィックス内の音声コンテンツに敏感になります。音声ですぐに始まるオーディオ (マイク録音、先頭に無音部分がないクリップ) は、テキストの代わりにオールパッド トークンを生成します。
左側のパディングは 76 トークンに増加し、正確に 38 個の無音デコーダー トークンにマッピングされ、完全なストリーミング プレフィックスをカバーします。見る src/audio/pad.rs 詳細については。
ブラウザ タブで 4B モデルを実行するには、次の 5 つの厳しい制約を解決する必要がありました。
- 2GBの割り当て制限 —
ShardedCursor複数の読み取りVecバッファ - 4GBのアドレス空間 — 2 段階のロード: 重みを解析し、リーダーをドロップし、その後ファイナライズします
- 1.5 GiB 埋め込みテーブル — GPU 上の Q4 エンベディング + CPU 側の行ルックアップ
- 同期GPUリードバックなし — すべての tensor 読み取りは次を使用します
into_data_async().await - 256 ワークグループ呼び出し制限 — カーネルワークグループを制限するためにパッチを適用した cubecl-wgpu
# Native (default features: wgpu + native-tokenizer)
cargo build --release
# With all features
cargo build --release --features "wgpu,cli,hub"
# WASM
wasm-pack build --target web --no-default-features --features wasm
| 特徴 | 説明 |
|---|---|
wgpu (デフォルト) |
Burn/CubeCL 経由の GPU バックエンド (WebGPU、Vulkan、Metal) |
native-tokenizer (デフォルト) |
Tekken トークナイザー (C deps、WASM 非互換) |
wasm |
ブラウザのサポート: wasm-bindgen、WebGPU デバイス初期化、JS バインディング |
cli |
clap + indicatif を使用した CLI バイナリ |
hub |
HuggingFace Hub モデルのダウンロード |
# Unit + integration tests (requires GPU for full suite)
cargo test --features "wgpu,cli,hub"
# Lint
cargo clippy --features "wgpu,cli,hub" -- -D warnings
cargo clippy --no-default-features --features wasm --target wasm32-unknown-unknown -- -D warnings
# E2E browser test (requires Playwright + model shards)
bunx playwright test tests/e2e_browser.spec.ts
GitHub Actions ランナーには GPU アダプターがないため、GPU に依存するテスト (モデル レイヤー形状、Q4 matmul、WGSL シェーダーの正確性) は CI ではスキップされます。これらのテストは、Vulkan、Metal、または WebGPU をサポートする任意のマシン上でローカルに実行されます。
GGUF ファイルは、ブラウザーの管理下に留まるように、512 MB 以下のシャードに分割する必要があります。 ArrayBuffer 制限:
split -b 512m models/voxtral-q4.gguf models/voxtral-q4-shards/shard-
開発サーバーと E2E テストは、シャードを自動的に検出します。 models/voxtral-q4-shards/。
近日提供予定: ネイティブ ターゲットとブラウザ ターゲットにわたる精度 (WER) と推論速度のベンチマーク。
src/
audio/ # Mel spectrogram, chunking, resampling, padding
models/ # F32 model: encoder, decoder, adapter, attention, RoPE, KV cache
gguf/ # Q4 GGUF: reader, loader, model, tensor, WGSL shader, tests
web/ # WASM bindings: VoxtralQ4, initWgpuDevice, async decode loop
tokenizer/ # Tekken tokenizer wrapper (native only)
bin/transcribe # CLI binary
web/ # Browser demo: index.html, worker.js, voxtral-client.js
tests/ # Integration tests + Playwright E2E spec
scripts/ # Dev scripts: reference implementations, weight inspection, E2E helpers
patches/ # cubecl-wgpu workgroup size fix for WebGPU
アパッチ-2.0
#GitHub #TrevorSvoxtralminirealtimers