三款边缘设备上,一次生成的 kernel 正确率 64.5%,快过 TVM 仅 25.5%

EdgeKernelBench: Unified LLM-Driven Kernel Generation for Edge Backends

Yuhua Zheng, Xueyi Chen, Xinze Zou, Xin Li, Haoji Hu, Huan Wang

cs.LG

2026-10-17

EdgeKernelBench 用统一 IR,在手机 CPU、Jetson 与 RK3588 共 650 题上评测 LLM kernel。GPT-5.6-sol 一次生成正确率 64.5%,快过调优 TVM 的只有 25.5%,Level 3 最高 [email protected] 只有 4.0%。分层 LEKA 在同预算下把 69 题的 [email protected] 从 13.0% 提到 43.5%。

这篇在解决什么

服务端让 LLM 写 kernel,评测已经定型:照着 PyTorch 生成 CUDA 或 Triton,再和编译器比速度。默认软件栈整齐、显存够用。边缘侧这两条都不成立。骁龙手机、Jetson 和瑞芯微各有一套处理器与运行时,内存还要和系统其他进程分,中间张量过大会让模型直接无法部署。

KernelBench 停在服务器 GPU。MobileKernelBench 扩到了手机,公开任务仍以单算子和属性变体为主,不考跨算子融合,也不考小模型整图上的资源安排。换一个后端,就要重学一套语法和合法性规则。

方法

EdgeKernelBench 把生成收成一份统一 IR,再用分层任务来考。331 个规范任务都是静态化后的 PyTorch,经过人工核对。Level 1 有 128 个基本算子,Level 2 有 162 个融合模块,Level 3 有 41 个紧凑模型图,如 MobileNet、ResNet-18、NanoDet,以及 Llama、Qwen2 的解码器块。

正式评测没有把三个应用域铺满每台设备。骁龙 8 Gen 3 的手机 CPU 走 LLVM,只跑移动端 204 题;Jetson AGX Orin 64GB 走 CUDA,只跑具身机器人 218 题;RK3588 上的 Mali-G610 走 OpenCL,只跑 AIoT 228 题。合计 650。硬件和任务构成绑在一起。

模型填写统一 Kernel IR,同时给出计算、调度和内存决策。TVM 0.23.0 负责降级、合法化和运行时,不搜索调度。一次生成只调用一轮。正确性用三个随机种子核对结构、形状、类型和数值容差。计时让候选和基线在同一会话交替执行,编译和部署准备不算。[email protected] 是正确、计时有效、且配对加速比中位数大于 1 的任务比例。基线是 MetaSchedule 在真机上搜过的 TVM。代表性程序的校准上限为 CPU 1000 次、GPU 1500 次测量,任务预算再按收敛情况分配。

图一大,单次调用既要看依赖,又要管线程映射,测慢了也不知道该改哪一层。LEKA 按 IR 拆开。L0 在 Relax 上改图、布局和融合,L1 在 TIR 上改循环和并行,L2 在 CUDA C、OpenCL C 或 LLVM IR 里改向量化与寄存器。编译器只做保持语义的降级。硬件感知 agent 只读剖析,把瓶颈指回对应层。候选树留着旧版本。对照的 Claude Code 用同一个 GLM-5.3-Flash 和同一段墙钟:Level 1 上限 90 分钟,Level 2 与 3 上限 155 分钟。样本按难度分层,每后端 23 题,共 69 题。

结果

按题量加权表 1,摘要里那组总成绩属于 GPT-5.6-sol 的一次生成,样本是全部 650 题。

对照指标结果
GPT-5.6-sol,650 题一次生成,对调优 TVMCompile@1 / Correct@1 / [email protected]73.5% / 64.5% / 25.5%
三后端一次生成的最高 [email protected]Level 1 / 2 / 351.0% / 16.2% / 4.0%
Level 1 最高 Correct@1CPU / CUDA / OpenCL94.5% / 79.6% / 73.5%
DeepSeek-V4-Pro,CPU Level 2Correct@1 / [email protected]75.3% / 3.2%;GPT 同档 [email protected] 为 15.1%
MNN 3.3.0(176 道 CPU、203 道 OpenCL)最高 [email protected]L1 的 CPU 50.7%、GPU 31.6%;L2 14.9%;L3 5.3%
TensorRT 10.3.0(215/218 道 CUDA)最高 [email protected]L1 43.2%,L2 5.3%,L3 为 0;2 倍阈值下最高 7.4%
69 题,底座均为 GLM-5.3-Flash[email protected],对调优 TVM一次生成 13.0%,Claude Code 26.1%,LEKA 43.5%
同上Correct@1 / Compile@142.0%→100%,60.9%→100%
LEKA 相对 Claude Code 的 GML1 / L2 / L3 / 全体3.4× / 4.7× / 2.9× / 约 3.8×

这里的几何平均把变慢的程序也算进去。Level 3 上,三台设备的最高 [email protected] 都落在 0 到 4% 之间。CPU 正确率高于 GPU,差在线程划分和并行映射。CUDA 的 [email protected] 高于 OpenCL,Level 1 上五个模型都是如此。Gemini-3.7-Flash 在三个后端的 Level 3 正确率都最高。DeepSeek 在 CPU Level 2 的正确率高于 GPT,速度仍然差一截。

生产引擎上,快过 MNN 或 TensorRT 的程序集中在单算子,Level 3 没有候选快过 TensorRT。失败合在全部模型和后端上,内存错误占 34.0%,语法和 API 占 25.4%,数值不符占 18.9%,并行错误占 12.0%。内存错误大多是缓冲区作用域不合法,不是容量不够。

69 题上,LEKA 的 [email protected] 分设备为 CPU 34.8%、CUDA 30.4%、OpenCL 65.2%,Claude Code 为 21.7%、26.1%、30.4%。CUDA 上只多了约 4 个百分点,OpenCL 翻了一倍多。相对 Claude Code 的几何平均,CPU 为 8.60×,CUDA 为 2.46×,OpenCL 为 2.49×。Level 2 的相对增益高于 Level 1,Level 3 回到 2.9×。

RK3588 上的 SqueezeNet 1.1 里,三层是叠上去的。Relax 改成 NHWC,并把 1×1 卷积重写成矩阵乘;TIR 用共享内存分块,相对初始候选从 1.3× 到 1.7×;OpenCL 做寄存器分块,到 3.5×。分母是 LEKA 的起点,不是 TVM。一次生成里的大倍数集中在少数任务:OpenCL 上一个 ConvNeXt 块,Gemini 从 18.0 ms 做到 0.6 ms,相对 TVM 为 30.9×,深度卷积和通道变换被拆开;GPT 融成一个 kernel,只有 0.9×。CPU 反量化矩阵乘相对 MNN 从 39.7 ms 到 2.1 ms,为 19.0×,省下 44 MiB 浮点中间结果。

为什么重要

补边缘算子的人要看两件事:优化能不能换一块板子还在,以及图从单算子长到小模型时速度掉多快。统一 IR 把可复用的决策和某个后端的语法拆开,新硬件主要是补适配器。LEKA 和 Claude Code 的模型和墙钟相同,[email protected] 从 26.1% 到 43.5%,差额来自分层。

这是渐进改进。650 题里快过调优 TVM 的只有 25.5%;69 题全部写对之后,快过的仍不到一半。

局限与存疑

附录列出的后续工作是编译器集成、层与 agent 的配合,以及 NPU 和异构执行。实验只覆盖 LLVM、CUDA、OpenCL。

69 题里每个后端的 Level 3 只有 4 题,2.9× 站不稳。LEKA 的底座是 GLM-5.3-Flash,不是总成绩领先的 GPT-5.6-sol,43.5% 不能和 650 题上的 25.5% 放在一起比。每个后端只绑一个应用域,CPU 更高的正确率里同时有任务差异,和「没有 GPU 线程映射」这一件事。

内存和时延在引言里是并列目标,主表只有编译、正确性和加速比。峰值内存没有系统数字,44 MiB 是个案。单题墙钟最多 155 分钟,还要反复上板,没有和 MetaSchedule 上千次真机试验比过总时间。[email protected] 只区分是否超过 1 倍。两个被完整追踪的 LEKA 程序,相对调优 TVM 只有 1.2×(CUDA,16.2 µs 对 19.8 µs)和 1.6×(CPU,17.0 ms 对 27.5 ms)。跑赢可以很薄。

术语

原文与代码

相关论文

全部论文解读