没有合适的资源?快使用搜索试试~ 我知道了~
pointnet++模型(带控制流)的pytorch转化onnx流程记录
需积分: 14 19 下载量 168 浏览量
2023-02-28
09:13:29
上传
评论 2
收藏 2.29MB PDF 举报
温馨提示
试读
15页
pointnet++模型(带控制流)的pytorch转化onnx流程记录
资源推荐
资源详情
资源评论
Pointnet++模型 pytorch→ONNX→ms 方法总结
1.任务环境说明
Python3.9.13、Pytorch1.12.1+cpu、OpenEuler22.09(转 ms)、Mindsporelite
1.9.0、Windows11(转 onnx)
另外说明:本方法适用于其他 forward 含有控制流的模型进行 onnx 转化。
2.任务目标
将 pointnet++的 pytorch 模型先转化为 onnx 再转化成 ms,看是否能够转
化和推理成功,若能够转化推理成功,说明 pointnet++可以在 mindsporelite 上
进行推理,若不能转化成功,则找出不能转化成功的原因是什么,并为后续
工作安排提供依据。
3.任务结果
Pointnet++的 pytorch 模型可转化为 onnx,但是不能将 onnx 转化为 ms,
原因是 ms 中缺少三个算子去支持 onnx,分别是 onnx 的 RandomUniformLike,
SequenceErase 和 SequenceInsert 三个算子。目前查阅 mindsporelite 官网的确
未找到这三个 onnx 对应的算子,需要开发;另外,昇腾支持 onnx 的
RandomUniformLike,其他两个算子也不支持,后续需要用异构的方法解决。
4.任务难点
Pointnet++模型中有 if 条件和 for 循环两种控制流,不能直接进行 onnx
转化,需要先使用 torch.jit.script 将 nn.module 转换为 scriptmodule,而在进行
转化时,需要根据 script 特定代码条件对模型代码进行修改,期间需要根据
bug 信息进行 debug。
知识补充 1:带有条件或循环控制流的模型是怎样的代码表现形式?
模型的 forward 函数中有 for 循环和 if 条件判断的可以认为是带有条件和循
环控制流,这里涉及到的函数内部(例如可能 query_ball_point 函数)也有条件或循
环的控制流,也属于带有控制流。例如 pointnet++模型的三块模型均是带有控制
流的模型。
而上图中的 pointnet 的分类模型是不带控制流的,可以直接进行 onnx 转化。
知识补充 2:不带有控制流和带有控制流的模型分别可以怎样转化?
不带控制流的模型,可直接运用以下代码进行转化:
带控制流的模型,需要先转成 scriptmodule 再进行转化:
再转化之前,需要用 torch.jit.script()将模型转成 scriptmodule,另外需要注意
的是,在转化的时候,需要将模型输入传入到 example_inputs 参数,否则在转化
成 onnx 后进行 ms 转化时,会报找不到 input 的错误。另外的,这里需要注意版
本,pytorch1.9.0 及以下的版本,torch.jit.script 没有 example_inputs 这个参数,导
致转出的 onnx 不可用。
而本任务的难点,就是调试代码 debug 跑通 torch.jit.script()这行代码。
知识补充 3:为什么带控制流的模型需要先转成 scriptmodule?
总体来说,torch.onnx.export 中需要的模型实际上是一个 torch.jit.ScriptModule。
而要把普通 PyTorch 模型转一个这样的 TorchScript 模型,有跟踪(trace)和记
录( script)两种导出计算图的方法,跟踪法只能通过实际运行一遍模型的方法导
出模型的静态图,无法识别出模型中的控制流(如循环),例如模型中的循环次
数设定是多少,在导出时就要循环多少次,容易导致模型过大,且导出的耗时很
久;记录法则能通过解析模型来正确记录所有的控制流,而不需要根据循环次数
剩余14页未读,继续阅读
资源评论
花花少年
- 粉丝: 20w+
- 资源: 33
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功