问题描述:
【功能模块】
MindSpore Lite 1.6 版本中的 Release Note 中重点讲到【6.1 通过异构并行技术,深度挖掘硬件算力提升推理性能】。个人对该特性比较感兴趣,现有如下问题想请教交流:
官方中提到:MindSpore Lite在当前版本实现了GPU与CPU的异构并行,使用Mobilenet-V1网络实测验证,有5%左右的性能提升。
请问这个如何复现?是否可以提供复现步骤,及如上测试是在哪个设备上运行的?
5%的性能提升,对应的baseline是?
该特性指出:将无依赖的分支分别在CPU和GPU上并行执行,然后汇集数据。这一过程需要CPU-GPU之间的交互调度和同步操作,如果这个开销较大,那加速效果也会受到影响吧。这时,为何不采用将整个模型都放在GPU上执行呢?
该特性对应的代码段是?可以提供下对应链接吗?我自学阅读下。
期待您的回复,谢谢!
有个困惑: 类似MobileNetV1这类轻量模型,为何要将该模型进行异构并行呢?模型全部在GPU上运行,速度会优于异构并行方式吧。反倒是一些大一些的模型,如果在算力偏弱的嵌入式设备上跑,这种模型异构并行的方式可能收益更大吧。
解答:
1. 复现步骤按照比例利用conveter进行模型切割即可1:2 1:1 1:3等均可尝试(cpu:gpu) 测试机器是华为p40
./tools/converter/converter/converter_lite --help会有一个--configFile选项,在转换的时候要带config文件 指定GPU与cpu比例2:1 然后转一个切分好的模型
config内容示例
device0=cpu
device1=gpu
computeRate=device0:1;device1:1;
benchmark 时有一个enableParallel开启就可以了
2. 5%的性能提升就是切分之后与不切分之前cpu直接作对比即可,cpu 与gpu数据交互 通信同步确实有开销 这越是导致性能仅能提升5%的主要原因。就是因为GPU放不下分一部分放到CPU上
3. 代码在mindspore/lite/tools/optimizer/parallel/及 lite/src/sub_graph_split.cc
一样的,就是普通卷积和depthwise卷积分割在不同的设备上跑,也是支持的,操作也一样。