Construisez une reconnaissance vocale en temps réel en Rust avec Voxtral Mini

## Introduction\nEn 2026, le paysage de l'IA était encore dominé par de grands modèles cloud opaques.\n Un petit nombre de projets communautaires a commencé à combler cette lacune en proposant une inférence entièrement open‑source en temps réel pouvant fonctionner sur un ordinateur portable ou même dans un onglet de navigateur.\n Le projet Voxtral Mini 4B Realtime est le dernier exemple.\n Il implémente le modèle Voxtral Mini de Mistral entièrement en Rust, en utilisant le cadre Burn ML, et expose à la fois une interface en ligne de commande native (CLI) et un paquet WebAssembly (WASM) fonctionnant sur WebGPU.\nCet article vous guide à travers les concepts clés, l'architecture, les benchmarks et les étapes pour exécuter le modèle localement ou dans le navigateur.\n\n## The Engine: Voxtral Mini 4B Realtime\n- Type de modèle : Reconnaissance vocale en texte, architecture encodeur/décodeur causal.\n- Poids : 4 B paramètres (~9 GB SafeTensors) ou un fragment quantifié Q4‑GGUF de 2,5 GB.\n- Implémentation : Rust pur + Burn ML. Le crate Burn fournit des opérations tensoriels de style JIT au-dessus de CubeCL, pouvant cibler Vulkan, Metal ou WebGPU.\n- Fonctionnalités :\n - Accéléré par GPU avec wgpu (par défaut)\n - Tokeniseur natif (Tekken) ou compatible WASM\n - CLI avec indicateurs de progression clap / indicatif\n - Intégration Hub HuggingFace pour télécharger les poids\n - Compilation WASM avec wasm‑pack, incluant une démo en direct\n\n## Architecture in a Nutshell\n\nAudio 16kHz mono → Mel‑spec (B,128,T)\n ↓\nCausal encoder (32 layers, 1280 dim, 750‑token window)\n ↓\nConv‑downsample → Reshape [B,T/16,5120]\n ↓\nAdapter (3072 dim)\n ↓\nAutoregressive decoder (26 layers, 3072 dim, GQA)\n ↓\nToken IDs → Text\n\nL'encodeur produit des fragments de 64 tokens de représentation latente, tandis que le décodeur conserve un cache KV et émet un token à chaque pas de temps. Un shader WGSL de calcul personnalisé fusionne déquantisation + multiplication matricielle, offrant une décodage 4× plus rapide sur Q4‑GGUF par rapport à un passage naïf f32.\n\n## Performance Snapshot\n| Path | Encode ms | Decode ms | RTF | Tokens/s | Memory |\n|------|-----------|-----------|-----|----------|--------|\n| Q4 GGUF native | 1 021 | 5 578 | 0.416 | 19.4 | 703 MB |\n| F32 native | 887 | 23 689 | 1.543 | 4.6 | 9.2 GB |\n| Q4 GGUF WASM (browser) | – | – | ~14 | ~0.5 | (browser) |\n\nRTF 0.416 signifie que la transcription se termine en moins d’une moitié de la durée audio—assez rapide pour le chat en temps réel ou les centres d'appels. Le chemin Q4 est également <3 GB, ce qui permet d'expédier des modèles côté client.\n\n## Quick Start – Native CLI\n1. Installer Rust, Cargo et dépendances optionnelles :\n bash\n curl https://sh.rustup.rs -sSf | sh # if Rust missing\n sudo apt-get install libgl1-mesa-dev libvulkan-dev # for wgpu\n\n2. Télécharger les poids (≈9 GB) via le Hub HuggingFace :\n bash\n uv run --with huggingface_hub \ hf download mistralai/Voxtral-Mini-4B-Realtime-2602 \ --local-dir models/voxtral\n\n3. Exécuter une transcription :\n bash\n cargo run --release --features "wgpu,cli,hub" --bin voxtral-transcribe --\n --audio audio.wav --model models/voxtral\n\n4. Pour le chemin quantifié Q4 (≈2,5 GB) :\n bash\n cargo run --release --features "wgpu,cli,hub" --bin voxtral-transcribe --\n --audio audio.wav --gguf models/voxtral-q4.gguf --tokenizer models/voxtral/tekken.json\n\n\n## Quick Start – Browser Demo (WASM + WebGPU)\n1. Installer les outils de construction (rustup target add wasm32-unknown-unknown, npm i -g wasm-pack bun).\n2. Compiler le paquet WASM :\n bash\n wasm-pack build --target web --no-default-features --features wasm\n\n3. Générer un certificat HTTPS temporaire (WebGPU requiert un contexte sécurisé) :\n bash\n openssl req -x509 -newkey ec -pkeyopt ec_paramgen_curve:prime256v1\n -keyout /tmp/voxtral-key.pem -out /tmp/voxtral-cert.pem\n -days 7 -nodes -subj "/CN=localhost"\n\n4. Servir localement :\n bash\n bun serve.mjs\n\n5. Accédez à https://localhost:8443, acceptez le certificat et cliquez sur Load from Server. Il chargera en flux les shards du modèle de 2,5 GB dans la page, après quoi vous pourrez enregistrer via le microphone ou télécharger un fichier .wav.\n6. Optionnellement, dirigez un navigateur vers l'Espace HuggingFace hébergé (https://huggingface.co/spaces/TrevorJS/voxtral-mini-realtime) pour éviter la configuration manuelle.\n\n## Common Gotchas & Fixes\n- Problème de left‑padding : Le mistral-common original ajoute 32 tokens de silence initiaux, insuffisant pour le décodeur Q4. Le projet augmente le padding à 76 tokens (38 positions de décodeur). La correction se trouve dans src/audio/pad.rs.\n- Budgets de mémoire : Pour les navigateurs, la limite de 2 GB ArrayBuffer nécessite de fragmenter le fichier GGUF en blocs de 512 MB. Un simple script split -b 512m les génère.\n- Limite de work‑group : WebGPU limite à 256 workgroups par dispatch. Le dépôt modifie cubecl-wgpu pour limiter la taille du noyau reduce.\n- Support GPU : Votre système doit exposer Vulkan, Metal ou un adaptateur WebGPU. Sans cela, l’intégration continue ignorera les tests lourds en GPU.\n\n## Extending the Project\nLe dépôt est conçu pour l'expérimentation :\n| Area | How to start |\n|------|--------------|\n| Add a new quantisation scheme | Fork gguf module, implement new Dequant trait |\n| Replace the encoder | Modify src/models/…/encoder.rs, re‑benchmark |\n| Deploy as a server | Wrap the CLI logic in Actix‑web or Axum, add HTTP endpoints |\n| Integrate more tokenisers | Replace the C tekken extension with a pure‑Rust tokenizer |\n\n## Conclusion\nVoxtral Mini 4B Realtime en Rust démontre que la reconnaissance vocale à faible latence et haute précision peut être délivrée entièrement côté client, même dans un navigateur. Avec un modèle quantifié modeste de 2,5 GB, vous obtenez un facteur temps réel de 0,4, surpassant la plupart des API commerciales tout en restant 100 % open source. Que vous construisiez un assistant video‑chat, un outil de transcription mains libres ou une démo pédagogique, ce projet vous offre une base solide et bien documentée pour démarrer.\n\nBonne hacking, et que vos tokens restent rapides et votre audio reste propre!

Original Article: Voir l’original

Partager cet article