github ggml-org/llama.cpp v0.9.0

latest release: b12111
one hour ago

Overview

This release adds OCP FP8 E4M3 quantization support, a new flash_attn_ext_rows op that makes the unified KV cache efficient for multi-sequence inference, and a generic batched tensor copy API. Four new architectures are supported (Clover, Limite, Metis-1.6 and Mistral Large 4), audio generation and transcription expand with Chatterbox TTS, Nemotron 3.5 Transcribe and predefined Pocket TTS voices, and the Gemma 4 E2B/E4B models get major prefill optimizations. ggml is updated to v0.29.0, bringing FP8 E4M3, flash attention rows, NCCL-based multi-node tensor parallelism and performance work across the CPU, CUDA, SYCL, Metal, Vulkan, OpenCL and Hexagon backends. The server and UI receive a round of fixes and refinements.

Highlights

  • Quant: OCP FP8 E4M3 tensor type (saturating mode) with conversion helpers and a new ftype (#27512)

  • llama: flash_attn_ext_rows - more efficient unified KV for multi-seq, restoring non-unified KV prefill performance (#29510)

  • ggml: batched tensor copy API (ggml_backend_tensor_copy_n/set_n/get_n) superseding the _2d API, implemented for Metal and CUDA (#30881)

  • For a 3rd year in a row, llama.cpp is a featured repo in the Github Octoverse report:

    image

API changes

  • llama.h: add LLAMA_FTYPE_MOSTLY_F8_E4M3 (#27512)
  • mtmd.h: add MTMD_GEN_AUDIO_TYPE_CHATTERBOX and n_voices to mtmd_gen_audio_info (#30993)
  • mtmd.h: add predefined-voice APIs: mtmd_gen_audio_voice_name(), mtmd_gen_audio_get_voice(), mtmd_gen_state_set_ref() (#30993)
  • mtmd.h: add mtmd_bitmap_is_voice() and mtmd_gen_audio_read_tensor() (#30993)
  • mtmd.h: add MTMD_VIDEO_TEMPLATE_QWEN3VL video prompt template (#31619)
  • server: GET /props reports the model's predefined TTS voices; the TTS endpoint accepts predefined voice names (#30993)
  • server: /v1/responses now merges extra_params (seed, min_p, ...) into the converted chat-completions response (#30959)

New models

  • Clover-35B-A3B-Preview diffusion model, AR mode (#31306)
  • Limite 1B - Violetto (#29433)
  • Metis-1.6 (Praxis ~2.9B and Logos ~10.2B): hybrid Mamba-2 / GQA attention with fixed-depth recurrence and LatentMoE (#31134)
  • Mistral Large 4 (#31376)

Core changes

  • gemma4: graph optimizations with massive prefill gains for E2B and E4B (#31356); create token_embd before the tied output in gemma3n and gemma4 (#31394)
  • LFM3: enable NVFP4 GGUFs (#31608), enable tensor split (#31431), quantize the audio codec decoder (#31386)
  • spec dec: save and restore MTP hidden state in context checkpoints (#30141) and record LFM3 layer inputs (#31598)
  • dflash: copy hidden features via device copies (#31506); qwen4exp: write the conv state tail without an intermediate cont (#31443)
  • model loading: reuse the tensor staging buffer and skip the direct-IO bounce buffer (#31321)
  • kv-cache: keep Hadamard rotation constants on the GPU (#31073) and fix attention tensor rotation in layers with shared KV (#31406)
  • kv-cache: never return 0 kv_rows for sequences without cells (#31570) and refuse rollbacks past the snapshots of the last ubatch (#31368)
  • Gemma4 MTP assistant: follow ctx_other devices and flash-attention setting (#31635); DSV4: remove simple batch splitting (#31300)
  • chat: strip the qwen3-coder think block with reasoning_format none (#31380) and end reasoning budget forcing on a prompt end tag (#31374)
  • chat: allow a constraint type after the gpt-oss final channel (#31556); common: fix -hf tag matching inside longer quant names (#31620) and bound control vector layer indices (#31336)
  • tools: reject mismatched shards in GGUF split merge (#31579), fix imatrix --nextn crash (#31522), fix gguf-py np_roundf dropping the sign (#31310)
  • vendor: miniaudio 0.11.26 (#31459) and cpp-httplib 0.64.0 (#31400); embed an app manifest in all Windows executables (#31329)

Multi-modality changes

  • add Chatterbox TTS support (#30993)
  • add Nemotron 3.5 Transcribe support: offline transcription in 40 languages with prompt context and speaker attribution (#31471)
  • Pocket TTS: support predefined voices without voice cloning (#31429)
  • accurate support for the qwen3-vl video prompt format (#31619)
  • resize Gemma 4 images without letterbox padding (#30922) and fix InternVL CLS token order (#30886)

Server changes

  • cap shared decision prefixes at the first output (#30710)
  • restore the speculative checkpoint for drafts longer than n_rs_seq (#31350)

UI changes

  • add MCP group checkboxes in the tools settings (#31303) and request persistent storage on startup (#31299)
  • keep chats at the bottom until the reader scrolls up (#31311) and show the submit button when the input has content (#31324)
  • reveal the collapsed sidebar from its logo (#31307) and align alert dialog styling (#31312)
  • keep queued steering messages in their own conversation (#31304) and show an interrupted state for tool calls that never returned (#31314)
  • disable model deletion the server would refuse (#31305) and prefer a loading model in pre-selection (#31326)
  • add a Playwright harness for recording demo videos (#31318) and run local browser tests in installed Chrome (#31596)

ggml changes

  • v0.29.0: ggml v0.29.0 adds an OCP FP8 E4M3 tensor type, a new ggml_flash_attn_ext_rows op where each query slice attends to its own list of K/V rows, a batched tensor copy API, and initial support for multi-node tensor parallelism through a new multi-process communicator interface. Core improvements include bounding tensor views by the bytes their strides reach, zero-copy GGUF export of host-buffer tensors, and vm_allocate-based allocations on Apple platforms. Performance work spans all major backends: new SVE kernels in the CPU backend, DPAS flash attention for quantized KV in SYCL, fused MoE MMQ in CUDA, faster MXFP4 mat-vec in Metal, split-K tuning in Vulkan, and a large expansion of quantized GEMM/GEMV coverage in OpenCL. The Hexagon backend gains support for several new ops, including the lightning indexer, top-k mask, conv2d and upscale.

Assets

Nightly build: b12110

More info

Changelog since v0.8.0

cd959ba llama.cpp : bump version to 0.9.0 (#31646)
13ec8f6 sync : ggml
cca14f6 ggml : bump version to 0.29.0 (ggml/1680)
e853ec9 llama : follow ctx_other devices and flash attention in Gemma4 assistant (#31635)
feaf800 ggml : Gate RVV code on the target extension (#31607)
4c4ca5b common : do not allow _ in sidecar (#31639)
162e2bb ggml : fix bf16 (#31609)
6900fb5 opencl: improve q2_0 GEMV for Adreno (#31577)
bbb02c9 ggml: bound views by the bytes their strides reach (#31584)
960b1d5 ggml : write host-buffer tensor data directly in gguf writer (#31144)
4b29d02 common : fix -hf tag matching inside longer quant names (#31620)
bee2332 hexagon: add LIGHTNING_INDEXER support (#31289)
149f564 mtmd: accurate support for qwen3-vl video prompt format (#31619)
b976279 model, mtmd: add chatterbox TTS support (#30993)
7071ba3 hexagon: add TOP_K_MASK op (#31552)
6cb3e67 gemma4: graph optimizations (massive gains on pp for E2B and E4B) (#31356)
6b9c0cf hexagon: faster TOP_K for the backend sampler (#31279)
d1c4e5b ui: run local browser tests in installed Chrome with its sandbox on (#31596)
20a51f2 hexagon: add DSV4_HC_PRE and DSV4_HC_POST ops (#30953)
0f35d6d spec : save and restore MTP hidden state (#30141)
a464960 ggml-zdnn: fix fattn test failure (#31583)
9309bf1 model : Add support for Metis-1.6 models (#31134)
d1044bc model : enable NVFP4 LFM3 ggufs (#31608)
28b812d mtmd : add Nemotron 3.5 Transcribe support (#31471)
749db7f qwen4exp: write the conv state tail without an intermediate cont (#31443)
0943ca5 ui: add Playwright harness for recording demo videos (#31318)
f9448cd model : record layer inputs in LFM3 for spec dec (#31598)
0978a6e ggml: avoid signed overflow in ggml_roll bounds check (#30375)
0ef2730 conversion : use original model tensor names in _flush_nvfp4_experts (#31427)
8fc0376 cuda: potential fix for Q8_1 correction sum (#31247)
740251a cuda : gather batched tensor reads into mapped host memory (PR to master) (#31391)
71efc55 Add nccl support for multi-node tensor parallelism (#28967)
19e8a86 tools : reject mismatched shards in GGUF split merge (#31579)
259d917 meta: support GLM-5.3 next sm tensor (#30499)
36ee3ca metal : fix cpy kernel for dst non-contiguous in dim 0 (#31581)
fac3a89 vulkan: skip maxStorageBufferRange pre-check for non-compute tensors (#31114)
b74298c delta_net_base: refactor conv state (#30878)
37b0f9c vulkan: fix out-of-bounds NVFP4 UE4M3 scale lookup (#31079)
ca8daad llama : drop the redundant cnv from llm_attn_mask (#31558)
0f663d2 dsv4.1: fix llama-context tests with partial offload (#31292)
00f113e cuda : prevent premature eviction of graphs about to be used (#30662)
e6192de opencl: add initial iq4_xs support (#31339)
4402e65 chat : allow constraint type after gpt-oss final channel (#31556)
74101b3 ci : update the HIP VGPR spill ignore list for the kv_rows FA kernel argument (#31550)
713319e webgpu: add ARANGE support (#31455)
ee17f29 kv-cache : never return 0 kv_rows for sequences without cells (#31570)
51fe42c hexagon: tiled hvx permute (#31446)
2cbca38 dflash: copy hidden features via device copies (#31506)
29c720e docs: update s390x build docs (#31546)
d02b4c0 mtmd: Pocket tts - support for voices without voice cloning (#31429)
e4b6c8c model: add Clover support (#31306)
1b6935b llama : flash_attn_ext_rows - more efficient unified kv for multi-seq (#29510)
3f8af15 imatrix : fix --nextn crash (#31522)
cd8427d context : simplify setters (#29730)
6b00d56 readme : fix links in README.md for maintainer PRs (#31487)
458fcfc docs: CANN backend supports BF16 on 910B, document GGML_CANN_NO_PINNED (#31249)
6ed8120 ggml-zdnn: share buffers with host (#31481)
ea24b95 ggml : use vm_allocate instead of posix_memalign on all Apple platforms (#31437)
84d9ce0 opencl: add topk_mask (#31441)
dcbb091 vulkan: add tensor-parallel allreduce function (#25051)
07ec7c8 vulkan: improve small-n split-K selection on RDNA3 and RDNA4 (#30146)
cb02250 vulkan: avoid redundant scans when zeroing skipped rows (#31266)
2c93f0b sycl : fast ggml_sycl_comm_exchange() on Intel Arc Pro B70s (#30956)
5e18eb0 sycl: dmmv code cleanup (#31325)
5c2ea1a ui: disable model deletion the server would refuse (#31305)
23426d7 ui: align alert dialog styling with other overlay surfaces (#31312)
90080ce ui: keep queued steering messages in their own conversation (#31304)
64be95b ui: show interrupted state for tool calls that never returned (#31314)
b12b405 ui: don't reload a loading model on select, prefer it in pre-selection (#31326)
aac6da8 docs : fix Vulkan example command in build.md (#31530)
00ef136 tests : merge identical if branches (#31523)
5969566 jinja : implement map('filter') (#24033)
a7a490a ggml : fix clang-cl build with AVX512 BF16 (#31276)
f72dc30 docs: fix Huawei ascend brand (#31463)
fcfe4b5 requirements : minor adjustments for python 3.14 wheels (#31534)
4e910a8 cmake : add explicit thread linkage (#31414)
1c5ed70 webgpu : fix CI by keeping scratch alloc sizes monotonic in batch length (#31422)
785322d requirements : fix numpy dependencies (#31508)
dde879b sycl: Try PkgConfig for LevelZero includes / libs (#31076)
060b2fe opencl: add initial iq3 support (#31338)
a91eab6 hexagon : fix DMA transfers with strides > 24 bits (#31442)
d5ef408 mtmd : fix InternVL CLS token order (#30886)
79bce0c tests : enable Gemma 4 in test-llama-archs (#31401)
bc428e4 llama : enable tensor split for LFM3 (#31431)
f6312ad vendor : update miniaudio to 0.11.26 (#31459)
0138937 llama : fix rotation of attention tensors in layers with shared KV (#31406)
ddf48f8 reshaping so mm on 2d instead of 3d tensor for lfm sc (#30831)
f3586e6 server: cap shared decision prefixes at the first output (#30710)
2871678 server : fix /v1/responses endpoint to accept extra_params (#30959)
7bd1808 mtmd : resize Gemma 4 images without letterbox padding (#30922)
0ec4027 opencl: add fwht (#31434)
1052f7e chat : strip the think block in the qwen3-coder with reasoning_format none (#31380)
8956c76 sycl: fix f32 to q2_0/q4_0/q5_0 rounding in CPY (#31120)
5047748 rpc : delete fs_path_to_utf8() (#31424)
792fcf4 opencl: add initial iq1 support (#31341)
a34de86 common : delete fs_path_to_utf8() (#31423)
aa588a3 common : drop the Windows argv reconstruction (#31417)
889f2ec quant : allow quantization for LFM3-Audio codec decoder (#31386)
1ab23c3 vendor : update cpp-httplib to 0.64.0 (#31400)
27b8464 ci : add missing ccache-clear to windows behavior check (#31413)
d63fbfe cmake : embed an app manifest in all Windows exes (#31329)
e216f4e ci : extract most apple jobs into daily workflow (#31408)
344846b gemma3n, gemma4 : create token_embd before the tied output (#31394)
fb59972 kv-cache : keep rotation constants on the GPU (#31073)
ab3768c memory: refuse rollbacks past the snapshots of the last ubatch (#31368)
e0f142d opencl: add initial q2_0 support (#31340)
3c809f4 common : end reasoning budget forcing on an end tag from the prompt (#31374)
36a0e2f sycl: FLASH_ATTN_EXT failures (#30761)
418f905 ggml : add batched tensor copy API (#30881)
eb4e244 ROCm/HIP: add RDNA4_M family for gfx1170/gfx1171 (#31373)
68d20b8 Quant: OCP FP8 E4M3 support (#27512)
0893ec9 skills: specify rule about ggml_build_forward_expand (#31375)
78feec0 model: mistral le chonk (#31376)
0ac1a7f llama : reuse the tensor staging buffer and skip the direct-io bounce buffer (#31321)
7df8b87 server : restore the spec checkpoint for drafts longer than n_rs_seq (#31350)
8ab29fa ui: keep chats at the bottom until the reader scrolls up (#31311)
f5d4d75 ui: show submit button when the chat input has content (#31324)
3ed915e ui: reveal the collapsed sidebar from its logo and toggle it there (#31307)
f8fcef2 ui: add MCP group checkboxes in tools settings and fix indeterminate checkbox colors (#31303)
b7cde58 ui: request persistent storage on startup (#31299)
3dd0f60 doc: update ops for opencl (#31347)
78febba HIP/CUDA: enable sparse attn on CDNA (#31259)
abb76ab model : Support Limite 1B - Violetto (#29433)
41be0bd common: select A100 cores for SpaceMiT default threads (#30284)
22183e5 opencl: initial support for iq2 (#31267)
6d19453 metal : faster MXFP4 mat-vec, full threadgroups for unary/binary/GLU (#31075)
fade717 tests : remove duplicate FA test cases added in #31125 (#31357)
c9daee1 ggml-metal : fix unary kernels compile on older Metal toolchains (#31360)
8a199ad hexagon: support for UPSCALE op (#31331)
da6c30a hexagon: improve DDR bw utilization in transposed CONCAT (#31277)
f7c01c5 [SYCL] add DPAS flash attention kernel for quantized KV cache (#31125)
bf48103 sycl : vectorize reordered-layout dequantization stores (Q4_0, K-quants, IQ3, MXFP4) (#30976)
6d5ac3c tests : fix comp_padding CUDA graph reservation (#31344)
7ac5727 ggml-openvino: slice view inputs of SCALE (#31334)
2e0d86b Hexagon: IM2COL improvement - block based HVX parallelization (#31050)
e09a78a tests: fix CI flakes in server cancel and sleep tests (#31330)
369dcf3 ggml-cpu: add SVE implementation of ggml_gemv_q8_0_4x8_q8_0 (#30585)
d0ff631 docs : fix DSpark confidence threshold flag name (--spec-draft-p-min) (#31178)
cf24317 common, mtmd: bound control vector layer indices and M-RoPE position loops (#31336)
74a4fb0 opencl: add tiled q4_k GEMM for adreno (#30412)
5220213 hexagon: add conv2d support (#30995)
c3df4b7 Speed up IQ4 quant creation with pre-computed halfway points (#31201)
ac8e169 ggml-cpu: SVE 256 bit implementation of gemm_q6_K_8x8_q8_K kernel (#27472)
c02b5c6 ggml-cpu: SVE 256-bit Implementation of mxfp4 gemv kernel (#28141)
ff0d396 ci(s390x): switch to Ubuntu 26.04 runners (#31317)
838093f llama : remove simple batch splitting for DSV4 (#31300)
604cc43 codeowners : refresh teams and maintainer PRs link (#31316)
39febd2 sycl: work-group argmax for short TOP_K rows (#31110)
f5222f2 cuda: fuse MoE (MUL_MAT_ID) gate/up and GLU in MMQ (#31188)
28cb47c gguf-py: fix np_roundf dropping the sign (#31310)

Don't miss a new llama.cpp release

NewReleases is sending notifications on new releases.