- Mistral Voxtral Realtime 4B: eine nur in C implementierte Inferenz-Pipeline, als eigenständige Ausführung ohne jegliche externe Abhängigkeiten
- Unterstützt Metal-GPU-Beschleunigung (MPS) und BLAS-Backends (OpenBLAS/Accelerate) und verarbeitet über eine Streaming-API Spracheingaben in Echtzeit sowie Token-Ausgaben
- Speicherabgebildete BF16-Gewichte, ein Encoder auf Basis eines Sliding Window und ein Rolling KV Cache halten den Speicherverbrauch auch bei langen Audioeingaben konstant
- Unterstützt verschiedene Audioeingaben über Mikrofon, stdin-Pipe und ffmpeg-Konvertierung; bietet Anzeige alternativer Tokens und die Latenzsteuerungsoption
-I
- Veröffentlicht unter der MIT-Lizenz und erreicht auf einem Apple M3 Max etwa das 2,5-Fache der Echtzeitgeschwindigkeit, was eine schlanke lokale Spracherkennung ermöglicht
Überblick über Voxtral.c
- Eine reine C-basierte Inferenz-Engine für das Voxtral Realtime 4B-Modell von Mistral AI, ohne Abhängigkeiten außer der C-Standardbibliothek
- Das MPS-Backend bietet schnelle Inferenz, BLAS (OpenBLAS/Accelerate) läuft in CPU-basierten Umgebungen
- Vollständige lokale Inferenz auch ohne Python-Runtime, CUDA oder vLLM
- Mit der Datei python_simple_implementation.py wird zusätzlich eine einfache Python-Referenzimplementierung bereitgestellt
- Benötigt nur PyTorch, safetensors, soundfile und soxr
Hauptfunktionen
- Zero dependencies: Ausführung nur mit C, ohne externe Bibliotheken
- Metal-GPU-Beschleunigung: wird auf Apple Silicon automatisch aktiviert, mit Fusion von GPU-Operationen und gebatchter Attention-Verarbeitung
- Streaming-Ausgabe: erzeugte Tokens werden sofort auf stdout ausgegeben
- Streaming C API: Audio wird fortlaufend eingespeist, Token-Strings werden in Echtzeit empfangen
- Speicherabgebildete Gewichte: safetensors-Dateien werden direkt per
mmap geladen und sind sofort nutzbar
- Unterstützung für Mikrofoneingabe (macOS): inklusive automatischer Stilleerkennung
- Chunked Encoder: verarbeitet Audio in überlappenden Chunks und hält den Speicherverbrauch konstant
- Rolling KV Cache: automatische Cache-Komprimierung mit Sliding Window über 8192 Positionen, wodurch Audio beliebiger Länge verarbeitet werden kann
Verwendung
- Grundlegende Befehle
./voxtral -d voxtral-model -i audio.wav : dateibasierte Spracherkennung
./voxtral -d voxtral-model --from-mic : Echtzeit-Erkennung über Mikrofon (macOS)
- Eingaben in verschiedenen Audioformaten sind über eine
ffmpeg-Pipe möglich
- Anzeige alternativer Tokens
- Mit der Option
--alt <cutoff> können zusätzlich ähnlich klingende Kandidaten angezeigt werden
- Je höher der Wert
cutoff, desto mehr Kandidaten werden angezeigt
- Latenzsteuerung (Option
-I)
- Legt das Aufrufintervall des Encoders in Sekunden fest
- Niedrige Werte (z. B. 0,5 Sekunden) bedeuten geringe Latenz, aber höhere GPU-Last / hohe Werte (z. B. 5 Sekunden) ermöglichen effizientere Verarbeitung
- Standard ist 2,0 Sekunden; für Echtzeit-Streaming werden 1,0 bis 2,0 Sekunden empfohlen
Struktur der C API
- Bietet eine Streaming-API auf Basis von vox_stream_t
feed() : Audio einspeisen
get() : Tokens empfangen
finish() : verbleibendes Audio verarbeiten
flush() : Puffer zwangsweise verarbeiten
- Mit vox_stream_set_alt() kann die Anzahl alternativer Tokens festgelegt werden
- Mit der Funktion vox_transcribe() ist auch Stapelverarbeitung einer einzelnen Datei möglich
Modelldownload und Konfiguration
- Download von rund 8,9 GB Modellgewichten von HuggingFace
consolidated.safetensors (BF16-Gewichte)
tekken.json (Tokenizer-Vokabular)
params.json (Modellkonfiguration)
- Apache-2.0-lizenziertes Modell, MIT-lizenzierter Code
Performance-Benchmarks
- Basierend auf Apple M3 Max (40-Core-GPU, 128 GB RAM)
- MPS-Backend: Encoder 284 ms, Decoder 23,5 ms/Schritt
- BLAS-Backend: Encoder etwa 8 Sekunden, Decoder 335 ms/Schritt
- Durchschnittlich 31,6 ms/Schritt bei 60 Sekunden Audio, also rund 2,5-mal schneller als Echtzeit
- Der Decoder führt die gesamte Berechnung pro Token in einem einzigen Metal-Command-Buffer-Aufruf aus
Modellarchitektur
- Streaming-Sprach-zu-Text-Modell mit insgesamt 4 Milliarden Parametern (4B)
- Audio-Encoder: 32-lagiger causal Transformer, 1280 Dimensionen, 32 Heads, Fenstergröße 750
- Adapter: Linear(5120→3072) → GELU → Linear(3072→3072)
- LLM-Decoder: 26-lagiger Transformer (basierend auf Ministral-3), 3072 Dimensionen, GQA (32 Heads/8KV)
- Tekken-Tokenizer, Vokabulargröße 131.072
- Unterstützte Sprachen: Englisch, Spanisch, Französisch, Portugiesisch, Hindi, Deutsch, Niederländisch, Italienisch, Arabisch, Russisch, Chinesisch, Japanisch, Koreanisch
Speicheranforderungen
- Modellgewichte: 8,9 GB (On-Demand-
mmap)
- GPU-Cache: etwa 8,4 GB (nach BF16→F16-Konvertierung)
- KV-Cache: maximal 1,8 GB (durch Sliding-Window-Begrenzung)
- Arbeitsbuffer: etwa 200 MB
Build und Plattformen
- macOS Apple Silicon:
make mps (am schnellsten)
- macOS Intel / Linux(OpenBLAS) :
make blas
- Ubuntu/Debian:
sudo apt install libopenblas-dev
- Fedora:
sudo dnf install openblas-devel
Lizenz
- Code: MIT
- Modell: Apache-2.0
- Als Open-Source-Projekt kann es von allen modifiziert und weiterverbreitet werden
Noch keine Kommentare.