GPU Kernel Optimization
父级: ai-inference-engines
相关: inferact、radixark
概览
GPU 内核优化是在模型推理期间改进 GPU 硬件上运行的低层计算 kernel 效率的学问。它是 vLLM 和 SGLang 等推理引擎之下的基础层。
GPU 如何运行模型
当调用 model.generate() 时,GPU 执行数百到数千个 kernel —— 小型并行函数,例如:
- GEMM(General Matrix Multiplication)—— 重活担当
- FlashAttention —— 高效 attention 计算
- LayerNorm —— 归一化
- 激活函数(ReLU、GELU、SiGLU)
瓶颈洞察: GPU 很少受计算约束 —— 它们通常受 内存带宽约束。核心优化挑战是最小化 HBM(High Bandwidth Memory)与计算单元之间的数据移动。
关键优化技术
1. 内存访问优化
- Kernel fusion: 把多个操作合并到单个 kernel 以减少 HBM 读写
- Triton 编译器: 用类 Python 语法写融合 kernel,编译成优化的 CUDA
- FlashAttention: IO 感知的 attention,把 HBM 流量减少约 10x
2. 量化 Kernel
| 格式 | 精度 | 相对 FP16 加速 | 质量影响 |
|---|---|---|---|
| INT8 | 8 位 | ~2x | 极小 |
| INT4 | 4 位 | ~4x | 中等 |
| FP8(Hopper) | 8 位浮点 | ~2-3x | 非常低 |
3. 张量并行 Kernel
- 把模型权重拆分到多个 GPU
- NVLink/NVSwitch 用于高带宽 GPU 间通信
- 对装不进单 GPU 的 70B+ 模型至关重要
4. FlashDecoding++(无问芯穹)
针对 decode 阶段的新颖 kernel 级优化:
- vs Hugging Face:4.86x 加速(A100)
- vs FlashDecoding:1.37x 加速
- vs vLLM:decode 阶段 1.24x 加速
推理引擎对比(kernel 级)
| 引擎 | 量化 | Fusion | 多 GPU | 自定义 Kernel |
|---|---|---|---|---|
| vLLM | AWQ、GPTQ、GGML | 是 | TP、PP | PagedAttention |
| SGLang | AWQ、GPTQ | 是 | TP、PP、EP | RadixAttention |
| LMDeploy | INT4、INT8(TurboMind) | 是(C++) | TP | TurboMind 引擎 |
| TensorRT-LLM | FP8、INT8 | 是 | TP、PP | 高度优化 |
| Inferact | (使用 vLLM) | 是 | 是 | vLLM kernel 栈 |
| RadixArk | (使用 SGLang) | 是 | 是 | SGLang kernel 栈 |
为什么重要
- H100 集群成本:每 GPU ~$3-5/小时
- Kernel 优化直接 = 每 token 推理成本更低
- 对 1B+ token/天部署:2x kernel 加速 = 每年节省数百万
来源
- vLLM 论文(PagedAttention)
- FlashAttention 论文(Dao et al.)
- 无问芯穹 FlashDecoding++ 技术披露