Pytorch 2.0来了!来看看新特性怎么应用到自己的代码里

简介: Pytorch 2.0来了!来看看新特性怎么应用到自己的代码里

文章目录


1. 前言

2. 安装和使用Pytorch 2.0

3. 结语


正文


1. 前言


Pytorch2.0和GPT4、文心一言同一时间段发布,可谓是热闹至极,我看了看Pytorch 2.0的文档,一句话概括下,2.0的功能介绍,核心就是torch.compile

opt_module = torch.Compile(module)


加入这行代码就能优化你的模型,优化后的模型和往常使用方式一样,推理速度会提升,比较重要的一点是,可以用于训练或者部署,训练可以传梯度,这次是带有AOTautograd的。然而需要注意的是,这行代码(编译)本身会消耗不少时间。


Pytorch官方在A100上测试了三个模型仓库的模型,加速比如下:

31.png

Speedups for torch.compile against eager mode on an NVIDIA A100 GPU

看起来很不错。那废话不多说,来看看怎么用。


2. 安装和使用Pytorch 2.0


安装pytorch2.0首先得上pytorch官网


32.png

需要注意的是,Pytorch 2.0只支持python3.8以上的版本,老环境记得升级一下。

按照官方提供的渠道安装完torch之后,就可以应用到自己的代码里了。这里我简单写一个用来做图像分类的神经网络。

import torch
import torch.nn as nn
import torch._dynamo
# ------ 加入这行,查看编译步骤 ------ #
torch._dynamo.config.verbose=True
# ------ 加入这行,跳过异常 ------ #
torch._dynamo.config.suppress_errors = True
class ThdCNN(nn.Module):
  # 网络结构
def fit(**args):
  # 训练和测试
model= ThdCNN(image_size, num_classes) # 声明和定义神经网络
# ------ 加入这行代码,model可选:default(compile), reduce-overhead, max-autotune ------ #
opt_model = torch.compile(model, mode="default")
optimizer = torch.optim.Adam(opt_model.parameters()) # 定义优化器
fit(opt_model, **args) # 训练和测试

我对三种加速模式进行了一个Epoch的测试(编译用时+训练和测试用时),结果如下:

模型 无加速 default(compile) reduce-overhead max-autotune
CNN(CPU) 101s 8s+78s 8s+85s 9s+81s
CNN(CUDA) 92s 7s+77s 8s+75s 8s+71s

可能是由于模型太小了,所以三种加速模式的效果差距不大,但按照官方的描述,三种模式的适用情况应该是:


default(compile):针对大模型优化,编译时间短,没有额外的内存使用;

reduce-overhead:针对小模型优化,用于减少框架开销,会使用一些额外的内存;

max-autotune:模型整体优化,用于生成最优模型,但编译时间长。


3. 结语


Pytorch2.0与1.x是完全兼容的,因此基本上不会出现迁移错误

compile的控制参数:

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 指定编译器在编译时应该优化什么,包括efault(compile), reduce-overhead, max-autotune。

dynamic 是否启用动态形状追踪。

fullgraph 类似于 Numba 的nopython. 是否将模型分解成几个子图。

backend要使用的后端。默认情况下,使用 TorchInductor,所有的后端可以通过torchdynamo.list_backends()查看。

相关文章
|
2月前
|
机器学习/深度学习 算法 PyTorch
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
RPN(Region Proposal Networks)候选区域网络算法解析(附PyTorch代码)
326 1
|
2月前
|
机器学习/深度学习 算法 PyTorch
【PyTorch实战演练】自调整学习率实例应用(附代码)
【PyTorch实战演练】自调整学习率实例应用(附代码)
53 0
|
3月前
|
自然语言处理 PyTorch 算法框架/工具
自然语言生成任务中的5种采样方法介绍和Pytorch代码实现
在自然语言生成任务(NLG)中,采样方法是指从生成模型中获取文本输出的一种技术。本文将介绍常用的5中方法并用Pytorch进行实现。
128 0
|
1月前
|
机器学习/深度学习 关系型数据库 MySQL
大模型中常用的注意力机制GQA详解以及Pytorch代码实现
GQA是一种结合MQA和MHA优点的注意力机制,旨在保持MQA的速度并提供MHA的精度。它将查询头分成组,每组共享键和值。通过Pytorch和einops库,可以简洁实现这一概念。GQA在保持高效性的同时接近MHA的性能,是高负载系统优化的有力工具。相关论文和非官方Pytorch实现可进一步探究。
103 4
|
8天前
|
机器学习/深度学习 数据可视化 PyTorch
TensorFlow与PyTorch框架的深入对比:特性、优势与应用场景
【5月更文挑战第4天】本文对比了深度学习主流框架TensorFlow和PyTorch的特性、优势及应用场景。TensorFlow以其静态计算图、高性能及TensorBoard可视化工具适合大规模数据处理和复杂模型,但学习曲线较陡峭。PyTorch则以动态计算图、易用性和灵活性见长,便于研究和原型开发,但在性能和部署上有局限。选择框架应根据具体需求和场景。
|
12天前
|
机器学习/深度学习 PyTorch 算法框架/工具
【Python机器学习专栏】PyTorch在深度学习中的应用
【4月更文挑战第30天】PyTorch是流行的开源深度学习框架,基于动态计算图,易于使用且灵活。它支持张量操作、自动求导、优化器和神经网络模块,适合快速实验和模型训练。PyTorch的优势在于易用性、灵活性、社区支持和高性能(利用GPU加速)。通过Python示例展示了如何构建和训练神经网络。作为一个强大且不断发展的工具,PyTorch适用于各种深度学习任务。
|
23天前
|
机器学习/深度学习 PyTorch TensorFlow
TensorFlow与PyTorch在Python面试中的对比与应用
【4月更文挑战第16天】这篇博客探讨了Python面试中TensorFlow和PyTorch的常见问题,包括框架基础操作、自动求梯度与反向传播、数据加载与预处理。易错点包括混淆框架API、动态图与静态图的理解、GPU加速的利用、模型保存恢复以及版本兼容性。通过掌握这些问题和解决策略,面试者能展示其深度学习框架技能。
35 9
|
24天前
|
机器学习/深度学习 自然语言处理 PyTorch
PyTorch在NLP任务中的应用:文本分类、序列生成等
【4月更文挑战第18天】PyTorch在NLP中应用于文本分类和序列生成,支持RNN、CNN、Transformer等模型构建。其动态计算图、丰富API及强大社区使其在NLP研究中备受欢迎。预训练模型和多模态学习的发展将进一步拓宽PyTorch在NLP的应用前景。
|
1月前
|
机器学习/深度学习 PyTorch API
|
1月前
|
PyTorch 算法框架/工具
使用Pytorch Geometric 进行链接预测代码示例
该代码示例使用PyTorch和`torch_geometric`库实现了一个简单的图卷积网络(GCN)模型,处理Cora数据集。模型包含两层GCNConv,每层后跟ReLU激活和dropout。模型在训练集上进行200轮训练,使用Adam优化器和交叉熵损失函数。最后,计算并打印测试集的准确性。
20 6