我们非常高兴地宣布 PyTorch® 2.3(发布说明)的发布!PyTorch 2.3 支持在 torch.compile 中使用用户定义的 Triton 内核,使用户能够在不经历性能下降或图断裂的情况下,从 eager 迁移自己的 Triton 内核。张量并行性通过使用原生 PyTorch 函数改善了训练大型语言模型的经验,这在 100B 参数模型的训练运行中得到了验证。此外,半结构化稀疏性将半结构化稀疏性作为张量子类实现,观察到与密集矩阵乘法相比,速度提高了高达 1.6 倍。
本次发布自 PyTorch 2.2 以来共有 3393 个提交和 426 位贡献者。我们衷心感谢我们忠诚的社区成员的贡献。一如既往,我们鼓励大家尝试这些新功能,并在我们改进 2.3 版本时报告任何问题。有关如何开始使用 PyTorch 2 系列的信息,请参阅我们的入门页面。
测试版 | 原型 | 性能提升 |
torch.compile 中的用户定义 Triton 内核 | torch.export 添加了指定 dynamic_shapes 的新 API | 仅有权量化引入到电感 CPU 后端 |
PyTorch 分布式中的张量并行 | 异步检查点生成 | |
支持半结构化稀疏性 |
点击此处查看所有公共功能提交的完整列表。
测试功能
[Beta] 支持在 torch.compile 中使用用户定义的 Triton 内核
允许执行包含 triton 内核的 PyTorch 代码,并使用 torch.compile 以原生方式运行。这使用户能够在不遇到性能下降或图断开的情况下,将包含 triton 内核的代码从 eager PyTorch 迁移到 torch.compile。原生支持还为 Torch Inductor 预编译用户定义的 Triton 内核以及更好地组织围绕 Triton 内核的代码提供了机会,从而实现进一步的优化。
您可以在本教程中找到有关如何在 torch.compile 中使用用户定义的 Triton 内核的更多信息。
[Beta] 张量并行引入了更高效的训练方法 LLMs
张量并行 API 促进了跨 GPU/主机之间的各种张量操作,并与 FSDP 集成以实现 2D 并行(设备上的张量并行+主机上的数据并行)。它还提供了一个低级 API 来构建高级张量并行 API。该 API 已验证支持训练超过 1000 亿参数的 Transformer 模型。
您可以在本教程中找到有关如何在您的流程中利用这些信息的更多信息。
[Beta] 半结构化稀疏性为用户提供了一种利用加速的稀疏推理和内存节省的方法
torch.sparse.SparseSemiStructuredTensor 实现了半结构化稀疏性作为 Tensor 子类,观察到与密集矩阵乘法相比,速度提升了高达 1.6 倍。
尤其是增加了:
- 支持量化可组合性(混合数据类型,去量化融合)
- 更新了 cuSPARSELt 和 CUTLASS 内核
- torch.compile 支持功能
您可以在以下链接中找到更多关于如何利用半结构化稀疏性的信息。
原型功能
[原型] torch.export 添加了新的 API 以指定 dynamic_shapes
现在您可以使用 torch.export.Dim 更好地表示动态形状,通过允许开发者指定范围(最小和最大值),这些范围可以在不同输入维度之间重复使用,这些维度被限制为相等。
想要了解更多关于 torch.export.Dim 的信息,以及如何用它来表达更有趣的关系(例如线性算术表达式),请查看此教程。
[原型] 异步检查点生成
异步检查点生成允许用户在生成检查点的同时继续训练循环,本质上减少了检查点的成本。
您可以通过此示例了解如何在您的流程中利用它。
性能提升
[原型] 仅权重量化的引入到电感 CPU 后端
PyTorch 2.3 增强了 torch inductor CPU 后端的LLM推理性能。项目 gpt-fast 提供了一个简单高效的 PyTorch 原生加速,用于 transformer 文本生成 torch.compile。在 2.3 之前仅支持 CUDA 设备,此功能通过提供针对 int4 和 int8 权重仅量化的线性化高度优化的内核,实现了 CPU 的对应功能。
如需更多信息/如何使用此功能,请参阅 gpt-fast 的 README。