开源llama.cpp Releases·原文 2026年9月28日本站收录 2026年9月29日

llama.cpp b11233发布:重构回滚测试并修复Metal空张量融合问题

该版本将test-recurrent-state-rollback改为支持 --models DIR遍历全部dummy模型,并为test_multi_seq_split_replay分配独立测试状态;同时允许Metal后端融合 0 元素节点,避免图重排序导致的重新分配。

llama.cpp发布b11233版本,主要改动包括重构test-recurrent-state-rollback、将test_multi_seq_split_replay拆为独立测试,以及修复Metal后端处理 0 元素节点时的图打包问题。

测试重构方面,test-recurrent-state-rollback不再使用原始llama_context指针,改用llama_context_ptr,并移除了手动llama_free调用和清理lambda。

该测试新增 --models DIR模式,模仿test-save-load-state,遍历每个dummy模型并在表格中报告PASS/FAIL/SKIP,只有模型失败时才判失败。原先四个按模型注册的ctest条目合并为一个带ARGS --models的条目。

test_multi_seq_split_replay此前在test_rollback末尾调用,结果被并入回滚状态,且只有回滚部分通过时才运行。现在它有独立的test_status,两项测试通过共享的run_tests helper在两种cache fill下独立运行,并在 --models表格中分别显示rollback和split replay两列及每项测试摘要。任一测试失败时退出码为失败。

单模型模式现在复用run_tests_for_model,不再重复模型初始化和非循环检查;模型加载失败返回FAIL而非SKIP,因此 --model指向损坏文件时仍会以非零退出。helper像 --models循环一样以model_only加载,因为测试创建自己的上下文。

Metal融合打包修复:0 元素张量不再被排除

ggml_metal_fusion_max的融合打包排除了 0 元素张量,topk_moe/moe_reduce检查也拒绝n_tokens == 0,导致解码无输出批次的图与最坏情况预留图打包方式不同。Metal优化器随后以不同顺序重排节点,ggml_gallocr_needs_realloc因布局不匹配而失败,迫使图进行意外的重新预留,该问题由GGML_SCHED_DEBUG_REALLOC捕获。

修复方式是将空张量视为与非空张量相同:在模式序列中匹配它们,只拒绝真正畸形的形状。融合内核在空图上派发零线程组,这是合法的no-op。

测试放宽split replay的nmse上限至 1e-4

test-generate-models使用std::random_device播种权重,部分生成的lfm2模型在split replay上因舍入噪声漂移到约 1.7e-5 nmse,触发原先的 1e-5上限。现将上限提高到 1e-4,以避免随机生成导致的不稳定失败。

构建产物覆盖多平台,KleidiAI与openEuler被禁用

b11233提供macOS Apple Silicon(arm64)、macOS Intel(x64)、iOS XCFramework等苹果平台构建;Linux方面有Ubuntu x64/arm64/s390x的CPU构建,以及Vulkan、CUDA 12.8、CUDA 13.4、ROCm 10.0、OpenVINO 2026.4、SYCL FP32/FP16等变体。

还有Linux arm64 Snapdragon(CPU、Adreno GPU、Hexagon NPU)、Android arm64及Snapdragon变体、Windows x64/arm64的CPU、CUDA、Vulkan、OpenVINO、SYCL、ROCm构建,以及一个UI包。

macOS Apple Silicon的KleidiAI启用版本被标记为DISABLED,openEuler的x86和aarch64构建同样被标记为DISABLED。

信息来源

llama.cpp Releases原始来源