详细内容或原文请订阅后点击阅览
克服可变形状张量的隐藏性能陷阱:PyTorch 中的高效数据采样
PyTorch 模型性能分析和优化 — 第 11 部分克服可变形状张量的隐藏性能陷阱:PyTorch 中的高效数据采样一文首先出现在 Towards Data Science 上。
来源:走向数据科学是有关分析和优化 PyTorch 模型主题的系列文章的一部分。在整个系列中,我们提倡在 AI 模型开发中使用 PyTorch Profiler,并演示了性能优化对运行 AI/ML 工作负载的速度和成本的潜在影响。我们看到的一种常见现象是看似无辜的代码如何阻碍运行时性能。在这篇文章中,我们探讨了与简单使用可变形状张量相关的一些惩罚——张量的形状取决于先前的计算和/或输入。虽然并不适用于所有情况,但有时可以避免使用可变形状张量 - 尽管这可能会以额外的计算和/或内存为代价。我们将在 PyTorch 中的数据采样玩具实现上展示这些替代方案的权衡。
系列帖子 PyTorch 分析器可变形状张量的三个缺点
我们通过提出使用可变形状张量的三个缺点来激发讨论:
主机设备同步事件
在理想的场景中,CPU 和 GPU 能够以异步方式并行运行,CPU 不断向 GPU 提供输入样本,分配所需的 GPU 内存,加载 GPU 计算内核,GPU 使用分配的内存在提供的输入上执行加载的内核。动态形状张量的存在破坏了这种并行性。为了分配适当数量的内存,CPU 必须等待 GPU 报告张量的形状,然后 GPU 必须等待 CPU 分配内存并继续加载内核。此同步事件的开销可能会导致 GPU 利用率下降并降低运行时性能。
第三部分 交叉熵损失 torch.nonzero 火炬.unique