PyTorch 2.0 发布,一行代码将训练提速 76%!

PyTorch 2.0 发布,一行代码将训练提速 76%!
文章图片
在PyTorchConference2022上 , PyTorch官方正式发布了PyTorch2.0 , 与先前的1.x版本相比 , 2.0中有了跨越式的变化 。
译者|刘春霖责编|杨紫艳
出品|CSDN(ID:csdnnews)
在11月初 , PyTorch团队在官方博客宣布Pytorch1.13发布 。 据官方介绍 , PyTorch1.13中包括了BetterTransformer的稳定版 , 且不再支持CUDA10.2及11.3 , 并完成了向CUDA11.6及11.7的迁移 。 此外Beta版还增加了对AppleM1芯片及functorch的支持 。 令人意外的是 , 12月2日 , PyTorch2.0正式发布!与先前的1.x版本相比 , 2.0中有了跨越式的变化 。 PyTorch2.0中发布了大量足以改变PyTorch使用方式的新功能 , 它提供了相同的eagermode和用户体验 , 同时通过torch.compile增加了一个编译模式 , 在训练和推理过程中可以对模型进行加速 , 从而提供更佳的性能和对DynamicShapes及分布式运行的支持 。 PyTorch团队表示 , PyTorch2.0是他们向2.x系列迈出的第一步 , 其稳定版预计在2023年3月初发布 。 PyTorch 2.0 发布,一行代码将训练提速 76%!
文章图片
PyTorch2.x:更快、更Python!
PyTorch2.0官宣了一个重要特性——torch.compile , 这一特性将PyTorch的性能推向了新的高度 , 并将PyTorch的部分内容从C++移回Python 。 torch.compile是一个完全附加的(可选的)特性 , 因此PyTorch2.0是100%向后兼容的 。
支撑torch.compile的技术包括研发团队新推出的TorchDynamo、AOTAutograd、PrimTorch和TorchInductor 。
TorchDynamo:使用PythonFrameEvaluationHooks安全地捕获PyTorch程序 , 这项重大创新是PyTorch过去5年来在安全图结构捕获方面的研发成果汇总;
AOTAutograd:重载PyTorch的autograd引擎 , 作为一个跟踪autodiff , 用于生成ahead-of-time向后跟踪;
PrimTorch:将约2000多个PyTorch算子归纳为一组约250个原始算子的闭集 , 开发人员可以将其作为构建完整PyTorch后端的目标 。 这大大降低了编写PyTorch功能或后端的流程;
TorchInductor:是一种深度学习编译器 , 可为多个加速器和后端生成快速代码 。 对于NVIDIAGPU , 它使用OpenAITriton作为关键构建块 。
TorchDynamo、AOTAutograd、PrimTorch和TorchInductor是用Python编写的 , 并支持dynamicshapes(无需重新编译就能发送不同大小的向量) , 这使得它们具备灵活、易于破解的特性 , 降低了开发人员和供应商的使用门槛 。
为了验证这些技术 , 研发团队在机器学习领域测试了163个开源模型 , 包括图像分类、目标检测、图像生成等、NLP任务 , 如语言建模、问答、序列分类、推荐系统和强化学习任务 , 测试模型主要有3个来源:
46个来自HuggingFaceTransformers的模型;
来自TIMM的61个模型:由RossWightman收集的SOTAPyTorch图像模型;
来自TorchBench的56个模型:包含来自Github上收集的一组流行代码库 。
对于开源模型 , PyTorch官方没有进行修改 , 只是增加了一个torch.compile调用来进行封装
接下来PyTorch工程师在这些模型中测量速度并验证精度 , 由于加速可能取决于数据类型 , 因此研究团队选择测量Float32和自动混合精度(AMP)的加速 。
在163个开源模型中 , 该团队发现使用2.0可以将训练速度提高38-76% 。 torch.compile在93%的情况下都有效 , 模型在NVIDIAA100GPU上的训练速度提高了43% 。 在Float32精度下 , 它的平均运行速度提高了21% , 而在AMP精度下 , 它的运行速度平均提高了51% 。
PyTorch 2.0 发布,一行代码将训练提速 76%!
文章图片
目前 , torch.compile还处于早期开发阶段 , 预计2023年3月上旬将发布第一个稳定的2.0版本 。 在官方博客中 , PyTorch团队还公布了他们对于整个2.0系列的展望:开发背景