中等CUDACUDA算子优化面试高频腾讯
算子融合(Kernel Fusion)为什么能提速?举几个 LLM 中的例子。
9 0 0
参考答案
**为什么提速**:每次启动 kernel 都要把中间结果写回 global memory(HBM),下一个 kernel 再读回来。对 memory-bound 的操作,这些 HBM 往返是主要开销。算子融合把多个连续操作合并到一个 kernel 里,中间结果留在寄存器/shared memory,不落 HBM,从而: - 减少 HBM 读写(主要收益)。 - 减少 kernel 启动开销。 - 提高数据局部性。 **LLM 中的融合例子**: 1. **FlashAttention**:把 QKᵀ、softmax、×V 融合成一个 kernel,避免物化 n×n 注意力矩阵到 HBM——最典型的融合优化。 2. **LayerNorm/RMSNorm 融合**:把归一化的均值/方差计算、缩放、加偏置融合,避免多次读写激活。常再与相邻的线性层或残差相加融合。 3. **激活函数融合**:如 GEMM + bias + GeLU/SiLU 融合成一个 kernel(fused MLP)。 4. **RoPE 融合**:把旋转位置编码融进 attention 的 QK 计算。 5. **量化/反量化融合**:把反量化和矩阵乘融合,避免单独写出反量化后的权重。 6. **Add + Norm(残差 + 归一化)融合**。 **工具**:手写 CUDA、Triton(易写融合 kernel)、torch.compile/Inductor 自动融合、TensorRT 的图优化。
讨论区(0)
还没有评论,来做第一个发言的人吧