正文
更严重的是,这些 kernel 启动与收尾的成本加起来,并不会被 CUDA Graph 或 PDL(Programmatic Dependent Launch)等机制充分隐藏,反而在短时任务中被放大。
换句话说,
GPU 花了大量时间“等着干活”,而不是“在干活”。
Hazy 团队的研究也正是围绕着这个问题展开。
先说实验结果,Megakernel在 H100 上的推理延迟压缩至不足 1 毫秒,显存带宽利用率高达 78%,相较于 vLLM 提升了 2.5 倍、相较 SGLang 提升 1.5 倍;而在更先进的 B200 平台上,延迟进一步降低至 600~680 微秒,逼近理论极限。
从一次完整推理的时间分布来看,250 微秒用于存储激活、等待一致性与数据加载,200 微秒用于 RMSNorm 与 matvec(其中 matvec 占比达 95%),权重加载仅需 30 微秒,流水机制表现稳定。warp 间同步与 barrier 带来 40 微秒的延迟,其余如 setup、参数传递与页状态标记等杂项开销合计约 80 微秒。
整体来看,在精心调度下,Hazy 团队的 Megakernel 几乎已将当前硬件性能压榨至极限。
而能够得到以上效果,其实都归功于 Hazy 团队提出的一个激进但有效的设计思路:
将整个前向传播过程整合为一个单一 CUDA kernel,也就是所谓的 Megakernel。
实验中,他们基于已有 ThunderMLA 架构,开发了一个 GPU 上运行的轻量“指令解释器”系统。该系统为每个 Streaming Multiprocessor(SM)预先分配一段“执行计划”,其中包含多条按顺序排列的指令,每条指令代表 Transformer 模型中的一个结构单元。
这些指令包括:
-
融合 RMSNorm、QKV projection、RoPE 的复合指令;
-
attention 矩阵乘与缩减计算(支持长序列 GQA);
-
O-projection 与 residual 相加;