mindspore-lite模型转换
【摘要】 一、固定shape转换在转换onnx时,指定特定的shape进行转换,参考命令如下:converter_lite --modelFile=./yolox_m_mmyolo.onnx --outputFile=./yolox_m_mmyolo --inputShape="images:1,3,640,640" --fmk=ONNX --saveType=MINDIR --optimize=as...
一、固定shape转换
在转换onnx时,指定特定的shape进行转换,参考命令如下:
converter_lite --modelFile=./yolox_m_mmyolo.onnx --outputFile=./yolox_m_mmyolo --inputShape="images:1,3,640,640" --fmk=ONNX --saveType=MINDIR --optimize=ascend_oriented
注:如果onnx模型是固定shape,--inputShape参数可以不加
二、动态分档
如果业务场景中的输入是确定的几种,那么可以使用动态分档来进行模型转换,这个时候需要使用到配置文件,以开源sd1.5模型为例
根据不同业务场景下,模型的不同输入设置配置文件config.ini
[acl_build_options]
input_format="ND"
input_shape="sample:2,4,-1,-1;timestep:1;encoder_hidden_states:2,77,768"
ge.dynamicDims="128,128;96,128;96,96;64,96;64,64"
设置好配置文件后,进行模型转换
converter_lite --modelFile=unet.onnx --outputFile=./unet --fmk=ONNX --saveType=MINDIR --optimize=ascend_oriented --configFile=./config.ini
三、纯动态模型转换
如果业务场景是完全动态的,则可以使用完全动态的方式将onnx模型转换mindir
还是以unet模型为例,配置文件如下
[acl_build_options]
input_shape_range="sample:[-1,-1,-1,-1];timestep:[-1];encoder_hidden_states:[-1,-1,768]"
转换命令与动态分档的命令相同,参考如下:
converter_lite --modelFile=unet.onnx --outputFile=./unet --fmk=ONNX --saveType=MINDIR --optimize=ascend_oriented --configFile=./config.ini
注意:
1、纯动态的模型转换出来之后,并不是可以随意输入shape信息,前提是业务场景要支持,如unet的hw必须能否被8整除,如果不满足条件,则还是会运行错误
2、纯动态转出来的mindir底层使用的都是纯动态的算子,性能相比前两种方式存在一定程度的劣化
3、该参数不能与动态分档中的ge.dynamicDims参数共用
四、fp32的方式转换模型
默认情况下,是按照fp16的数据格式转换模型,如果想要提升模型精度,可以使用fp32的数据格式来转换模型
需要再配置文件中添加如下参数
[acl_init_options]
ge.exec.precision_mode=force_fp32
五、使能融合算子导出模型
如果想要在导出mindir模型时,应用目前已有的融合算子,如FlashAttention,可以在配置文件中添加如下参数
[ascend_context]
plugin_custom_ops=All
如果只想使能FlashAttention的话,plugin_custom_ops可以赋值为FlashAttention
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)