13 points par GN⁺ 2026-02-12 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Mistral Voxtral Realtime 4B : un pipeline d’inférence implémenté uniquement en C, avec une architecture autonome sans aucune dépendance externe
  • Prend en charge les backends Metal GPU acceleration (MPS) et BLAS (OpenBLAS/Accelerate), et traite l’entrée vocale en temps réel ainsi que la sortie des tokens via une API de streaming
  • Grâce à des poids BF16 mappés en mémoire, un encodeur à fenêtre glissante et un rolling KV cache, l’utilisation mémoire reste stable même sur de longues entrées audio
  • Prend en charge plusieurs modes d’entrée audio via microphone, pipe stdin et conversion ffmpeg, avec affichage de tokens alternatifs et option de réglage de la latence (-I)
  • Publié sous licence MIT, avec des performances d’environ 2,5 fois le temps réel sur Apple M3 Max, rendant possible une reconnaissance vocale locale allégée

Présentation de Voxtral.c

  • Moteur d’inférence en pur C pour le modèle Voxtral Realtime 4B de Mistral AI, sans dépendance en dehors de la bibliothèque standard C
    • Le backend MPS offre des performances d’inférence rapides, tandis que BLAS (OpenBLAS/Accelerate) fonctionne dans les environnements basés CPU
    • Inférence entièrement locale possible sans runtime Python, CUDA ni vLLM
  • Une implémentation de référence Python simple est également fournie via le fichier python_simple_implementation.py
    • Nécessite seulement PyTorch, safetensors, soundfile et soxr

Fonctionnalités principales

  • Zero dependencies : exécutable uniquement en C, sans bibliothèque externe
  • Accélération GPU Metal : activée automatiquement sur Apple Silicon, avec fusion des opérations GPU et traitement batché de l’attention
  • Sortie en streaming : les tokens générés sont immédiatement affichés sur stdout
  • API C de streaming : permet d’alimenter l’audio séquentiellement et de recevoir les chaînes de tokens en temps réel
  • Poids mappés en mémoire : chargement direct des fichiers safetensors via mmap, immédiatement exploitables
  • Prise en charge du microphone (macOS) : avec détection automatique du silence
  • Chunked Encoder : traite l’audio en chunks qui se chevauchent afin de maintenir une utilisation mémoire stable
  • Rolling KV Cache : compression automatique du cache avec une fenêtre glissante de 8192 positions, permettant de traiter de l’audio de longueur illimitée

Utilisation

  • Commandes de base
    • ./voxtral -d voxtral-model -i audio.wav : reconnaissance vocale à partir d’un fichier
    • ./voxtral -d voxtral-model --from-mic : reconnaissance en temps réel depuis le microphone (macOS)
    • Les entrées dans divers formats audio sont possibles via un pipe ffmpeg
  • Affichage des tokens alternatifs
    • L’option --alt <cutoff> permet d’afficher aussi des candidats à prononciation similaire
    • Plus la valeur cutoff est élevée, plus le nombre de candidats affichés est important
  • Réglage de la latence (option -I)
    • Définit en secondes la fréquence d’appel de l’encodeur
    • Une valeur basse (ex. 0,5 s) réduit la latence mais augmente la charge GPU / une valeur élevée (ex. 5 s) améliore l’efficacité du traitement
    • La valeur par défaut est de 2,0 s ; 1,0 à 2,0 s est recommandé pour le streaming en temps réel

Structure de l’API C

  • API de streaming fournie autour de vox_stream_t
    • feed() : entrée audio
    • get() : réception des tokens
    • finish() : traite l’audio restant
    • flush() : force le traitement du buffer
  • vox_stream_set_alt() permet de configurer le nombre de tokens alternatifs
  • La fonction vox_transcribe() permet aussi de traiter un fichier unique en mode batch

Téléchargement et configuration du modèle

  • Téléchargement d’environ 8,9 Go de poids du modèle depuis HuggingFace
    • consolidated.safetensors (poids BF16)
    • tekken.json (vocabulaire du tokenizer)
    • params.json (configuration du modèle)
  • Modèle sous licence Apache-2.0, code sous licence MIT

Benchmarks de performance

  • Référence : Apple M3 Max (GPU 40 cœurs, 128 Go de RAM)
    • Backend MPS : encodeur 284 ms, décodeur 23,5 ms/étape
    • Backend BLAS : encodeur ~8 s, décodeur 335 ms/étape
  • Moyenne de 31,6 ms/étape sur un audio de 60 secondes, soit environ 2,5 fois plus rapide que le temps réel
  • Le décodeur exécute l’ensemble des opérations par token via un unique appel à un command buffer Metal

Architecture du modèle

  • Modèle streaming voix-vers-texte de 4 milliards de paramètres (4B)
    • Encodeur audio : transformer causal à 32 couches, dimension 1280, 32 têtes, fenêtre 750
    • Adaptateur : Linear(5120→3072) → GELU → Linear(3072→3072)
    • Décodeur LLM : transformer à 26 couches (basé sur Ministral-3), dimension 3072, GQA (32 têtes / 8KV)
  • Tokenizer Tekken, vocabulaire de 131 072 éléments
  • Langues prises en charge : anglais, espagnol, français, portugais, hindi, allemand, néerlandais, italien, arabe, russe, chinois, japonais, coréen

Exigences mémoire

  • Poids du modèle : 8,9 Go (mmap à la demande)
  • Cache GPU : environ 8,4 Go (après conversion BF16→F16)
  • KV cache : jusqu’à 1,8 Go (limité par la fenêtre glissante)
  • Buffer de travail : environ 200 Mo

Build et plateformes

  • macOS Apple Silicon : make mps (le plus rapide)
  • macOS Intel / Linux (OpenBLAS) : make blas
  • Ubuntu/Debian : sudo apt install libopenblas-dev
  • Fedora : sudo dnf install openblas-devel

Licence

  • Code : MIT
  • Modèle : Apache-2.0
  • Disponible en open source, modifiable et redistribuable par tous

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.