使用mindspore lite 2.0转换的mindir模型,在Atlas 200 DK和Atlas 200I DK A2两块开发板上,后者推理速度慢十几倍?
仅仅特征提取环节的2个Conv2D算子计算循环数达到了172亿次,耗时14.16秒,占推理总耗时的97%,是什么原因?是硬件设计缺陷?还是mindspore lite的模型转换缺陷?
模型是在Mindspore2.0平台上训练的,导出为mindir格式,模型大小为126.5MB。
一、在Atlas 200 DK上试验,推理1.1s
软件配套:CANN 6.3.RC1 + Mindspore 2.0.0 + Mindspore lite 2.0.0
步骤:
(1)根据官方文档,使用Mindspore lite 的Python接口对原mindir模型进行转换(云侧工具),转换后大小为107.2MB;
(2)按照官方文档,使用Mindspore lite 的Python接口加载转换后的模型进行循环推理(云侧推理->基础推理),推理一次用时约1.1s(batch=5)。
推理时间见下图:

二、在Atlas 200I DK A2上试验,推理14.5s
软件配套,分别测试了2个版本,测试结果一致:
(1)默认镜像中包含的CANN 7.0.0. beta1 + Mindspore 2.0.0 + Mindspore lite 2.0.0
(2)默认镜像中包含的CANN 7.0.0. beta1 + Mindspore 2.2.14 + Mindspore lite 2.2.14
步骤:
(1)根据官方文档,使用Mindspore lite 的Python接口对原mindir模型进行转换(云侧工具),转换后大小为106.1MB;
(2)按照官方文档,使用Mindspore lite 的Python接口加载转换后的模型进行循环推理(云侧推理->基础推理),推理一次用时约14.5s(batch=5)。
推理时间见下图

三、 Profiling数据采集分析
(1)使用Mindspore lite 2.0.0转换mindir模型后,能够同时生成.mindir和.om格式模型(Mindspore lite 2.2.14 没能生成om模型),因此可以使用Profiling pyACL API采集并落盘性能数据,得到数据 PROF_000001_20240902214031975_BMMFKPLFNFJRNJBA
(2)使用msprof工具解析性能数据
(1)执行命令,解析性能数据:msprof --export=on --output=./PROF_000001_20240902214031975_BMMFKPLFNFJRNJBA/
(2)得到mindstudio_profiler_output目录,包含以下数据文件
api_statistic_20240903190336.csv
ddr_20240903190336.csv
llc_read_write_20240903190336.csv
msprof_20240903190336.json
npu_mem_20240903190336.csv
op_statistic_20240903190336.csv
op_summary_20240903190336.csv
step_trace_20240903190336.csv
step_trace_20240903190336.json
task_time_20240903190336.csv
(3)查看其中的op_summary_20240903190336.csv和task_time_20240903190336.csv文件,发现有2个算子耗时特别多,共约14s左右,如何进行优化?是什么在Atlas 200 DK上没有出现这种情况?
任务用时见下图

算子用时见下图

使用mindspore lite 2.0转换的mindir模型,在Atlas 200 DK和Atlas 200I DK A2两块开发板上,后者推理速度慢十几倍?
仅仅特征提取环节的2个Conv2D算子计算循环数达到了172亿次,耗时14.16秒,占推理总耗时的97%,是什么原因?是硬件设计缺陷?还是mindspore lite的模型转换缺陷?
模型是在Mindspore2.0平台上训练的,导出为mindir格式,模型大小为126.5MB。
一、在Atlas 200 DK上试验,推理1.1s
软件配套:CANN 6.3.RC1 + Mindspore 2.0.0 + Mindspore lite 2.0.0
步骤:
(1)根据官方文档,使用Mindspore lite 的Python接口对原mindir模型进行转换(云侧工具),转换后大小为107.2MB;
(2)按照官方文档,使用Mindspore lite 的Python接口加载转换后的模型进行循环推理(云侧推理->基础推理),推理一次用时约1.1s(batch=5)。
推理时间见下图:
二、在Atlas 200I DK A2上试验,推理14.5s
软件配套,分别测试了2个版本,测试结果一致:
(1)默认镜像中包含的CANN 7.0.0. beta1 + Mindspore 2.0.0 + Mindspore lite 2.0.0
(2)默认镜像中包含的CANN 7.0.0. beta1 + Mindspore 2.2.14 + Mindspore lite 2.2.14
步骤:
(1)根据官方文档,使用Mindspore lite 的Python接口对原mindir模型进行转换(云侧工具),转换后大小为106.1MB;
(2)按照官方文档,使用Mindspore lite 的Python接口加载转换后的模型进行循环推理(云侧推理->基础推理),推理一次用时约14.5s(batch=5)。
推理时间见下图
三、 Profiling数据采集分析
(1)使用Mindspore lite 2.0.0转换mindir模型后,能够同时生成.mindir和.om格式模型(Mindspore lite 2.2.14 没能生成om模型),因此可以使用Profiling pyACL API采集并落盘性能数据,得到数据 PROF_000001_20240902214031975_BMMFKPLFNFJRNJBA
(2)使用msprof工具解析性能数据
(1)执行命令,解析性能数据:msprof --export=on --output=./PROF_000001_20240902214031975_BMMFKPLFNFJRNJBA/
(2)得到mindstudio_profiler_output目录,包含以下数据文件
api_statistic_20240903190336.csv
ddr_20240903190336.csv
llc_read_write_20240903190336.csv
msprof_20240903190336.json
npu_mem_20240903190336.csv
op_statistic_20240903190336.csv
op_summary_20240903190336.csv
step_trace_20240903190336.csv
step_trace_20240903190336.json
task_time_20240903190336.csv
(3)查看其中的op_summary_20240903190336.csv和task_time_20240903190336.csv文件,发现有2个算子耗时特别多,共约14s左右,如何进行优化?是什么在Atlas 200 DK上没有出现这种情况?
任务用时见下图
算子用时见下图