NPU上如何使能pytorch图模式

简介: 本文介绍了PyTorch的`torch.compile`技术和TorchAir的相关内容。`torch.compile`通过将动态图转换为静态图并结合JIT编译,提升模型推理和训练效率。示例代码展示了如何使用`torch.compile`优化模型。TorchAir是昇腾为PyTorch提供的图模式扩展库,支持在昇腾设备上进行高效训练和推理。它基于Dynamo特性,将计算图转换为Ascend IR,并通过图引擎优化执行。文章还提供了TorchAir的使用示例及功能配置方法。

1 Pytorch的compile技术

PyTorch 的 torch.compile 是一个强大的功能,用于优化 PyTorch 模型的性能。它通过将 PyTorch 的动态图转换为静态图,并利用 Just-In-Time(JIT)编译技术,显著提高模型的推理速度和训练效率。

1.1 PyTorch torch.compile 的作用

torch.compile 是 PyTorch 的一个实验性功能,旨在通过编译优化提升模型的性能。它利用了 PyTorch 的 torch.jit 模块,将动态图转换为静态图,并通过后端编译器(如 LLVM 或 OpenVINO)进一步优化代码。

1.2. 如何使用 torch.compile

以下是一个简单的示例,展示如何使用 torch.compile 来优化模型:

import torch
import torch.nn as nn

# 定义一个简单的模型
class SimpleModel(nn.Module):
    def __init__(self):
        super(SimpleModel, self).__init__()
        self.fc = nn.Linear(10, 1)

    def forward(self, x):
        return self.fc(x)

# 实例化模型
model = SimpleModel()

# 编译模型
compiled_model = torch.compile(model)

# 输入数据
input_data = torch.randn(1, 10)

# 使用编译后的模型进行推理
output = compiled_model(input_data)
print(output)

2 TorchAir

2.1 Torch Air是什么?

TorchAir(Torch Ascend Intermediate Representation)是昇腾为Ascend Extension for PyTorch(torch_npu)提供的图模式能力扩展库,支持PyTorch网络在昇腾设备上进行图模式的训练和推理。TorchAir提供了昇腾设备的图模式编译后端,对接PyTorch的Dynamo特性,将PyTorch的FX(Functionalization)计算图转换为Ascend IR计算图,并通过GE(Graph Engine,图引擎)进行图编译、图执行、图优化等操作,并下发到昇腾硬件执行。
TorchAir继承了Dynamo的大部分特性,如动态shape图功能,在PyTorch基础上又新增了图相关能力,如离线场景导图、模型编译时间优化、集合通信算子入图等功能,详细介绍参见功能介绍。
image.png

具体可以参考:
简介-PyTorch 图模式使用(TorchAir)-套件与三方库-Ascend Extension for PyTorch6.0.0开发文档-昇腾社区

2.2 Torch Air使用

TorchAir图模式相关的功能配置示例如下,此处代码仅供参考,请根据实际情况开启对应功能项。

# 必须先导torch_npu再导torchair
import torch
import torch_npu
import torchair

# (可选)若涉及集合通信算子入图,可调用patch方法
from torchair import patch_for_hcom
patch_for_hcom()

# 定义模型Model
class Model(torch.nn.Module):
    def __init__(self):
        super().__init__()
    def forward(self, x, y):
        return torch.add(x, y)

# 实例化模型model
model = Model()

# 从TorchAir框架获取NPU提供的默认backend
config = torchair.CompilerConfig()
npu_backend = torchair.get_npu_backend(compiler_config=config)

# 使用TorchAir的backend去调用compile接口编译模型
opt_model = torch.compile(model, backend=npu_backend)

# 使用编译后的model去执行
x = torch.randn(2, 2)
y = torch.randn(2, 2)
opt_model(x, y)

具体可参考:
快速上手-PyTorch 图模式使用(TorchAir)-套件与三方库-Ascend Extension for PyTorch6.0.0开发文档-昇腾社区

相关文章
|
6月前
Jetson学习笔记(二):TensorRT 查看模型的输入输出
这篇博客介绍了如何使用TensorRT查看模型的输入输出,并通过代码示例展示了如何获取和验证模型的输入输出信息。
278 5
|
11月前
|
机器学习/深度学习 并行计算 PyTorch
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
本文介绍了PyTorch中利用多GPU进行深度学习的三种策略:数据并行、模型并行和两者结合。通过`DataParallel`实现数据拆分、模型不拆分,将数据批次在不同GPU上处理;数据不拆分、模型拆分则将模型组件分配到不同GPU,适用于复杂模型;数据和模型都拆分,适合大型模型,使用`DistributedDataParallel`结合`torch.distributed`进行分布式训练。代码示例展示了如何在实践中应用这些策略。
2281 2
【多GPU炼丹-绝对有用】PyTorch多GPU并行训练:深度解析与实战代码指南
|
11月前
|
机器学习/深度学习 TensorFlow 算法框架/工具
TensorFlow核心组件详解:张量、图与会话
【4月更文挑战第17天】TensorFlow的核心是张量、计算图和会话。张量是基本数据单元,表示任意维度数组;计算图描述操作及它们的依赖关系,优化运行效率;会话是执行计算图的环境,负责操作执行和资源管理。在TF 2.x中,Eager Execution模式简化了代码,无需显式创建会话。理解这些组件有助于高效开发深度学习模型。
|
11月前
|
并行计算 PyTorch 算法框架/工具
基于mps的pytorch 多实例并行推理
基于mps的pytorch 多实例并行推理
510 1
|
芯片
Alstom MAE99-04 集成在芯片上的电源管理模块
Alstom MAE99-04 集成在芯片上的电源管理模块
180 0
Alstom	MAE99-04 集成在芯片上的电源管理模块
|
机器学习/深度学习 TensorFlow 调度
YOLOV5 v6.1更新 | TensorRT+TPU+OpenVINO+TFJS+TFLite等平台一键导出和部署
YOLOV5 v6.1更新 | TensorRT+TPU+OpenVINO+TFJS+TFLite等平台一键导出和部署
321 0
|
机器学习/深度学习 并行计算 PyTorch
基于Pytorch使用GPU运行模型方法及可能出现的问题解决方法
基于Pytorch使用GPU运行模型方法及可能出现的问题解决方法
2333 0
基于Pytorch使用GPU运行模型方法及可能出现的问题解决方法
|
机器学习/深度学习 存储 并行计算
在TPU上运行PyTorch的技巧总结
在TPU上运行PyTorch的技巧总结
415 0
在TPU上运行PyTorch的技巧总结
|
机器学习/深度学习 存储 数据挖掘
PyTorch: 计算图与动态图机制
PyTorch: 计算图与动态图机制
304 0
PyTorch: 计算图与动态图机制
|
并行计算 PyTorch 算法框架/工具
pytorch在GPU上运行模型实现并行计算
pytorch在GPU上运行模型实现并行计算
222 0