AI_Open_Day_生成式推荐系统--_HSTU模块优化(英)_48页_16mb
报告摘要
凯盛_Guo, Jerry Chen, Bin Chai, NVIDIA Developer Technology Team
针对注意力开发和优化使用 Cutlass/CuTe 的报告进行总结,重点关注硬件效率和内存管理优化。
1. 概述
- NVIDIA 的 DeepTech 工程师讨论了基于 Cutlass 和 CuTe 库的注意力机制优化,应用于大型模型如 Transformer。此开发重点在于实现高效、低内存消耗的注意力计算,特别是在 AI 和 HPC 场景下。经常涉及矩阵乘法、归一化以及激活函数以提高计算密度和处理容量。
- 文献附带大量代码公式和实验证据,突出了注意力部分中不同参数配置下的优化策略。
2. 核计算数学基础
- 归一化层(LayerNorm)和 SiLU(或其他激活函数)用于高级注意力计算。
- 注意力计算公式包括:
- 𝒀 𝑿 = 𝒇 (·),用以建模查询-键交互。
- 归一化偏移: 𝑁𝕠𝑟𝑚(𝑨 𝑿 𝑽 𝑿 ) ⊙ 𝑼(𝑿),帮助稳定数值和提升模型收敛。
- 使用带有偏移变量的稳定Λ in NORM部分,避免缩放溢出,并结合TMA(张量矩阵相乘)优化内存读取和计算。
- 运用向量化操作如 ⊙(坐标剩余操作)来促进内存共结,降低有效体素访问读写成本。
3. 张量形状、偏移和步长管理
- 张量如 Q、K、V 被设计为特定形状和步长,以优化内存布局和访问模式。
- 常见操作包括张量切片、重排(如 “Rab” 引例中:row_offset 和 stride input偏移用于三维 shape:[batch, seq_len, heads, dim),提升迭代性能。
- 使用 make_shape 和 tes_coord 来缩减张量尺寸和索引,有助于处理动态变化的实际序列长度。
4. 存储器使用和优化
- 包括内存容量计算,例如用于检查某维大小参数是否有效防止 OOM 错误。
- 针对内存操作技术强调:
- 使用 “Rab” 风格偏好优化:coalesced memory(共同内存访问) 使用半精度或 int-to-half 技术减少带宽需求。
- 缓存填充:通过伸缩步长来基于 word level 提供对齐访问。
- 鱼骨图例解释不同场景头大小对 FP16 and FP32 的紧密依赖,例如在小头模型时可用 half 提升4倍效率,在大头模型则需 FP32。
- 示例参数如:
- 最佳状态码 eager:
- 步长 adapted: 𝑏𝑎𝑡𝑐ℎ_𝑠𝑖𝑧𝑒 = 128, seq_len = 1000, heads = 8, 计算体现異なる配置下的内存占用差异。
- 最佳状态码 eager:
5. 其核心操作
- “Rab” 可能为一个概念或算法名,用于 matrix multiplication context,负责实际 kernel computations while “dRab” 是其 attention 子程序 for accumulation。
- 分为 fp16 and fp32 两个 case:
- FP16 示例使用 AtomicAdd 操作,结合 withHalf 类型 or _nv_bfloat162 实现高效累加。
- FP32 用于大模型的 reductions,使用 float 类型避免精度损失并保持 memory de-chunked 松散访问方式。
- 优化关键技术:
- 砌零优化(zeroing-out) 如 a 零容量计算停止,有效节约循环体占用。
- 砖化操作(TiledCopy),支持细粒度 memory transfer 并减少 warp 级原子间依赖。
- 矩阵变换,如运用 GSA NVIDIA 的一贯优化方法:实现固定形状张量计算。
6. 结论
- 四方面(归一化、形状偏移、内存优化、矩阵运算)结合,建议使用 Cutlass/CuTe 框架内_KERNEL 来最大化设备并行能力。
- 实用性验证: 在 16 头注意力模型中,通过模型调整可降低高达 50% 的设备内存使用,同时保持 computation speed。
- 建议针对场景类型(如模型规模、精度类型)灵活用半精度或全精度容忍窗口,实现平衡开发期安全与model推论吞吐量的目标。
该文档为 NVIDIA DevTech 团队内部技术探讨,具体内容应参考倍适用于 HPC/AI 应用的 CUDA优化实践。
展开完整摘要
试读结束,高清完整版pdf/doc/ppt,请点下载