PyTorch20发布了一行代码提速

北京哪家医院治疗白癜风最好 http://www.ykhongye.com/m/

  12月2日,PyTorch2.0正式发布!

  这次的更新不仅将PyTorch的性能推到了新的高度,同时也加入了对动态形状和分布式的支持。

  此外,2.0系列还会将PyTorch的部分代码从C++移回Python。

  

  目前,PyTorch2.0还处在测试阶段,预计第一个稳定版本会在年3月初面世。

  PyTorch2.x:更快、更Python!

  在过去的几年里,PyTorch从1.0到最近的1.13进行了创新和迭代,并转移到新成立的PyTorch基金会,成为Linux基金会的一部分。

  当前版本的PyTorch所面临的挑战是,eager-mode难以跟上不断增长的GPU带宽和更疯狂的模型架构。

  而PyTorch2.0的诞生,将从根本上改变和提升了PyTorch在编译器级别下的运行方式。

  众所周知,PyTorch中的(Py)来自于数据科学中广泛使用的开源Python编程语言。

  然而,PyTorch的代码却并没有完全采用Python,而是把一部分交给了C++。

  不过,在今后的2.x系列中,PyTorch项目团队计划将与torch.nn有关的代码移回到Python中。

  除此之外,由于PyTorch2.0是一个完全附加的(和可选的)功能,因此2.0是%向后兼容的。

  也就是说,代码库是一样的,API也是一样的,编写模型的方式也是一样的。

  更多的技术支持

  TorchDynamo

  使用Python框架评估钩子安全地捕获PyTorch程序,这是团队5年来在graphcapture方面研发的一项重大创新。

  AOTAutograd

  重载了PyTorch的autograd引擎,作为一个追踪的autodiff,用于生成超前的反向追踪。

  PrimTorch

  将约多个PyTorch运算符归纳为约个原始运算符的封闭集,开发人员可以针对这些运算符构建一个完整的PyTorch后端。大大降低了编写PyTorch功能或后端的障碍。

  TorchInductor

  一个深度学习编译器,可以为多个加速器和后端生成快速代码。对于英伟达的GPU,它使用OpenAITriton作为关键构建模块。

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

  更快的训练速度

  通过引入新的编译模式「torch.   这里不用任何技巧,只需运行torch.   opt_module=torch.   为了验证这些技术,团队精心打造了测试基准,包括图像分类、物体检测、图像生成等任务,以及各种NLP任务,如语言建模、问答、序列分类、推荐系统和强化学习。其中,这些基准可以分为三类:

  来自HuggingFaceTransformers的46个模型

  来自TIMM的61个模型:RossWightman收集的最先进的PyTorch图像模型

  来自TorchBench的56个模型:github的一组流行代码库

  测试结果表明,在这个跨越视觉、NLP和其他领域的开源模型上,训练速度得到了38%-76%的提高。

  

  在NVIDIAAGPU上的对比

  此外,团队还在一些流行的开源PyTorch模型上进行了基准测试,并获得了从30%到2倍的大幅加速。

  开发者SylvainGugger表示:「只需添加一行代码,PyTorch2.0就能在训练Transformers模型时实现1.5倍到2.0倍的速度提升。这是自混合精度训练问世以来最令人兴奋的事情!」

  

团队之所以称它为2.0,是因为它有一些标志性的新特性

,包括:

  TorchDynamo可以从字节码分析生成FX图;

  AOTAutograd可以以ahead-of-time的方式生成反向图;

  PrimTorch引入了一个小型算子集,使后端更容易;

  TorchInductor:一个由OpenAITriton支持的DL编译器。

  PyTorch2.0将延续PyTorch一贯的优势,包括Python集成、命令式风格、API简单等等。此外,PyTorch2.0提供了相同的eager-mode开发和用户体验,同时从根本上改变和增强了PyTorch在编译器级别的运行方式。该版本能够为「DynamicShapes」和分布式运行提供更快的性能和更好的支持。

  在官方博客中,PyTorch团队还公布了他们对于整个2.0系列的展望:

 

  以下是详细内容。

  PyTorch2.X:速度更快、更加地Python化、一如既往地dynamic

  PyTorch2.0官宣了一个重要特性——torch.   支撑torch.   TorchDynamo使用PythonFrameEvaluationHooks安全地捕获PyTorch程序,这是一项重大创新,是研究团队对快速可靠地获取图进行5年研发的结果;

  AOTAutograd重载PyTorch的autograd引擎作为一个跟踪autodiff,用于生成ahead-of-time向后跟踪;

  PrimTorch将约多个PyTorch算子规范化为一组约个原始算子的闭集,开发人员可以将其作为构建完整PyTorch后端的目标。这大大降低了编写PyTorch特性或后端的障碍;

  TorchInductor是一种深度学习编译器,可为多个加速器和后端生成快速代码。对于NVIDIAGPU,它使用OpenAITriton作为关键构建块。

  TorchDynamo、AOTAutograd、PrimTorch和TorchInductor是用Python编写的,并支持dynamicshapes(即能够发送不同大小的张量而无需重新编译),这使得它们具备灵活、易于破解的特性,降低了开发人员和供应商的使用门槛。

  为了验证这些技术,研发团队在各种机器学习领域测试了个开源模型。实验精心构建了测试基准,包括各种CV任务(图像分类、目标检测、图像生成等)、NLP任务(语言建模、问答、序列分类、推荐系统等)和强化学习任务,测试模型主要有3个来源:

  46个来自HuggingFaceTransformers的模型;

  来自TIMM的61个模型:一系列SOTAPyTorch图像模型;

  来自TorchBench的56个模型:包含来自github的精选流行代码库。

  然后研究者测量加速性能并验证这些模型的准确性。加速可能取决于数据类型,研究团队选择测量float32和自动混合精度(AMP)的加速。

  在个开源模型中,torch.   目前,torch.   TorchDynamo:快速可靠地获取图

  TorchDynamo是一种使用FrameEvaluationAPI(PEP-中引入的一种CPython特性)的新方法。研发团队采用数据驱动的方法来验证其在GraphCapture上的有效性,并使用多个用PyTorch编写的Github项目作为验证集。TorchScript等方法大约在50%的时间里都难以获取图,而且通常开销很大;而TorchDynamo在99%的时间里都能获取图,方法正确、安全且开销可忽略不计(无需对原始代码进行任何更改)。这说明TorchDynamo突破了多年来模型权衡灵活性和速度的瓶颈。

  TorchInductor:使用define-by-runIR快速生成代码

  对于PyTorch2.0的新编译器后端,研发团队从用户编写高性能自定义内核的方式中汲取灵感:越来越多地使用Triton语言。此外,研究者还想要一个编译器后端——使用与PyTorcheager类似的抽象,并且具有足够的通用性以支持PyTorch中广泛的功能。

  TorchInductor使用pythonicdefine-by-runlooplevelIR自动将PyTorch模型映射到GPU上生成的Triton代码和CPU上的C++/OpenMP。TorchInductor的corelooplevelIR仅包含约50个算子,并且是用Python实现的,易于破解和扩展。

  AOTAutograd:将Autograd重用于ahead-of-time图

  PyTorch2.0的主要特性之一是加速训练,因此PyTorch2.0不仅要捕获用户级代码,还要捕获反向传播。此外,研发团队还想要复用现有的经过实践检验的PyTorchautograd系统。AOTAutograd利用PyTorch的torch_dispatch可扩展机制来跟踪Autograd引擎,使其能够「ahead-of-time」捕获反向传递(backwardspass)。这使TorchInductor能够加速前向和反向传递。

  PrimTorch:稳定的原始算子

  为PyTorch编写后端具有挑战性。PyTorch有多个算子,如果考虑每个算子的各种重载,则有多个。

  在PrimTorch项目中,研发团队致力于定义更小且稳定的算子集,将PyTorch程序缩减到这样较小的算子集。目标是定义两个算子集:

  Primops:约有个相当低级的算子。这些算子适用于编译器,需要将它们重新融合在一起以获得良好的性能;

  ATenops:约有个规范算子。这些算子适用于已经在ATen级别集成的后端或没有编译功能的后端(无法从较低级别的算子集(如Primops)恢复性能)。




转载请注明:http://www.aierlanlan.com/grrz/7550.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了