问题描述:
使用mindspore训练的模型直接使用mindspore_lite与将mindspore训练的模型转换成om模型直接使用CANN(AscendCL)进行部署有何区别?
解决方法:
这里简要介绍下一些使用流程以及体验上的差异,假设你需要使用一个mindspore的模型,通过mindspore_lite和acl在昇腾上部署,在使用这两种方式前,都需要把昇腾cann安装包安装好:
首先mindspore_lite的部署方式分为端侧和云测部署,端侧部署方式通常是使用在手机端、或者一些嵌入式设备上,昇腾环境主要使用云测部署方式,这里介绍下mindspore_lite的云测部署mindspore模型的方式:
使用mindspore_lite云测部署mindspore模型时,得把mindspore_lite云测推理包安装一下,就是一个python包,使用pip安装即可,使用前需要先用mindspore将模型导出成mindir格式,然后使用mindspore_lite的相关API(支持python api,如果是端侧部署,是不支持python的),加载mindir文件进行推理,这个操作是比较简单方便的;mindspore_lite加载模型的启动的过程会经过模型的编译,所以启动过程会比较慢,然后由于mindspore_lite一些初始化、编译等操作的原因,对于内存(不是显存)的消耗会比较大一些,当然这个消耗如果是在昇腾服务器上可以忽略不计,但对于一些昇腾开发板(比如香橙派、200I DK A2)的内存大小来说,压力是比较大的,可能要开启swap才能成功,否则内存不足;编译启动的步骤成功后,推理运行会很流畅;如果推理的是其它框架的模型,首先需要把其它框架的模型格式用mindspore_lite的工具转换成mindir,比如pytorch的模型通常是会导出成onnx格式,转成mindir后的操作,与上面一致,这里使用到的mindspore_lite的转换工具也是需要单独安装的,具体下载安装包可以参考官方文档;
再说下acl的推理,这里说的cann acl推理应该就是指om离线格式模型推理,不需要额外安装别的包,acl是cann里面的自带的,首先需要把mindspore的模型导出成air格式,然后使用atc工具(cann里面自带的)把air格式转换成om格式,这个转换的过程时间会比较长,因为里面会包括编译的过程,同时这个过程可能也比较消耗内存,但这个过程可以在自己的电脑上进行操作,就是在非昇腾设备上,只要安装了cann,也能够进行转换,所以如果最终要部署的是200I DK A2这种开发版的话,由于内存较小,可能不方便直接在开发板上进行转换,就可以把转换的过程放到自己电脑上操作,转换成功得到om格式后,再使用acl的那一套api加载om模型,支持python api和C++ api;直接使用acl推理om模型可能比较复杂,不太方便,但官方有acllite这种封装库,使用起来就比较简单了;加载om模型启动的过程是很快速的,与mindspore_lite不同,由于之前atc转换的过程已经编译过了,所以加载启动时不需要编译,启动很快,并且也不需要消耗很多额外的内存;至于性能上的话,与mindspore_lite推理是基本差不多的;但acl推理,更接近直接使用昇腾底层的api,不依赖于其它推理框架,所以可以使用很多昇腾的工具进行相关的分析和优化;如果是使用非mindspore的模型进行acl om格式推理的话,比如pytorch的模型,先导出为onnx格式,然后用atc工具把onnx格式转成om格式,后面的步骤与上述一致。