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

PyTorch 2.0正式版发布!一行代码提速2倍,100%向后兼容,pytorch0.3.0

小条 2024-10-01

编辑:布丽塔·桃子

【新智元导读】PyTorch 2.0正式发布。

PyTorch 2.0 正式版终于来了!

33cf4116885f48c0be77d30f71f5ab28~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319482&x-signature=wea42%2FFjXp5MEkkkq%2Bj1AAaroVU%3D 去年12月,PyTorch基金会在PyTorch Conference 2022上发布了PyTorch 2.0的第一个预览版本。

2.0 与之前的1.0 版本相比有重大变化。 PyTorch 2.0 最大的改进是torch.compile。

新的编译器可以比PyTorch 1.0 的默认“eager 模式”更快地动态生成代码,从而进一步提高PyTorch 的性能。

73ae6901ada3458db1d49c7dad450f19~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319482&x-signature=vDK9WA39MXzcqL3UcMQjAuvuSIQ%3D 除了2.0 之外,PyTorch 域库还发布了一系列测试版更新,包括树中的库以及TorchAudio、TorchVision 和TorchText 等独立库。 TorchX的更新也将同时发布,提供社区支持模式。

d242b9d93d764e06b05397ac15c69f90~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319482&x-signature=nbFCe64ywXw309%2F7HNI6YiGCmVk%3D 亮点总结

- torch.compile 是PyTorch 2.0 中的主要API,它包装并返回编译后的模型。 torch.compile 是一个完全附加(和可选)功能,因此2.0 版本是100% 向后兼容。

-torch.compile 作为底层技术,TorchInductor 由Nvidia 和AMD GPU 提供支持,依靠OpenAI Triton 深度学习编译器生成高性能代码并隐藏底层硬件细节。 OpenAI Triton 生成的内核实现的性能可与手写内核和专门的CUDA 库(例如cublas)相媲美。

- Accelerated Transformers 使用自定义内核架构实现规模化点积出勤(SPDA),并为训练和推理引入高性能支持。该API与torch.compile()集成,模型开发人员还可以通过调用新的scaled_dot_product_attention()运算符直接使用缩放点积注意力内核。

- Metal Performance Shaders (MPS) 后端在Mac 平台上提供GPU 加速的PyTorch 训练,增加了对前60 个最常用操作的支持,并涵盖了300 多个算子。

-Amazon AWS 在基于AWS Graviton3 的C7g 实例上优化PyTorch CPU 推理。与之前的版本相比,PyTorch 2.0 提高了Graviton 推理性能,包括对Resnet50 和Bert 的改进。

- TensorParallel、DTensor、2D Parallel、TorchDynamo、AOTAutograd、PrimTorch 和TorchInductor 的新原型设计功能和技术。

74218da054f344a49240266f79bf2459~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319482&x-signature=JDFcOaLK1Hfwv%2Bd5FD%2Bu2CJElN4%3D 编译,还是编译!

PyTorch 2.0 中最新的编译器技术包括TorchDynamo、AOTAutograd、PrimTorch 和TorchInductor。所有这些都是用Python而不是C++开发的(Python是兼容的)。

它还支持动态形状,允许您发送不同大小的矢量而无需重新编译。它灵活且易于学习。

TorchDynamo 可以使用Python 框架评估挂钩安全地检索PyTorch 程序。这项重大创新概括了PyTorch 过去五年的安全图形捕获研究和开发工作。

AOTAutograd 重载PyTorch autograd 引擎作为跟踪自动比较,以生成高级向后跟踪。

PrimTorch 将2000 多个PyTorch 运算符汇总为大约250 个原始运算符的封闭集,允许开发人员为这些运算符构建完整的PyTorch 后端。 PrimTorch 极大地简化了创建PyTorch 函数或后端的过程。

4.焊枪电感

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

PyTorch 基金会表示,2.0 版本促进了“从C++ 回归Python”,并补充说这是PyTorch 的一个重要新方向。

“我们从一开始就知道急切执行的性能限制,我们开始了第一个研究项目,并为PyTorch 开发了一个编译器。您需要能够快速运行PyTorch 程序,而不牺牲PyTorch 体验,同时保持灵活性。和易用性使开发人员可以在不同的探索阶段使用动态模型和程序。”

当然,使用动态实时代码生成器的非编译“eager 模式”在2.0 中仍然可用。开发者可以通过使用porch.compile 命令添加一行代码来快速升级到编译模式。

与1.0 相比,用户发现2.0 的编译时间缩短了43%。

该数据来自PyTorch 基金会在Nvidia A100 GPU 上使用PyTorch 2.0 对163 个开源模型进行的基准测试,用于图像分类、目标检测、图像生成和各种NLP 任务,包括以下任务:

这些基准测试分为三类:HuggingFace Transformers、TIMM 和TorchBench。

1d6610890c0b4804b009b91ce80be72c~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319482&x-signature=zqm%2FJFcikbJBfdherfU7%2FRz1Cso%3DNVIDIA A100 GPU eager 模式torch.compile 各种型号的性能加速

据PyTorch 基金会称,新编译器在使用Float32 精度模式时运行速度提高了21%,在使用自动混合精度(AMP) 模式时运行速度提高了51%。

在这163 个模型中,torch.compile 在93% 的模型上成功运行。

“通过PyTorch 2.x 路线图,我们希望在性能和可扩展性方面进一步发展编译模型。有些工作还没有开始,有些工作将需要带宽不足。为什么没有实现?

b923ca57cbdf447d81ec636560e23a3a~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319482&x-signature=VJgt3Oqu9WtZcVSheroJsS0n9nk%3D 培训LLM 现在速度提高了2 倍

此外,性能是PyTorch 2.0 的另一个重点,开发人员一直在大力推动这一点。

事实上,新功能的亮点之一是Accelerated Transformers,以前称为Better Transformers。

此外,PyTorch 2.0 正式版还包含新的高性能PyTorch TransformAPI 实现。

PyTorch 项目的目标之一是让训练和部署最先进的Transformer 模型变得更容易、更快捷。

Transformer 是帮助实现现代生成人工智能的基础技术,包括GPT-3 和GPT-4 等OpenAI 模型。

7acbb5ab30ed4187b4b9288c24543032~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319482&x-signature=HdkHfk8DlcJt9UDE%2F76OYb5G28U%3D PyTorch 2.0 Accelerated Transformers 使用自定义内核架构方法(也称为缩放点积注意力SDPA)为训练和推理提供高性能支持。

由于可以支持Transformer 的硬件类型较多,PyTorch 2.0 可以支持多个SDPA 自定义内核。更进一步,PyTorch 集成了自定义内核选择逻辑,可为给定模型和硬件类型选择性能最佳的内核。

加速的影响是显着的,因为开发人员将能够比之前的PyTorch 迭代更快地训练模型。

新版本为训练和推理提供了高性能支持,使用定制的内核架构来处理规模化点积出勤(SPDA),并扩展了推理的快速路径架构。

与FastPath 架构类似,自定义内核完全集成到PyTorch Transformer API 中。因此,使用原生Transformer 和MultiHeadtention API,用户可以:

- 速度显着提高。

-支持更多用例,包括使用交叉注意力的模型、Transformer 解码器和经过训练的模型。

- 固定和可变序列长度变形器编码器和自注意力机制的快速路径推理的持续用例。

支持多个SDPA 自定义内核以利用不同的硬件模型和Transformer 用例,并通过自定义内核选择逻辑为给定模型和硬件类型选择最高性能的内核。

除了现有的Transformer API 之外,开发人员还可以通过调用新的scaled_dot_product_attention() 运算符来直接使用缩放点积注意力内核,从而加速PyTorch 2 Transformer 与torch.compile() 的集成。

要在使用模型时进一步加快PT2 编译(用于推理或训练),请使用model=torch.compile(model) 预处理模型。

我们目前正在使用自定义内核和torch.compile() 的组合,以在使用Transformer 模型(特别是加速的PyTorch 2 Transformer)训练大型语言模型时实现显着的加速。

5e9b567c20664f8e943cd2291aba9ea3~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1728319482&x-signature=CTz8sjWyKZ%2BW%2FoIUUu1lAz8ly90%3D 使用自定义内核和torch.compile 显着加快大型语言模型的训练速度

HuggingFace Transformers 的首席维护者Sylvain Gugger 在PyTorch 项目发布的一份声明中写道:“只需一行代码,PyTorch 2.0 就可以将Transformers 模型训练提高1.5 倍,这是最大的。”自推出以来做的有趣的事情!

PyTorch 和Google 的TensorFlow 是两个最流行的深度学习框架。全球数以千计的教育机构正在使用PyTorch 开发深度学习应用程序,并且使用量正在不断增长。

Lightning AI 首席技术官、PyTorch Lightning 主要维护者之一Luca Antiga 表示,PyTorch 2.0 的发布将有助于加速深度学习和人工智能应用的开发:

“PyTorch 2.0 代表了深度学习框架的未来。无需用户交互即可捕获PyTorch 程序的能力、即用型程序生成以及令人难以置信的设备加速,使AI 开发人员能够开启新的可能性维度。

参考:

https://pytorch.org/blog/pytorch-2.0-release/

https://venturebeat.com/ai/pytorch-2-0-brings-new-fire-to-open-source-machine-learning/

https://www.datanami.com/2023/03/15/new-pytorch-2-0-compiler-promises-big-speedup-for-ai-developers/

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

猜你喜欢