llama.cpp b11223放行因果重排模型的RANK pooling分批处理
llama.cpp新构建b11223的server改动允许Qwen3、Qwen3-VL等因果LLM重排模型对超过n_ubatch的输入做分块预填充,此前服务器会直接拒绝这类RANK pooling输入。
AI解读:这条更新解决的是llama.cpp服务端一个具体的“卡死”问题:用Qwen3、Qwen3-VL这类因果LLM做重排时,输入只要超过n_ubatch,服务器过去会直接拒绝,长文档和多模态重排因此用不了。现在RANK pooling在因果上下文里获准分块预填充,和普通解码模型一样处理。
原因在于重排模型分两类。BERT这类双向交叉编码器必须把所有token放进一个物理批次,不能拆;而Qwen3、Qwen3-VL本来就是解码器,只是被拿来当重排器用,理论上可以分块。旧代码没有区分这两类,把RANK pooling一律按“不能拆”处理,还硬编码架构名判断末token池化,结果把因果模型的长输入也挡住了。
受益的主要是自建推理服务、用因果LLM跑重排的人。他们现在可以直接把长文档或多模态内容交给llama.cpp的server做RANK pooling重排,不必自己先截断或绕开服务端分批逻辑。不过这是构建版本b11223的补丁说明,没有公布吞吐、延迟或精度数据,实际效果仍需按自己的模型和硬件验证。
llama.cpp发布构建b11223,其中server端合并PR #28876:允许对因果LLM重排器(例如Qwen3、Qwen3-VL)的RANK pooling输入做批次拆分。
改动说明指出,过去服务器会拒绝所有大于n_ubatch的RANK pooling输入,同时图构建器把QWEN3/QWEN3VL的架构检查写死,用来决定末token池化。这导致因果模型的长文档重排和多模态重排无法工作。
补丁暴露llama_get_causal_attn(ctx),让服务器能检查运行时生效的注意力类型,会反映 --attention覆盖或set_causal_attn调用的结果;同时暴露llama_model_is_causal(model),用于从GGUF元数据查询静态架构属性。
can_split() 现在在上下文为因果时允许RANK pooling做分块预填充。图构建器原来的内联架构检查被替换为同一个cparams.causal_attn谓词,去掉重复逻辑。
提交信息中的Assisted-by标注为Opencode/Qwen3.8-27B与opencode,共同作者为timothywang21。补丁过程中还移除了未使用的llama_model_is_causal并修复空白字符。
该构建同时提供macOS、iOS、Linux、Android、Windows多平台二进制包,涵盖CPU、CUDA 12/13、Vulkan、ROCm 10.0、OpenVINO、SYCL、Snapdragon(CPU/Adreno GPU/Hexagon NPU)等后端;openEuler相关构建被标记为DISABLED,macOS Apple Silicon的KleidiAI启用版本也被标记为DISABLED。