Voxtral Small 24B (2507)

June 27, 2026 · View on GitHub

Mistral's mistralai/Voxtral-Small-24B-2507 ported to transcribe.cpp. An offline audio-LLM: a Whisper-large-v3 bidirectional audio encoder (32 layers, d_model=1280, 20 heads) feeds a 4-frame-group projector (375 audio tokens per 30 s chunk) into a Mistral-Small-24B causal LM (40 layers, hidden_size=5120, intermediate_size=32768, GQA 32 q / 8 kv heads, NEOX RoPE, SwiGLU) via audio-token injection at the audio_token_id=24 positions in the prompt.

It is the larger sibling of Voxtral Mini 3B: the audio encoder, projector pattern, log-mel frontend, and tekken tokenizer are identical — only the text decoder is scaled up (Mistral-Small-24B in place of Ministral-3B).

What it's for

Offline speech-to-text and speech-to-text translation. Takes a 16 kHz mono WAV and produces a transcript via greedy decoding.

  • Transcription — auto language detection, or an explicit --language hint. Voxtral advertises English, French, German, Spanish, Italian, Portuguese, Dutch, and Hindi.
  • Translation--translate --target-language <code> runs the mistral-common instruct template ("Translate this to {Language}.") to translate non-English speech into the target language's text.

See Mistral's model card for training data, intended use, and upstream evaluation.

Licensed Apache-2.0. Ported from upstream commit da5b424, pinned 2026-06-05.

Download

QuantizationDownloadSizeWER (LibriSpeech test-clean)
BF16Voxtral-Small-24B-2507-BF16.gguf48.54 GB1.56%
F16Voxtral-Small-24B-2507-F16.gguf48.55 GB1.57%
Q8_0Voxtral-Small-24B-2507-Q8_0.gguf25.81 GB1.56%
Q6_KVoxtral-Small-24B-2507-Q6_K.gguf19.94 GB1.58%
Q5_K_MVoxtral-Small-24B-2507-Q5_K_M.gguf17.14 GB1.60%
Q4_K_MVoxtral-Small-24B-2507-Q4_K_M.gguf14.30 GB2.11%

WER measured on the full LibriSpeech test-clean split (2620 utterances) with the Whisper-style English text normalizer, batch size 8 on an NVIDIA A100 80 GB. The same-split HuggingFace transformers reference run (VoxtralForConditionalGeneration, BF16, greedy) lands at 1.57%, and the BF16 GGUF matches it at 1.56%.

Quick Start

cmake -B build
cmake --build build

# transcription (auto language)
build/bin/transcribe-cli \
  -m models/Voxtral-Small-24B-2507/Voxtral-Small-24B-2507-Q8_0.gguf \
  samples/jfk.wav

# transcription with an explicit language hint
build/bin/transcribe-cli \
  -m models/Voxtral-Small-24B-2507/Voxtral-Small-24B-2507-Q8_0.gguf \
  --language de samples/german.wav

# speech translation (non-English audio -> English text)
build/bin/transcribe-cli \
  -m models/Voxtral-Small-24B-2507/Voxtral-Small-24B-2507-Q8_0.gguf \
  --translate --target-language en samples/german.wav

If your audio is not already 16 kHz mono WAV, convert it first:

ffmpeg -i input.mp3 -ar 16000 -ac 1 output.wav

CLI flags:

  • --language <code> — BCP-47 hint. Omit for auto-detection.
  • --translate --target-language <code> — speech translation via the instruct template.
  • --batch-size <N> — batched offline transcription. Use N ≤ 8 for this model (see Notes).

Performance

Cells are wall-clock latency (mean over 3 iterations after 1 warmup), with speedup over realtime in parentheses. Units: ms below 1 s, s above (2 decimal places).

Apple M4 Max

BackendSampleQ8_0Q4_K_M
Metaljfk (11.0s)3.36 s (3.3×)2.62 s (4.2×)
Metaldots (35.3s)11.20 s (3.2×)8.95 s (3.9×)

A 24B is a GPU-class model; on Apple Silicon it runs at ~3–4× realtime on Metal (the 3B sibling is ~15–18×). CPU is impractical at this size and is not benchmarked. transcribe.cpp 96adddb.

Benchmark reproduction:

uv run scripts/bench/run.py \
  --models Voxtral-Small-24B-2507 \
  --quants q8_0,q4_k_m \
  --samples jfk,dots \
  --backends metal \
  --iters 3 --warmup 1 \
  --name voxtral-small-24b-2507-publication

Notes

  • Batched inference: use batch size ≤ 8. transcribe.cpp ships a true parallel run_batch() fast path for the Voxtral family, and it is WER-neutral (byte-identical to single-stream). At the 24B's memory footprint, however, a batch composed entirely of long (>30 s, multi-chunk) clips can exceed the compute headroom on an 80 GB GPU and fail to allocate — so the practical ceiling is batch size 8. Smaller batches and single-clip transcription are unaffected. The failure is loud (the run errors rather than silently producing a partial result), so an oversized batch never yields a quietly-wrong transcript.

  • BF16 and F16 require ~50 GB of memory; on an 80 GB GPU they run comfortably at batch ≤ 8.

Numerical Validation

This variant is validated end-to-end by word error rate against the HuggingFace transformers reference, not by a separate tensor-by-tensor sweep. The full-set BF16 WER (1.56%) matches the same-machine transformers reference (1.57%) within rounding on all 2620 test-clean utterances.

The family's per-tensor numerical correctness is established by the Voxtral Mini 3B sibling, which passes a strict CPU tensor-parity sweep against the reference. The 24B shares that exact architecture (same encoder, projector, fusion, RoPE, and tokenizer; only the decoder is scaled), and given its size it was accepted on the WER match rather than re-running tensor parity — a deliberate scoping decision.

FieldValue
ReferenceHuggingFace transformers v4.57.6 (mistralai/Voxtral-Small-24B-2507)
Acceptance datasetLibriSpeech test-clean (2620 utterances), Whisper English normalizer
Reference WER1.57%
BF16 GGUF WER1.56%
Tolerances (family)tests/tolerances/voxtral.json