更新时间:2024-05-08 GMT+08:00
分享

优化算子下发

当发现NPU上有大量相邻算子之间有时间间隙出现时,代表算子下发的速度太慢导致NPU空等,NPU算力没有充分发挥,如下图所示。

图1 算子之间的时间间隙

优化该场景有三个思路:

  • 加速算子下发。常用的优化方法有进程绑核(详见性能调优五板斧)、启用机器的cpu高性能模式、使用高性能磁盘、多级多卡训练场景下通信优化等。
  • 融合多个算子的逻辑为单算子,从而减少算子下发的数量,请参见NPU融合算子API和亲和优化器。常用的优化方法为使用Ascend自带的优化后的融合算子、算子二进制优化(详见性能调优五板斧)或者开发者自己开发自定义融合算子自定义融合算子。此外,PyTorch同语义代码的执行时间有差异,可基于对同语义代码进行Profiling分析,使用性能好的实现,比如“tensorA[:, None, :, :]”“tensorA.unsqueeze(1)”为同语义,但是前者会调用3次“aten::slice”接口加一次“aten::unsqueeze”接口,后者只调用一次“aten::unsqueeze”接口,所以应该选择“tensorA.unsqueeze(1)”
  • 让NPU上运行的算子处理更多的数据,算子执行时间变长,单算子下发时间几乎不变,掩盖了算子下发慢的问题。常用的方法是尽可能地增大batch size,让每一个step的NPU计算量增加。
图2 优化思路
分享:

    相关文档

    相关产品