News Hacker|极客洞察

21 64 天前 github.com
🤔AutoKernel:GPU kernel 自动搜索——基准可疑与在 llama.cpp 上的高回报机会
难道要对每张显卡都做一次 AutoKernel 搜索?

🎯 讨论背景

AutoKernel 是一种把自动搜索/调优方法用于 GPU kernels 的尝试,作者把范围限定在 Triton(一种用于编写高效 GPU kernels 的框架)和特定类型的 kernel,以保持实现简单。讨论基于与现有高性能实现的对比需求——例如 cuBLAS(NVIDIA 的 BLAS GPU 库)、CUTLASS(NVIDIA 的 CUDA GEMM 模板库)和 TVM 的 Ansor(TVM 的自动调度搜索工具),以及在大模型与推理代码库(如 llama.cpp)中因量化格式和硬件多样性出现的性能差异。评论还提到行业先例 AlphaEvolve(DeepMind 的自动化 kernel 优化项目),表明大厂已在内部用类似方法提升训练速度;因此社区工具的价值在于把自动化调优普及到更多硬件与开源项目。讨论同时强调基准设计、CPU 开销和峰值利用率等测量细节对结论的影响。

📌 讨论焦点

项目定位与基准质疑

评论者普遍赞赏把项目限定在 Triton 和特定 kernel 上的做法,认为范围有限能保持实现简单且高效。与此同时,多条评论对展示的基准数据表示怀疑:进度图看似对 4096×4096×4096 的 fp16 matmul 做测试,却宣称比 cuBLAS 提升 1.31×,且报告为 187 TFLOPS,仅为峰值的 18.9%,与 cuBLAS 常见的高峰值利用率结论不符。怀疑点包括可能的 CPU 开销、测量方法或基准设置不当,评论强调“benchmarking is hard”。总体态度是支持思路但要求更严格、透明的基准对比和指标说明。

[来源1] [来源2]

高收益目标:在 llama.cpp 上做 per-GPU 优化

多位评论者指出把 AutoKernel 应用于 llama.cpp(一个包含多种量化 kernel 的开源 LLM 推理实现)能带来最大收益。llama.cpp 拥有为不同量化格式(如 Q4_K_M、Q5_K_S、Q8_0 等)手工调优的数十个 CUDA kernels,不同显卡(例如 RTX 3090 与 5070 Ti)上同一量化格式性能差异很大。自动化按 GPU 特性搜索最优 kernel 可以显著缩小这些差异、提升多数用户的性能,因此有人建议 AutoKernel 团队考虑作为贡献者进入该代码库开展按设备优化。

[来源1] [来源2]

与现有库和自动调度工具的比较与测量方法论

评论呼吁把 AutoKernel 的结果与成熟实现做严格对比:例如 cuBLAS(NVIDIA 的 BLAS GPU 库)、CUTLASS(NVIDIA 的 CUDA GEMM 模板库)以及 TVM 的 Ansor(TVM 的自动调度/搜索工具)。有人指出对 4k×4k×4k fp16 GEMM 的测试显示 CUTLASS 约 3× 更快,另有人直接问是否与 TVM Ansor 做过横向比较,暗示需要比对调度策略、数据布局与 CPU 开销等变量。结论是需要更完整的基准套件和多维度指标(而非单一 TFLOPS 数字),以便证明 AutoKernel 相对优势的普适性。

[来源1] [来源2] [来源3]

跨平台与语言生态的扩展潜力

讨论扩展到非 NVIDIA 平台与语言生态的可行性——有人已在尝试把 autoresearch 移植到 Apple Silicon(苹果 M 系芯片),并开源了 autoresearch-everywhere 项目用于探索。评论指出不同硬件架构(如 Apple Silicon 与各代 NVIDIA GPU)在 ISA、内存层级与并行模型上差异显著,自动搜索工具要为每个平台定制策略。还有人提出将这些自动调优集成到开源语言或运行时(如 Swift、Rust)的数值例程里,可以把收益普及到更广泛用户,但这需要长期工程投入与稳定接口设计。

[来源1] [来源2]

行业先例:大公司已在做类似自动化优化

有评论提醒这并非全新想法:DeepMind/Google 的 AlphaEvolve 项目早在 2025 年就通过自动化划分矩阵乘法子问题把关键 kernel 加速约 23%,并使 Gemini 的训练时间减少约 1%。该事例被用来说明大厂已把自动化 kernel 优化用于产品化,社区级 AutoKernel 是把类似技术带入开源与多硬件场景的延续。评论认为随着训练/推理方法越来越依赖于 RL 与自动化搜索,推理上的小幅加速会反向促进训练效率,因而这一方向会越来越受重视。

[来源1]

📚 术语解释

llama.cpp: llama.cpp(一个开源的轻量级 LLM 推理实现,包含多种量化和手工调优的 CUDA kernels,常用于本地/多硬件的推理测试)

fp16: fp16(16 位半精度浮点数,常用于神经网络推理和大型矩阵乘法以降低内存带宽和计算量)

GEMM: GEMM(General Matrix Multiply,通用矩阵乘法,是线性代数与深度学习中最核心的性能热点之一)

CUDA kernel: CUDA kernel(在 NVIDIA GPU 上并行执行的计算内核,用于实现高性能矩阵乘法、卷积等操作,需针对设备架构手工或自动调优)