MindIE Torch快速上手

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: MindIE Torch 是一款高效的深度学习推理优化工具,支持 PyTorch 模型在 NPU 上的高性能部署。其核心特性包括:1) 子图与单算子混合执行,配合 torch_npu 实现高效推理;2) 支持 C++ 和 Python 编程语言,灵活适配不同开发需求;3) 兼容多种模式(TorchScript、ExportedProgram、torch.compile),覆盖广泛场景;4) 支持静态与动态 Shape 模型编译,满足多样化输入需求。通过简单易用的 API,开发者可快速完成模型加载、编译优化、推理执行及离线模型导出等全流程操作,显著提升开发效率与性能表现。

MindIE Torch整体介绍

整体架构

image.png

推理迁移工作流

1744687931654_image.png

关键特性

特性1:配合torch_npu实现子图+单算子混合执行

1744688065457_image.png

特性2:支持C++和Python编程

c++伪代码(适用于TorchScript路线):

// load TorchScript module
torch::jit::script::Module module = torch::jit::load("xxx.pth"); 

// step1:compile
torch_aie::torchscript::CompileSpec compileSpec(inputsInfo);
auto compiled_module = torch_aie::torchscript::compile(module, compileSpec);

 // step2:forward
npu_results = compiled_module.forward(input);

python伪代码(适用于TorchScript路线):

# load TorchScript module
model = torch.jit.load("xxx.pth") 

# step1:compile
compiled_module = mindietorch.compile(model, inputs=inputs_info) 

# step2:forward
npu_results = compiled_module.forward(input_data)

特性3:支持TorchScript、ExportedProgram多种模式

  • TorchScript模式
    支持对torch.jit.trace/script导出的TorchScript模型进行编译优化
# load TorchScript module
model = torch.jit.load("xxx.pth") 

# step1:compile
compiled_module = mindietorch.compile(model, inputs=inputs_info) 

# step2:forward
npu_results = compiled_module.forward(input_data)
  • torch.export 模式
    支持对torch.export导出的ExportedProgram进行编译优化
# load PyTorch nn.module
model = torch.load("xxx.pth")
# 在使用MindIE Torch之前用户可以选择提前导出ExportedProgram
exported_model = torch.export.export(model, args=tuple(input_data,))

# step1:compile
# 当传入一个nn.Module时, MindIE Torch内部会先导出ExportedProgram, 再进行编译优化
compiled_module = mindietorch.compile(model, inputs=inputs_info, ir="dynamo") 
# 当传入一个ExportedProgram时, MindIE Torch会直接进行编译优化
compiled_module = mindietorch.compile(exported_model, inputs=inputs_info, ir="dynamo")

# step2:forward
npu_results = compiled_module.forward(input_data)
  • torch.compile 路线
    提供了名为mindie的编译后端,支持在推理时对torch.compile;
    生成的GraphModule进行即时编译优化。
# load PyTorch nn.module
model = torch.load("xxx.pth")

# step1:准备待执行模型,此时并不会进行模型的编译优化
opt_model = torch.compile(model, backend="mindie")
# 或
opt_model = mindietorch.compile(model, ir="torch_compile")

# step2:执行推理,此时PyTorch才会调用MindIE Torch的自定义后端进行模型编译,编译完成之后才开始推理
npu_results = opt_model(input_data)

特性4:支持静态Shape、动态Shape模型编译

  • 静态shape
import torch 
import mindietorch

# 纯静态shape,单输入
inputs = [mindietorch.Input((batchsize, 3, 224, 224))] # batchsize 自行写入

# 纯静态shape,多输入
inputs = [mindietorch.Input((batchsize, 3, 224, 224)), mindietorch.Input((batchsize, 3, 224, 224))]
  • 动态分档
import torch 
import mindietorch

# 动态分档
inputs = []
inputs_gear_1 = [mindietorch.Input((1, 3, 224, 224))]  # 1档
inputs_gear_2 = [mindietorch.Input((8, 3, 224, 224))]  # 2档
inputs_gear_3 = [mindietorch.Input((32, 3, 224, 224))]  # 3档
inputs.append(inputs_gear_1)
inputs.append(inputs_gear_2)
inputs.append(inputs_gear_3)
  • ShapeRange
import torch 
import mindietorch

# input shape range
min_shape = (1, 3, 224, 224)
max_shape = (32, 3, 224, 224)
inputs = []
inputs.append(mindietorch.Input(min_shape = min_shape, max_shape= max_shape)) # inputs 作为最终的模型输入设置。

MindIE Torch demo开发

import torch
# 导入mindietorch
import mindietorch 

# 加载原始ts模型、构造输入数据
model_path = "./resnet50.ts"
model = torch.jit.load(model_path)

# 1. 构造输入
inputs = [mindietorch.Input((batchsize, 3, 224, 224))]

# 2. 编译优化
mindietorch.set_device(0)
compiled_model = mindietorch.compile(model, inputs=inputs, ir="ts") 

# 3.模型推理
results = compiled_model.forward(input_data.to("npu"))

# 4. 编译后模型保存加载 (可选)
compiled_module.save("CompiledModel.ts")

# 5. om离线模型导出(可选)
mindietorch.export_engine(model, "forward", "export_engine.om", inputs=inputs)

# 6. 资源释放
mindietorch.finalize()
相关文章
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现Raw格式的图像保存(C++)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现Raw格式的图像保存(C++)
447 0
Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现Raw格式的图像保存(C++)
|
Linux Python Windows
Centos7 下安装python3及卸载
Centos7 下安装python3及卸载
1847 0
Centos7 下安装python3及卸载
|
9月前
|
NoSQL 关系型数据库 MySQL
改了 Nacos 一行配置,搞崩线上支付系统!
Nacos服务注册默认使用临时实例,通过心跳机制实时感知服务状态,适合支付、订单等动态业务。持久化实例由服务端探活,适用于MySQL、Redis等静态组件。配置中心所有配置均持久化,无“临时”概念,动态更新指内容变更而非生命周期短暂。正确理解差异,避免因`ephemeral=false`误配导致生产事故。
339 1
|
8月前
|
数据采集 运维 数据可视化
Python时间序列数据分析与可视化实战指南
本文以贵州茅台股价为例,详解Python时间序列分析全流程:从数据获取、清洗预处理到可视化与异常检测,涵盖移动平均、季节性分解、自相关分析等核心技术,并结合Plotly实现交互式图表,助你挖掘金融数据中的趋势与规律。
688 0
|
数据采集 人工智能 弹性计算
「智驱未来,云网随行」阿里云基础设施AI技术沙龙云网络专场在杭州举办
6月20日,阿里云基础设施AI Tech Day ·云网络专场在杭州太极禅院成功举办。活动吸引了来自吉利、极氪、浙江大学等35位技术负责人及师生参与。现场围绕AI场景下的算力资源网络建设,探讨了数据采集、模型调度、算力池化等关键技术方案,分享了阿里云在通义模型、PAI平台、弹性计算及云网络方面的最佳实践,助力企业构建智能、弹性的AI基础设施。
|
机器学习/深度学习 传感器 文字识别
传统OCR与深度学习OCR的较量
OCR(光学字符识别)技术经历了从传统手工特征提取到深度学习自动化处理的变革。本文对比传统OCR与深度学习OCR,从图像预处理到后处理,详解技术演进带来的速度、精度与扩展性飞跃。
520 0
|
Java 数据库连接 mybatis
MyBatis篇-映射关系(1-1 1-n n-n)
本文介绍了MyBatis中四种常见关系映射的配置方法,包括一对一、一对多、多对一和多对多。**一对一**通过`resultMap`实现属性与字段的映射;**一对多**以用户-角色为例,使用`<collection>`标签关联集合数据;**多对一**以作者-博客为例,利用`<association>`实现关联;**多对多**则通过引入第三方类(如UserForDept)分别在User和Dept类中添加集合属性,并配置对应的`<collection>`标签完成映射。这些方法解决了复杂数据关系的处理问题,提升了开发效率。
|
Docker 容器
docker重命名镜像名称以及tag版本
docker重命名镜像名称以及tag版本
2105 0
|
JavaScript 测试技术 Go
Hyperledger fabric部署链码(一)打包链码
fabric部署chaincode-go(智能合约)系列之一
803 0

热门文章

最新文章