首页 >>  正文

手动编译pytorch

来源:baiyundou.net   日期:2024-09-21

IT之家 3 月 19 日消息,PyTorch 2.0 稳定版现已发布。跟先前 1.0 版本相比,2.0 有了颠覆式的变化。在 PyTorch 2.0 中,最大的改进主要是 API 的 torch.compile,新编译器比先前「eager mode」所提供的即时生成代码的速度快得多,性能得以进一步提升。

IT之家附官网地址:https://pytorch.org/

GitHub 地址:https://github.com/pytorch/pytorch/releases

新版本更新之处包括稳定版的 Accelerated Transformers(以前称为 Better Transformers);Beta 版包括作为 PyTorch 2.0 主要 API 的 torch.compile、作为 torch.nn.functional 一部分的 scaled_dot_product_attention 函数、MPS 后端、torch.func 模块中的 functorch API;以及其他跨越各种推理、性能和训练优化功能的 GPU 和 CPU 的 Beta / Prototype 改进。

关于 torch.compile 的全面介绍和技术概况请见 2.0 入门页面。

除了 PyTorch 2.0,研发团队还发布了 PyTorch 域库的一系列 Beta 更新,包括 in-tree 的库和 TorchAudio、TorchVision、TorchText 等独立库。此外,TorchX 转向社区支持模式。

概括:

  • torch.compile 是 PyTorch 2.0 的主要 API,它能包装并返回编译后的模型。这个是一个完全附加(和可选)的功能,因此 PyTorch 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 上的 PyTorch CPU 推理。与之前的版本相比,PyTorch 2.0 提高了 Graviton 的推理性能,包括针对 ResNet-50 和 BERT 的改进。

  • 其他一些跨 TensorParallel、DTensor、2D parallel、TorchDynamo、AOTAutograd、PrimTorch 和 TorchInductor 的新 prototype 功能和方法。

要查看公开的 2.0、1.13 和 1.12 功能完整列表,请点击此处。

稳定功能

PyTorch 2.0 版本包括 PyTorch Transformer API 新的高性能实现,以前称为「Better Transformer API」,现在更名为 「Accelerated PyTorch 2 Transformers」。

研发团队表示他们希望整个行业都能负担得起训练和部署 SOTA Transformer 模型的成本。新版本引入了对训练和推理的高性能支持,使用自定义内核架构实现缩放点积注意力 (SPDA)。

与「快速路径(fastpath)」架构类似,自定义内核完全集成到 PyTorch Transformer API 中 —— 因此,使用 Transformer 和 MultiHeadAttention API 将使用户能够:

  • 明显地看到显著的速度提升;

  • 支持更多用例,包括使用交叉注意力模型、Transformer 解码器,并且可以用于训练模型;

  • 继续对固定和可变的序列长度 Transformer 编码器和自注意力用例使用 fastpath 推理。

为了充分利用不同的硬件模型和 Transformer 用例,PyTorch 2.0 支持多个 SDPA 自定义内核,自定义内核选择逻辑是为给定模型和硬件类型选择最高性能的内核。除了现有的 Transformer API 之外,模型开发人员还可以通过调用新的 scaled_dot_product_attention () 运算来直接使用缩放点积注意力内核。

要使用您的模型,同时受益于 pt2 编译的额外加速 (用于推断或训练),请使用 model = torch.compile (model) 对模型进行预处理。

我们通过使用自定义内核和 torch.compile () 的组合,使用 Accelerated PyTorch 2 transformer 实现了训练 transformer 模型的大幅加速,特别是大语言模型。

▲ 将缩放点积注意力与自定义内核和 torch.compile 结合使用可为训练大型语言模型(上图以 nanoGPT 为例)提供显著加速。

从官方数据可以看到,PyTorch 2.0 的编译效率比 1.0 实现了大幅提高。

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

这些 Benchmark 分为三类:TIMM、TorchBench、HuggingFace Tranformers。

据 PyTorch 基金会称,新编译器在使用 Float32 精度模式时运行速度提高了 21%,在使用自动混合精度(AMP)模式时运行速度提高了 51%。在这 163 个模型中,torch.compile 可以在 93% 模型上正常运行。

值得一提的是,官方在桌面级 GPU(如 NVIDIA 3090)上测量到的加速能力低于服务器级 GPU(如 A100)。到目前为止,PyTorch 2.0 默认后端 TorchInductor 已经支持 CPU 和 NVIDIA Volta 和 Ampere GP,暂不支持其他 GPU、XPU 或旧的 NVIDIA GPU。

","gnid":"926d4cddc729d4c38","img_data":[{"flag":2,"img":[{"desc":"","height":"628","title":"","url":"https://p0.ssl.img.360kuai.com/t012e24efed730eb207.jpg","width":"1200"},{"desc":"","height":"471","title":"","url":"https://p0.ssl.img.360kuai.com/t0136baa3cb09213c3c.jpg","width":"1169"},{"desc":"","height":"794","title":"","url":"https://p0.ssl.img.360kuai.com/t01ce417be40effb185.jpg","width":"1440"},{"desc":"","height":"536","title":"","url":"https://p0.ssl.img.360kuai.com/t01cea121b75b3324d9.jpg","width":"936"}]}],"original":0,"pat":"art_src_1,sexf,sex4,sexc,fts0,sts0","powerby":"hbase","pub_time":1679214360000,"pure":"","rawurl":"http://zm.news.so.com/0ecb86fb207014cebb127a6fa0a9c84d","redirect":0,"rptid":"cb1bde3e2e3aaa34","rss_ext":[],"s":"t","src":"IT之家","tag":[{"clk":"ktechnology_1:gpu","k":"gpu","u":""},{"clk":"ktechnology_1:cpu","k":"cpu","u":""}],"title":"PyTorch 2.0 现已发布:编译器性能大幅提升,100% 向后兼容

融应送764C#如何编译dll -
盖哪刚15829223856 ______ 一般是在创建工程的时候选择创建“Class Library”类型的工程,也可以在工程属性(菜单Project-Properties)中将输出类型(Output type)选择为“Class Library”,重新编译即可.

融应送764怎么改变java虚拟机默认字符集 -
盖哪刚15829223856 ______ 1、JVM的字符集编码取的是操作系统默认的字符集编码: win xp 中文版中:一般是GBK. win server中文版中:一般是GB18030(猜测). Linux 中看本地语言环境配置文件怎么设置. IBM的AIX的中文字符集有:GB18030.2、当使用eclipse...

融应送764pytorch怎么安装 -
盖哪刚15829223856 ______ 下载pip到/usr/local/src # cd /usr/local/src # wget " " --no-check-certificate 如果提示:-bash: wget: command not found 那么安抄装wget,执行zhidao如下: # yum -y install wget 解夺安装pip # tar -xzvf pip-1.5.4.tar.gz # cd pip-1.5.4 # python setup.py install

融应送764java编译命令怎么配置?
盖哪刚15829223856 ______ 1.编译:打开高级--工具配置,在命令行下面输入javac %n%e,工作目录下输入%p ,在菜单项目名称下输入编译Java(可随意取名,只要自己喜欢),还有下面的checkbox中要选中保存活动文件,这样才在编译的时候先保存活动文件,在DOS...

融应送764为什么 PyTorch 这么火 -
盖哪刚15829223856 ______ pytorch动态计算图有什么好处 数据计算160; Torch 自称为神经网络界的 Numpy, 因为他能将 torch 产生的 tensor 放在 GPU 中加速运算 (前提是你有合适的 GPU), 就像 Numpy 会把 array 放在 CPU 中加速运算.Torch和Numpy之间可以进行...

融应送764PyTorch和TensorFlow到底哪个更好 -
盖哪刚15829223856 ______ TensorFlow有性能问题,非常占用显存

融应送764菜鸟求高手解答:如何用手机py编程循环语句实现某个动作的循环?
盖哪刚15829223856 ______ while 1:这就是一个死循环、把你需要循环的语句写在后面、注意缩进

融应送764如何交叉编译Python到ARM - Linux平台 -
盖哪刚15829223856 ______ 没有用过,建议有两条思路:1. 办法1,用交叉编译 ,需要下载相应的交叉编译工具包(又叫工具链),比如在linux下编译arm需要arm-linux-gcc等工具链2. 办法2,找一个性能好的arm平台,直接在arm平台下编译.比如树莓派的操作系统编译就是程序用多台高性能的arm平台单板机,分工合作共同编译完成的.

融应送764java:.classpath和.project文件是做什么的?
盖哪刚15829223856 ______ 那两个文件是Eclipse工具中自动生成的,当然可以直接用命令行. 前者保存项目路径,后者保存项目的完整描述.详细请参考: http://book.51cto.com/art/201005/201446.htm

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024