MindIE Torch快速上手

简介: 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()
相关文章
|
4月前
|
编解码 人工智能 API
飞桨x昇腾生态适配方案:12_动态OM推理
本文介绍了基于Ascend AI平台的OM模型动态推理方法,包括动态BatchSize、动态分辨率、动态维度及动态Shape四种场景,支持固定模式与自动设置模式。通过`ais_bench`工具实现推理,提供示例命令及输出结果说明,并解决常见问题(如环境变量未设置、输入与模型不匹配等)。此外,还提供了API推理指南及参考链接,帮助用户深入了解ONNX离线推理流程、性能优化案例及工具使用方法。
206 0
|
5月前
|
机器学习/深度学习 人工智能 数据可视化
AI开源框架:让分布式系统调试不再"黑盒"
Ray是一个开源分布式计算框架,专为支持可扩展的人工智能(AI)和Python应用程序而设计。它通过提供简单直观的API简化分布式计算,使得开发者能够高效编写并行和分布式应用程序 。Ray广泛应用于深度学习训练、大规模推理服务、强化学习以及AI数据处理等场景,并构建了丰富而成熟的技术生态。
898 102
AI开源框架:让分布式系统调试不再"黑盒"
|
6月前
|
人工智能 Cloud Native 安全
DeepSeek 给 API 网关上了一波热度
API 网关并不是一个新的概念,但 DeepSeek 的全民化趋势给 API 网关上了一波热度。本文将围绕 API 网关的上下游概念、演进历程和分类、核心能力、DeepSeek 如何接入 API 网关等方面,和大家一起更加立体的重新认识下 API 网关。
468 135
|
5月前
|
机器学习/深度学习 人工智能 PyTorch
模型手动绑骨3天,AI花3分钟搞定!UniRig:清华开源通用骨骼自动绑定框架,助力3D动画制作
UniRig是清华大学与VAST联合研发的自动骨骼绑定框架,基于自回归模型与交叉注意力机制,支持多样化3D模型的骨骼生成与蒙皮权重预测,其创新的骨骼树标记化技术显著提升动画制作效率。
752 27
模型手动绑骨3天,AI花3分钟搞定!UniRig:清华开源通用骨骼自动绑定框架,助力3D动画制作
|
5月前
|
存储 机器学习/深度学习 数据可视化
结合多模态RAG和异步调用实现大模型内容
文章探讨了如何利用多模态大模型和工程优化手段提升物流理赔业务效率。核心方案包括:通过多模态RAG技术实现图片查重,结合异步调用方法优化货损识别功能。
353 36
结合多模态RAG和异步调用实现大模型内容
|
6月前
|
存储 缓存 Prometheus
阿里云下一代可观测时序引擎-MetricStore 2.0
我们开发了 MetricStore 2.0 版本,从存储到计算进行了全面升级,致力于成为阿里云下一代可观测时序引擎。
327 48
|
5月前
|
人工智能 中间件 API
别让创意卡在工具链!MiniMax MCP Server:MiniMax 开源 MCP 服务打通多模态生成能力,视频语音图像一键全搞定
MiniMax MCP Server 是基于模型上下文协议的多模态生成中间件,支持通过文本指令调用视频生成、图像创作、语音合成及声音克隆等能力,兼容主流客户端实现跨平台调用,采用检索增强生成技术保障内容准确性。
474 3
别让创意卡在工具链!MiniMax MCP Server:MiniMax 开源 MCP 服务打通多模态生成能力,视频语音图像一键全搞定
|
5月前
|
人工智能 开发框架 决策智能
谷歌开源多智能体开发框架 Agent Development Kit:百行代码构建复杂AI代理,覆盖整个开发周期!
谷歌开源的Agent Development Kit(ADK)是首个代码优先的Python工具包,通过多智能体架构和灵活编排系统,支持开发者在百行代码内构建复杂AI代理,提供预置工具库与动态工作流定义能力。
744 3
谷歌开源多智能体开发框架 Agent Development Kit:百行代码构建复杂AI代理,覆盖整个开发周期!
|
Java 测试技术 持续交付
自动化测试实践:从单元测试到集成测试
【6月更文挑战第28天】-单元测试:聚焦代码最小单元,确保每个函数或模块按预期工作。使用测试框架(如JUnit, unittest),编写覆盖所有功能和边界的测试用例,持续集成确保每次变更后自动测试。 - 集成测试:关注模块间交互,检查协同工作。选择集成策略,编写集成测试用例,模拟真实环境执行测试,整合到CI/CD流程以持续验证软件稳定性。 自动化测试提升软件质量,降低成本,加速开发周期,是现代软件开发不可或缺的部分。
|
5月前
|
人工智能 自然语言处理 算法
经典大模型提示词工程技术路线概述
本文概述几种经典提示词工程方法,总结关键信息,分析其优势和局限,并分享笔者的一点思考。
554 105
经典大模型提示词工程技术路线概述