首页 > 自考资讯 > 高考百科

一行代码,炼丹2倍速!PyTorch 2.0惊喜问世,LeCun激情转发,pytorch训练代码

小条 2024-10-01

编辑:我很困。

【新致远介绍】仅需一行代码,即可使用PyTorch2.0在训练Transformer模型时实现1.5-2倍的加速。

12月2日,PyTorch 2.0正式发布。

此次更新不仅将PyTorch 的性能推向新的高度,还增加了对动态形状和分布的支持。

此外,2.0 系列将PyTorch 的一些代码从C++ 移回到Python。

49300d1724dd4e399694c51b72631af8~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319497&x-signature=3Ro9leFGoZ3PGgDF%2BLQ06gyIKSc%3D 目前,PyTorch 2.0 仍处于测试阶段,第一个稳定版本预计将于2023 年3 月上旬推出。

45a3a66e94514376b706839be23f8aba~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319497&x-signature=%2BKiYEk7SvA8xUm8Io6qwANjRzpg%3DPyTorch 2.x:更快、更像Python!

过去几年,PyTorch 从1.0 不断创新迭代,一直到最近的1.13,过渡到新成立的PyTorch 基金会,成为Linux 基金会的一部分。

当前版本的PyTorch 面临的挑战是,Eager 模式难以跟上不断增加的GPU 带宽和更疯狂的模型架构。

PyTorch 2.0 对PyTorch 在编译器级别的运行方式带来了根本性的改变和改进。

fc354a56f21a444bb319317d5297f649~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319497&x-signature=ri6UgEQtcydwaIqk%2FeDqnpRT7LA%3D 如您所知,PyTorch 中的(Py) 来自开源Python 编程语言,该语言在数据科学中广泛使用。

然而,PyTorch 的代码并不完全是用Python 编写的;其中一些代码是由C++ 编写的。

然而,在未来的2.x 系列中,PyTorch 项目团队计划将与torch.nn 相关的代码移回Python。

此外,PyTorch 2.0 是一个完整的附加(和可选)功能,因此2.0 是100% 向后兼容。

这意味着您编写代码库、API 和模型的方式相同。

更多的技术支持

TorchDynamo 使用Python 框架评估挂钩来安全地捕获PyTorch 程序。这是团队近五年来在图捕获方面的一项重大创新。

AOTAutograd 覆盖PyTorch 的autograd 引擎作为跟踪自动差异以生成前瞻回溯。

PrimTorch 将大约2000 多个PyTorch 运算符汇总为一组大约250 个原始运算符,开发人员可以根据这些运算符构建完整的PyTorch 后端。创建PyTorch 功能和后端的障碍显着降低。

TorchInductor 是一种深度学习编译器,可为多个加速器和后端生成快速代码。 Nvidia 的GPU 使用OpenAI Triton 作为关键构建块。

值得注意的是,TorchDynamo、AOTAutograd、PrimTorch 和TorchInductor 都是用Python 编写的,并且支持动态形状。

更快的训练速度

通过引入新的编译模式“torch.compile”,PyTorch 2.0 允许您仅用一行代码即可加快模型训练速度。

这里不需要任何技巧。只需运行torch.compile() 即可完成。

opt_module=torch.compile(module) 为了验证这些技术,团队测试了图像分类、对象检测和图像生成等任务,以及语言建模、问答、序列分类、推荐系统和强化学习等任务。其中,这些基准可以分为三类。

来自HuggingFace Transformers 的46 个模型来自TIMM 的61 个模型:Ross Wightman 提供的最先进的PyTorch 图像模型集合来自TorchBench 的56 个模型:来自github 的一组流行代码库这163 个模型的测试结果表明跨视觉的NLP打开。与其他领域的源模型相比,训练速度提高了38% 至76%。

e18dbf0d9db7484096cde31a0d31b128~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319497&x-signature=GBkB3GFxt3y6bpBUrBjqKuDk0FU%3D在NVIDIA A100 GPU上的比较

此外,该团队还对几种流行的开源PyTorch 模型进行了基准测试,并实现了30% 至2 倍的显着加速。

“只需一行代码,PyTorch 2.0 在训练Transformers 模型时即可实现1.5 倍到2.0 倍的加速”,开发人员Sylvain Gugger 说道。

技术概述

PyTorch的编译器可以分为三个部分。

图检索减少了图编译其中,图检索是构建PyTorch 编译器时更困难的任务。

ffd2da96bcb74c99b4f64fc8cc70c002~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319497&x-signature=QkJO7ESCoejhA0VaeC1%2BVOzjDFY%3D

TorchDynamo

该团队于今年早些时候开始开发TorchDynamo。此方法使用PEP-0523 中引入的CPython 功能(称为框架评估API)。

为了实现这一目标,团队采用了数据驱动的方法,并使用了7000 多个用PyTorch 编写的Github 项目作为验证集来验证TorchDynamo 在图形捕获方面的有效性。

结果表明,TorchDynamo 可以在99% 的时间内准确、安全地执行图形捕获,而开销可以忽略不计。

TorchInductor

对于PyTorch 2.0 中的新编译器后端,团队从用户创建高性能自定义内核的方式中获得灵感:Triton 语言的使用不断增加。

TorchInductor 使用Pythonic 中定义的每循环级别IR 自动将PyTorch 模型映射到GPU 上生成的Triton 代码和CPU 上的C++/OpenMP。

TorchInductor的核心循环级IR仅包含约50个运算符,并且是用Python实现的,因此易于扩展。

AOTAutograd

为了加快训练速度,您不仅需要捕获用户级代码,还需要捕获反向传播。

AOTAutograd 可以使用PyTorch 的torch_dispatch 扩展机制来跟踪Autograd 引擎,以“提前”捕获反向传播,并使用TorchInductor 来加速前向和反向通道。

PrimTorch

PyTorch 有超过1,200 个运算符,如果考虑每个运算符的各种重载,则超过2,000 个。因此,创建后端或跨域功能成为一项耗时的任务。

对于PrimTorch 项目,团队定义了两组更小、更稳定的操作员。

Prim 操作有大约250 个编译器友好的操作符。它的级别足够低,因此只需将它们融合在一起即可获得良好的性能。 ATen 运营中心拥有大约750 名适合原始输出的典型操作员。这些适用于已经集成或未在ATen 级别编译的后端,并恢复较低级别操作符集(例如Prim 操作)的性能。f3a91c15d4b8442fbd51a6206c2e1057~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319497&x-signature=9k%2BakXB9ov%2B2AxXIGLx3URIXgws%3D

动态形状

在探索支持PyTorch 代码的多功能性所需的条件时,一个关键要求是支持动态形状并在每次形状更改时进行重新编译,而是允许模型接受不同大小的张量。

当不支持动态形状时,常见的解决方法是填充到最接近的2 次方。然而,从下图中可以看出,性能开销很大,而且编译时间也明显更长。

现在,由于支持动态形状,PyTorch 2.0 的性能比Eager 高出40%。

deac1dae09ef4217bb3255e22eda0e18~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319497&x-signature=N9GdD5dR%2BprHJ62Qtl2kQMG2%2FUw%3D 最后,在PyTorch 2.x 路线图中,团队希望在性能和可扩展性方面进一步加速编译模型的开发。

2e3cf41828734a51b936b970655b4126~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319497&x-signature=t67WsJi5FpqpjCi6x7nFn4vmoc0%3D 参考文献:

https://pytorch.org/get-started/pytorch-2.0/

版权声明:本文转载于网络,版权归作者所有。如有侵权,请联系本站编辑删除。

猜你喜欢