快速入门和使用Pytorch2.x,代码示例

结合代码讲解,让大家快速入门和使用Pytorch2.x

快速入门和使用Pytorch2.x,代码示例

关注程旭源,我们一起向上生长

快速入门和使用Pytorch2.x,代码示例

快速入门和使用Pytorch2.x,代码示例

本文是为了让大家快速入门和使用Torch 2.x,所以主要结合代码去介绍如何使用TorchDynamo和TorchInductor,并探索其原理。

作 者丨程旭源
Pytorch学习笔记
快速入门和使用Pytorch2.x,代码示例

 

Pytorch官方团队宣布Pyotch 2.X的新时代已经到来。

主要四个方面:

  • TorchDynamo:把Python Bytecode 字节分析生成 FX 图;

  • TorchInductor:神经网络编译器;

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

  • PrimTorch :引入一个小型算子集,使后端更容易。

torch. compile 

torch.compile 编译模式,在不更改模型代码的情况下加速模型。

TorchDynamo相比fx和jit的trace,可以更方便地跟踪data-dependent分支,而且不像torch.script一样需要修改代码。TorchInductor就是编译器,有对应的IR(define-by-run IR),然后可以利用triton生成高性能的算子。Triton是一个可以使用Python编写高性能GPU程序的Python库。

快速入门和使用Pytorch2.x,代码示例

使用方式

使用函数 torch.compile 来包装模型,并返回一个编译后的模型。

快速入门和使用Pytorch2.x,代码示例

函数解析:

快速入门和使用Pytorch2.x,代码示例
  • mode: 指定编译器在编译时应该优化什么。预设defaul模式,也可以设置reduce-overhead或者max-autotune。

  • dynamic: 指定是否启用动态形状还是静态形状。

  • fullgraph:是否将整个程序编译成一个图形。

  • backend: 指定要使用的编译器后端。默认Torch Inductor。

使用示例

只需要红框中一行代码即可,其他和Pytorch1.x的相同。

快速入门和使用Pytorch2.x,代码示例

在训练和推理中示例:

快速入门和使用Pytorch2.x,代码示例
torch.compile 有多种模式(mode)可以使用:
快速入门和使用Pytorch2.x,代码示例

序列化

我们可以序列化optimized_model或原模型的状态字典。方法相同。但目前不能直接保存optimized_model。

快速入门和使用Pytorch2.x,代码示例

推理和导出

快速入门和使用Pytorch2.x,代码示例

TorchDynamo

我们可以通过使用一行装饰器torch._dynamo.optimize(),轻松地尝试不同的编译器后端,使PyTorch代码更快。

安装TorchDynamo

GPU:安装GPU PyTorch TorchDynamo以及GPU TorchDynamo依赖项(用于CUDA 11.7)

pip install numpy --pre torch[dynamo] --force-reinstall --extra-index-url https://download.pytorch.org/whl/nightly/cu117
CPU版:
pip install --pre torch --extra-index-url https://download.pytorch.org/whl/nightly/cpu
验证安装:

快速入门和使用Pytorch2.x,代码示例

原理图:

快速入门和使用Pytorch2.x,代码示例

TorchInductor

Hugging Face 和 Pytotch 2.x

我们使用Bert作为示例,其实也就增加了两行代码。

快速入门和使用Pytorch2.x,代码示例

此处的 TorchInductor是默认后端,只是TorchDynamo Graph支持的后端之一,用于gpu的Triton或用于cpu的C/OpenMP。可以通过torch依赖库中的backends.py文件或者torchdynamo.list_backends() 查看目前支持哪些后端以及各自的依赖项。
https://github.com/pytorch/pytorch/blob/master/torch/_dynamo/optimizations/backends.py

自定义后端backend

如果我们想更好地理解编译期间发生的事情,那么可以创建一个自定义编译器(把backend 从 inductor换成我们自己的compiler),返回的是forward()函数可以调用的 fx GraphModule。
也可以应用到其他Python函数上,在使用的时候,加个装饰器即可。图GraphModule的顺序是不确定的,取决于即时编译器首先遇到的是哪一个图。

快速入门和使用Pytorch2.x,代码示例

加速后端backend

方法和上面一样,自定义一个编译器,通过optimize_for_inference加速。

快速入门和使用Pytorch2.x,代码示例

多个编译器组合使用

组合多个一起玩也是可以的。玩得溜、玩的花。

快速入门和使用Pytorch2.x,代码示例

本文有些地方介绍还是粗略了一些,会用为先,然后探究其原理。
有问题欢迎留言板讨论。
本文参考来源:  https://pytorch.org/get-started/pytorch-2.0/
THE END
快速入门和使用Pytorch2.x,代码示例
快速入门和使用Pytorch2.x,代码示例
写bug的程旭源
留学生技术素人博主
◆◆◆◆◆◆◆◆◆◆
知识的传播者。利他主义者

快速入门和使用Pytorch2.x,代码示例

快速入门和使用Pytorch2.x,代码示例知乎、B站同名】

快速入门和使用Pytorch2.x,代码示例

<

原创文章。转载请注明: 作者:meixi 网址: https://www.icnma.com
Like (0)
meixi管理
Previous 23/03/2024 12:58
Next 11/01/2023 14:14

猜你想看