浙江建设信息港网站查询,Wordpress付费置顶,跨境电商公司招聘岗位及要求,什么是网络营销请举几个例子说明源#xff5c;机器之心PyTorch 官方#xff1a;我们这次的新特性太好用了#xff0c;所以就直接叫 2.0 了。前段时间#xff0c;PyTorch 团队在官方博客宣布 Pytorch 1.13 发布#xff0c;包含 BetterTransformer 稳定版等多项更新。在体验新特性的同时#xff0c;不少人…源机器之心PyTorch 官方我们这次的新特性太好用了所以就直接叫 2.0 了。前段时间PyTorch 团队在官方博客宣布 Pytorch 1.13 发布包含 BetterTransformer 稳定版等多项更新。在体验新特性的同时不少人也在期待下一个版本的推出。出乎意料的是这个新版本很快就来了而且是跨越式的 2.0 版新版本的重要进步体现在速度和可用性而且完全向后兼容。PyTorch 团队表示PyTorch 2.0 是他们向 2.x 系列迈出的第一步其稳定版预计在 2023 年 3 月初发布。首先PyTorch 2.0 引入了 torch.compile这是一种编译模式可以在不更改模型代码的情况下加速模型。在 163 个涵盖视觉、NLP 和其他领域的开源模型中该团队发现使用 2.0 可以将训练速度提高 38-76%。其次PyTorch 2.0 是 100% 向后兼容的代码库一样API 一样写模型的方式也一样。团队之所以称它为 2.0是因为它有一些标志性的新特性包括TorchDynamo 可以从字节码分析生成 FX 图AOTAutograd 可以以 ahead-of-time 的方式生成反向图PrimTorch 引入了一个小型算子集使后端更容易TorchInductor一个由 OpenAI Triton 支持的 DL 编译器。PyTorch 2.0 将延续 PyTorch 一贯的优势包括 Python 集成、命令式风格、API 简单等等。此外PyTorch 2.0 提供了相同的 eager-mode 开发和用户体验同时从根本上改变和增强了 PyTorch 在编译器级别的运行方式。该版本能够为「Dynamic Shapes」和分布式运行提供更快的性能和更好的支持。在官方博客中PyTorch团队还公布了他们对于整个2.0系列的展望以下是详细内容。PyTorch 2.X速度更快、更加地 Python 化、一如既往地 dynamicPyTorch 2.0 官宣了一个重要特性——torch.compile这一特性将 PyTorch 的性能推向了新的高度并将 PyTorch 的部分内容从 C 移回 Python。torch.compile 是一个完全附加的可选的特性因此 PyTorch 2.0 是 100% 向后兼容的。支撑 torch.compile 的技术包括研发团队新推出的 TorchDynamo、AOTAutograd、PrimTorch 和 TorchInductor。TorchDynamo 使用 Python Frame Evaluation Hooks 安全地捕获 PyTorch 程序这是一项重大创新是研究团队对快速可靠地获取图进行 5 年研发的结果AOTAutograd 重载 PyTorch 的 autograd 引擎作为一个跟踪 autodiff用于生成 ahead-of-time 向后跟踪PrimTorch 将约 2000 多个 PyTorch 算子规范化为一组约 250 个原始算子的闭集开发人员可以将其作为构建完整 PyTorch 后端的目标。这大大降低了编写 PyTorch 特性或后端的障碍TorchInductor 是一种深度学习编译器可为多个加速器和后端生成快速代码。对于 NVIDIA GPU它使用 OpenAI Triton 作为关键构建块。TorchDynamo、AOTAutograd、PrimTorch 和 TorchInductor 是用 Python 编写的并支持 dynamic shapes即能够发送不同大小的张量而无需重新编译这使得它们具备灵活、易于破解的特性降低了开发人员和供应商的使用门槛。为了验证这些技术研发团队在各种机器学习领域测试了 163 个开源模型。实验精心构建了测试基准包括各种 CV 任务图像分类、目标检测、图像生成等、NLP 任务语言建模、问答、序列分类、推荐系统等和强化学习任务测试模型主要有 3 个来源46 个来自 HuggingFace Transformers 的模型来自 TIMM 的 61 个模型一系列 SOTA PyTorch 图像模型来自 TorchBench 的 56 个模型包含来自 github 的精选流行代码库。然后研究者测量加速性能并验证这些模型的准确性。加速可能取决于数据类型研究团队选择测量 float32 和自动混合精度 (AMP) 的加速。在 163 个开源模型中torch.compile 在 93% 的情况下都有效模型在 NVIDIA A100 GPU 上的训练速度提高了 43%。在 float32 精度下它的平均运行速度提高了 21%而在 AMP 精度下它的运行速度平均提高了 51%。目前torch.compile 还处于早期开发阶段预计 2023 年 3 月上旬将发布第一个稳定的 2.0 版本。TorchDynamo快速可靠地获取图TorchDynamo 是一种使用 Frame Evaluation API PEP-0523 中引入的一种 CPython 特性的新方法。研发团队采用数据驱动的方法来验证其在 Graph Capture 上的有效性并使用 7000 多个用 PyTorch 编写的 Github 项目作为验证集。TorchScript 等方法大约在 50% 的时间里都难以获取图而且通常开销很大而 TorchDynamo 在 99% 的时间里都能获取图方法正确、安全且开销可忽略不计无需对原始代码进行任何更改。这说明 TorchDynamo 突破了多年来模型权衡灵活性和速度的瓶颈。TorchInductor使用 define-by-run IR 快速生成代码对于 PyTorch 2.0 的新编译器后端研发团队从用户编写高性能自定义内核的方式中汲取灵感越来越多地使用 Triton 语言。此外研究者还想要一个编译器后端——使用与 PyTorch eager 类似的抽象并且具有足够的通用性以支持 PyTorch 中广泛的功能。TorchInductor 使用 pythonic define-by-run loop level IR 自动将 PyTorch 模型映射到 GPU 上生成的 Triton 代码和 CPU 上的 C/OpenMP。TorchInductor 的 core loop level IR 仅包含约 50 个算子并且是用 Python 实现的易于破解和扩展。AOTAutograd将 Autograd 重用于 ahead-of-time 图PyTorch 2.0 的主要特性之一是加速训练因此 PyTorch 2.0 不仅要捕获用户级代码还要捕获反向传播。此外研发团队还想要复用现有的经过实践检验的 PyTorch autograd 系统。AOTAutograd 利用 PyTorch 的 torch_dispatch 可扩展机制来跟踪 Autograd 引擎使其能够「ahead-of-time」捕获反向传递backwards pass。这使 TorchInductor 能够加速前向和反向传递。PrimTorch稳定的原始算子为 PyTorch 编写后端具有挑战性。PyTorch 有 1200 多个算子如果考虑每个算子的各种重载则有 2000 多个。在 PrimTorch 项目中研发团队致力于定义更小且稳定的算子集将 PyTorch 程序缩减到这样较小的算子集。目标是定义两个算子集Prim ops约有 250 个相当低级的算子。这些算子适用于编译器需要将它们重新融合在一起以获得良好的性能ATen ops约有 750 个规范算子。这些算子适用于已经在 ATen 级别集成的后端或没有编译功能的后端无法从较低级别的算子集如 Prim ops恢复性能。用户体验PyTorch 2.0 引入了一个简单的函数 torch.compile它会返回一个编译后的模型。compiled_model ** torch.compile(model)compiled_model 保存对模型的引用并将 forward 函数编译为一个更优化的版本。在编译模型时PyTorch 2.0 给了几项设置来调整它def torch.compile(model: Callable,*,mode: Optional[str] default,dynamic: bool False,fullgraph:bool False,backend: Union[str, Callable] inductor,# advanced backend options go here as kwargs**kwargs) - torch._dynamo.NNOptimizedModule「mode」指定编译器在编译时应该优化的内容。default 是一种预设模式它试图在不花费太长时间或使用额外内存的情况下高效编译。其他模式如 reduce-overhead可以大大降低框架开销但要消耗少量额外内存。max-autotune 编译很长时间试图为你提供它所能生成的最快的代码。「dynamic」模式指定是否为 Dynamic Shapes 启用代码路径。某些编译器优化不能应用于动态形状的程序。明确你想要一个带有动态形状还是静态形状的编译程序将有助于编译器提供更好的优化代码。「fullgraph」类似于 Numba 的 nopython。它将整个程序编译成一个图或者给出一个错误提示解释为什么它不能这样做。大多数用户不需要使用这种模式。如果你非常注重性能那么你可以尝试使用它。「backend 」指定使用哪个编译器后端。默认情况下使用 TorchInductor但还有其他一些可用的工具。编译体验想要在默认模式中提供最大的好处和最大的灵活性。常见问答1、什么是 PT 2.02.0 是最新的 PyTorch 版本。PyTorch 2.0 提供相同的 eager 模式开发体验同时通过 torch.compile 添加编译模式。这种编译模式有可能在训练和推理期间加速模型。2、为什么是 2.0 而不是 1.14PyTorch 2.0 就是计划中的 1.14 。我们发布了大量新特性我们相信这些新特性会改变用户使用 PyTorch 的方式因此称其为 PyTorch 2.0。3、如何安装 2.0有什么额外要求吗安装最新的 nightliesCUDA 11.7pip3 install numpy --pre torch[dynamo] torchvision torchaudio --force-reinstall --extra-index-url https://download.pytorch.org/whl/nightly/cu117CUDA 11.6pip3 install numpy --pre torch[dynamo] torchvision torchaudio --force-reinstall --extra-index-url https://download.pytorch.org/whl/nightly/cu116CPUpip3 install numpy --pre torch torchvision torchaudio --force-reinstall --extra-index-url https://download.pytorch.org/whl/nightly/cpu4、2.0 代码是否向后兼容 1.X是的使用 2.0 不需要修改 PyTorch 工作流程。一行代码 model torch.compile(model) 就可以优化模型以使用 2.0 堆栈并与其余 PyTorch 代码一起顺利运行。这是一个可选择项不需要使用新的编译器。5、默认启用 2.0 吗不必须通过使用单个函数调用优化模型从而在 PyTorch 代码中显式启用 2.0。6、如何将 PT1.X 代码迁移到 PT2.0代码应该按原样工作无需任何迁移。如果想使用 2.0 中引入的新编译模式特性那么可以从优化模型开始model torch.compile(model)虽然加速主要是在训练期间观察到的但如果你的模型运行速度比 eager 模式快也可以将它用于推理。import torchdef train(model, dataloader):model torch.compile(model)for batch in dataloader:run_epoch(model, batch)def infer(model, input):model torch.compile(model)return model(\*\*input)7、是否有任何不该使用 PT 2.0 的应用程序当前版本的 PT 2.0 仍处于实验阶段并且处于 nightlies 版本。其中的动态形状支持还处于早期阶段所以可以等到 2023 年 3 月稳定版发布后再使用该功能。8、运行 PyTorch 2.0 时代码有何不同开箱即用PyTorch 2.0 与 PyTorch 1.x 相同模型以 eager 模式运行即 Python 的每一行都逐个执行。在 2.0 中如果用 model torch.compile(model) 将模型打包则模型在执行之前会经过 3 个步骤1图获取首先将模型重写为子图块。可由 TorchDynamo 编译的子图被「压平」其他子图可能包含控制流代码或其他不受支持的 Python 结构将回退到 Eager 模式。2Graph lowering所有 PyTorch 操作都被分解为特定于所选后端的组成内核。3图编译内核调用其相应的低级设备专用操作。9、2.0 目前支持哪些编译器后端默认和最完整的后端是 TorchInductor但是 TorchDynamo 有一个不断增长的后端列表可以通过调用 torchdynamo.list_backends(). 找到10、2.0 版本的分布式训练能力如何Compiled 模式下的 DDP 和 FSDP 比 FP32 中的 Eager 模式快 15%、AMP 精度快 80%。PT2.0 做了一些额外的优化以确保 DDP 的通信 - 计算 overlap 与 Dynamo 的部分图创建良好协作。想要确保使用 static_graphFalse 运行 DDP更多细节参见https://dev-discuss.pytorch.org/t/torchdynamo-update-9-making-ddp-work-with-torchdynamo/86011、为什么我的代码用 2.0 的 Compiled Model 运行变慢性能下降最可能的原因是 graph break 太多。例如类似模型前向 trigger 中的输出语句这样的东西会触发 graph break。详见https://pytorch.org/docs/master/dynamo/faq.html#why-am-i-not-seeing-speedups12、以前运行的代码在 2.0 中崩溃了该如何调试参见https ://pytorch.org/docs/master/dynamo/faq.html#why-is-my-code-crashing后台回复关键词【入群】加入卖萌屋NLP、CV、搜推广与求职讨论群 [1]https://pytorch.org/get-started/pytorch-2.0/