PyTorch 中的性能分析(第3部分):注意力就是你分析的一切
PyTorch
NVIDIA
本文对 PyTorch 中的注意力机制进行了性能分析,比较了朴素注意力、原地优化和缩放点积注意力(SDPA)后端。分析显示,由于张量核心利用率不足、掩码重建以及安全的 softmax 开销,SDPA 的数学后端比朴素注意力更慢。
PyTorch性能分析系列的第三篇文章聚焦注意力机制。文章从一个基础注意力模块开始(矩阵乘法、缩放、掩码、softmax、矩阵乘法),其追踪显示每个前向传播包含5个GPU内核。将非原地操作masked_fill替换为原地操作masked_fill_,消除了一个内存复制内核,从而节省了时间和内存。接下来介绍了缩放点积注意力(SDPA);其数学后端虽然更安全(处理NaN情况)且更精确(FP32),但比基础注意力慢了3.7倍,因为它启动了20个GPU内核,未使用Tensor Core(使用sgemm而非bf16 Tensor Core矩阵乘法),每次调用重建因果掩码,并使用_safe_softmax。文章指出,SDPA通常会默认自动选择最快的后端。
来源: Hugging Face blog —
原文
