llama.cpp b11815修复SYCL后端CONV_2D非连续输入结果错误
该版本将SYCL后端CONV_2D的布局支持扩展到CWHN(cwhn=1),测试从 16 项失败变为 0 失败,SYCL0后端 2006/2006 项测试通过。
AI解读:发布说明由github-actions[bot] 提交,属于项目官方发布记录。
问题根源在算子实现按连续的 [W, H, C, N] 布局计算元素偏移,而supports_op对任意布局都声明支持,导致CWHN等置换布局的输入被以错误偏移读取,产生静默的错误结果。
修复方式是参照CUDA后端的约定,对input和kernel增加连续性检查,并在算子中断言输入连续性;随后又实现了CWHN通道序布局在SYCL上的正确计算,使supports_op同时接受两种布局。
提交信息给出的测试结果是:test-backend-ops -b SYCL0 -o CONV_2D从 16 项失败变为 0 失败,SYCL0后端 2006/2006 项测试通过。这是提交者提供的单项算子测试结果,不覆盖其他算子或模型推理表现。
该版本同时提供macOS、Linux、Windows、Android等多平台预编译包,其中包括Ubuntu x64 SYCL FP32与FP16构建、Windows x64 SYCL构建。影响范围限于使用SYCL后端并涉及CONV_2D的工作负载。
llama.cpp发布b11815版本,修复SYCL后端CONV_2D算子在非连续输入下返回错误结果的问题,并新增对CWHN通道序布局的支持。
非连续输入为何算错
发布说明解释,SYCL的CONV_2D内核按连续的 [W, H, C, N] 张量索引input,但supports_op对任意布局都声明支持该算子。当输入是非连续布局(例如经CWHN置换)时,内核用错误的元素偏移读取数据,结果错误且不报错。
修复参照CUDA后端的约定,对input和kernel的连续性加以限制,并在算子中断言input连续。
CWHN布局支持与测试结果
后续提交在ggml/src/ggml-sycl/conv2d.cpp的ggml_sycl_op_conv2d中实现了CWHN布局计算,并更新ggml-sycl.cpp中GGML_OP_CONV_2D的supports_op,使其接受两种布局。
提交信息称,test-backend-ops -b SYCL0 -o CONV_2D由 16 项失败变为 0 项失败,SYCL0后端 2006/2006 项测试通过。该数据来自提交者,范围限于这一算子测试。
- 修改文件:ggml/src/ggml-sycl/conv2d.cpp、ggml/src/ggml-sycl/ggml-sycl.cpp
- 测试命令:test-backend-ops -b SYCL0 -o CONV_2D
- 提交信息标注Assisted-by使用了通过llama.cpp运行的Qwen3.8-27B量化模型
发布包覆盖范围
b11815提供macOS(arm64、x64)、iOS XCFramework、Linux(CPU、Vulkan、CUDA 12/13、ROCm 10.0、OpenVINO、SYCL FP32/FP16)、Android、Windows及UI等构建产物。与本次修复直接相关的是SYCL构建,包括Ubuntu x64 SYCL FP32、FP16与Windows x64 SYCL。