华为云AI开发平台ModelArts优化算子下发_云淘科技
当发现NPU上有大量相邻算子之间有时间间隙出现时,代表算子下发的速度太慢导致NPU空等,NPU算力没有充分发挥,如下图所示。
图1 算子之间的时间间隙
优化该场景有三个思路:
加速算子下发。常用的优化方法有进程绑核(详见性能调优五板斧)、启用机器的cpu高性能模式、启用机器的cpu高性能模式、使用高性能磁盘、多级多卡训练场景下通信优化等。
融合多个算子的逻辑为单算子,从而减少算子下发的数量。常用的优化方法为使用Ascend自带的优化后的融合算子、算子二进制优化(详见性能调优五板斧)或者开发者自己开发自定义融合算子自定义融合算子。此外,PyTorch同语义代码的执行时间有差异,可基于对同语义代码进行Profiling分析,使用性能好的实现,比如“tensorA[:, None, :, :]”与“tensorA.unsqueeze(1)”为同语义,但是前者会调用3次“aten::slice”接口加一次“aten::unsqueeze”接口,后者只调用一次“aten::unsqueeze”接口,所以应该选择“tensorA.unsqueeze(1)”。
让NPU上运行的算子处理更多的数据,算子执行时间变长,单算子下发时间几乎不变,掩盖了算子下发慢的问题。常用的方法是尽可能地增大batch size,让每一个step的NPU计算量增加。
图2 优化思路
父主题: PyTorch迁移性能调优
同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家