llama.cpp b11313重新为qwen4exp启用 -sm tensor
该版本修复了 #27941 中因PLE层导致Meta设备断言而禁用的张量分割,并将hc_init的REPEAT节点提前展开,使其被调度器分配到设备上。
AI解读:llama.cpp发布b11313,把qwen4exp的 -sm tensor重新打开。此前 #27941 因为测试在Meta设备上触发断言而关掉了这个开关。
问题出在嵌入放在主机内存时,PLE gather是CPU节点,hc_init这个REPEAT会先经过layer 0的PLE路径,导致后面在Meta分割里被当成主机节点处理。
修法是构建完hc_init后立即展开,让REPEAT直接排在第一个设备节点前面,这样调度器第二遍就能给它分配设备;嵌入reshape仍留在CPU分割里,作为分割输入复制进去,与deepseek4的做法一致。
受影响的是用llama.cpp跑qwen4exp、又依赖 -sm tensor做张量分割的用户;本次发布同时提供macOS、Linux、Windows、Android等平台预编译包。
llama.cpp发布b11313版本,其中一项改动是重新为qwen4exp启用 -sm tensor。该特性此前在 #27941 中被禁用。
根据发布说明,#27941 禁用它的原因是:当测试夹具带有PLE层后,test-llama-archs在Meta设备上触发断言,位置是ggml-backend-meta.cpp:476 的GGML_ASSERT(ggml_backend_buffer_is_meta(tensor->buffer))。
禁用与重新启用的技术原因
发布说明描述,当嵌入(embeddings)驻留在主机内存时,PLE gather是一个CPU节点,而hc_init——即把嵌入扇出到各hc流的REPEAT——最初是通过layer 0的PLE路径、在该gather之后才被访问到的。
ggml_backend_sched_split_graph的第二遍向上扩展设备分配时,遇到CPU节点就会停止,因此这个REPEAT留在了CPU上;随后在meta分割内部对hc_init做reshape时,看到的是一个驻留主机的节点,从而触发断言。
修复方式是:在hc_init构建完成后立即将其展开,让REPEAT直接位于第一个设备节点之前,这样第二遍就能给它分配设备;嵌入的reshape仍留在CPU分割中,作为分割输入被复制进来,与deepseek4的处理相同。
b11313提供的预编译产物
该发布页面列出了各平台下载包。macOS/iOS方面提供macOS Apple Silicon (arm64)、macOS Intel (x64) 与iOS XCFramework;其中macOS Apple Silicon的KleidiAI启用版本标记为DISABLED。
Linux方面提供Ubuntu x64 (CPU)、Ubuntu arm64 (CPU)、Ubuntu s390x (CPU)、Ubuntu x64/arm64 (Vulkan)、Ubuntu x64 (CUDA 12)、Ubuntu x64/arm64 (CUDA 13)、Ubuntu x64 (ROCm 10.0)、Ubuntu x64 (OpenVINO)、Ubuntu x64 (SYCL FP32/FP16),以及Linux arm64(Snapdragon:CPU、Adreno GPU、Hexagon NPU)并附有安装指南。
Android方面提供Android arm64 (CPU) 与Android arm64(Snapdragon:CPU、Adreno GPU、Hexagon NPU)并附安装指南。
Windows方面提供Windows x64/arm64 (CPU)、Windows arm64 (OpenCL Adreno)、Windows x64 (CUDA 12)、Windows x64/arm64 (CUDA 13)、Windows x64 (Vulkan)、Windows x64 (OpenVINO)、Windows x64 (SYCL) 与Windows x64 (ROCm 10.0)。
openEuler构建标记为DISABLED;UI提供单独的UI压缩包。