llama.cpp b10920为Hexagon后端加入多设备行切分支持
该版本允许把模型按行切分到多台Hexagon设备上运行,并为此修正了矩阵乘、注意力、ROPE等大量算子的多设备分区逻辑,同时更新了开发者文档和运行脚本。
AI解读:多设备支持不是只加一个开关。提交里有一长串针对各算子的修复:MUL_MAT、fused nx matmul、CPY、ALLREDUCE、Argsort、ROPE等都要正确处理跨设备的工作分区,否则会出现崩溃或计算结果错误。
对用Hexagon跑本地推理的人来说,这条更新意味着以后可以把一个模型按行拆到多块设备上,而不必整个塞进单台设备。不过所有细节都还停留在提交信息层面,来源没有给出性能数据或支持的设备组合清单。
文档和脚本也同步更新,包括面向用户的说明、面向开发者的算子开发指南,以及解析设备组的运行脚本。想真正用起来,需要自己核对手上设备是否被这套分组逻辑覆盖。
llama.cpp发布b10920版本,提交标题为“hexagon: support for multi-device model split (aka row-split) (#28589)”,由Max Krasnyansky和Alexander Lu共同提交。
这次改动的核心是让Hexagon后端支持把模型按行切分到多台设备上运行,提交作者称之为multi-device row split。
提交信息显示,多设备状态统一使用mdev_前缀,工作切分也被加进了融合kernel。
配套改动覆盖了大量算子:MUL_MAT、fused nx(2x、3x)matmul、CPY、ALLREDUCE、Argsort、ROPE以及多个简单算子都修正了多设备下的工作分区问题。
版本同时更新了用户与开发者文档,并修改运行脚本以正确解析设备组。
发布页照例列出各平台预编译包,包括macOS、Linux、Windows、Android以及多种GPU后端选项。
多设备行切分具体改了什么
根据提交信息,这项改动为Hexagon后端加入了多设备(multi-device)模型切分支持,aka row-split,即按行拆分模型。
多设备状态统一放在htp_mdev_group中,并使用mdev_前缀命名。提交作者还重构了切分逻辑,使其全部收拢在if (mdev_count > 1) {...} 分支内。
设备配置被改得更具表达力,以支持设备组(device groups)。融合kernel也加入了工作切分。提交信息还提到,fused nx(2x、3x)matmul必须为每个工作输出更新行数。
为多设备修正的算子与同步机制
提交记录列出大量针对多设备的修复,覆盖MUL_MAT、CPY、ALLREDUCE、Argsort、ROPE、GLU、PAD以及多个简单算子。
同步与fence逻辑也被重构:fence分配增加了为mdev保留的槽位,修复了CPY_FENCE中fence和barrier清除的剩余问题,简化了会话flush逻辑并修复其递归问题,还改进了ALLREDUCE的错误处理。
提交信息称,这些修复解决的是新测试下的崩溃,以及由mdev引入的MUL_MAT工作分区bug。此外还有一项修复是mnpu的工作切分需要把块对齐到cacheline。
文档、脚本与预编译包
该版本更新了用户文档和开发者文档,其中包含针对算子开发的详细指南。运行脚本也做了调整,以正确解析dev groups。
发布页照常提供多平台预编译产物:macOS Apple Silicon(arm64)与Intel(x64)、iOS XCFramework、Ubuntu x64/arm64/s390x(CPU)、Vulkan、ROCm 10.0、OpenVINO 2026.3.1、SYCL FP32/FP16、Android arm64(CPU)、Windows x64/arm64的CPU、OpenCL Adreno、CUDA 12.4、CUDA 13.3、CUDA 13.4、Vulkan、OpenVINO、SYCL、ROCm 10.0包,以及UI包。
macOS Apple Silicon的KleidiAI启用版本标记为DISABLED,openEuler的 310p与 910b(ACL Graph)包同样标记为DISABLED。