AI开发平台MODELARTS-性能调优五板斧:算子二进制调优

时间:2024-06-07 18:38:05

算子二进制调优

PyTorch Adaptor框架提供与算子编译相关的二进制配置参数,可设置模型编译时是否优先在线编译,以此优化模型训练性能。在main函数训练逻辑开始前通过以下函数设置(True为启动优先在线编译、False为取消优先在线编译)。

torch_npu.npu.set_compile_mode(jit_compile=False)

对于固定shape场景和动态shape场景,是否优先在线编译对训练性能带来不同的效果:

  • 固定shape场景:固定shape是指在模型计算过程中,模型的输入和输出的shape是固定的。如果优先在线编译,可根据当前获得的算子信息,进行融合和优化,在线编译出运行性能更优的算子。反之,则编译优化少,性能降低。
  • 动态shape场景:动态shape是指在模型计算过程中,模型的输入和输出存在多种shape。如果对动态shape的算子优先编译,会导致编译时间长训练性能差。如果取消优先编译,会优先查找当前编译好的算子二进制配置文件,如果存在则不在线编译算子;如果不存在,再进行在线编译。此时虽然编译优化少,但是没有编译时间,模型训练性能大概率比配置为优先编译高。

总结:

  • 如果模型中无动态shape,启动优先在线编译,可提高训练性能。
  • 如果模型中只有动态shape(该情况较少),关闭优先在线编译,模型训练性能大概率会更高。
  • 既有动态shape也有固定shape,启动优先在线编译对训练性能是否提升无法确定,因此可以在调整训练代码后,分别尝试开关优先在线编译后根据训练性能的优劣再设置。
    • Snt9B芯片默认关闭了优先在线编译,可通过以下命令获取当前模式。如果返回为False,代表已启动优先在线编译。
      print(torch_npu.npu.is_jit_compile_false())
    • 算子会根据该开关走不同的代码逻辑,如出现jit_compile切换后,代码运行失败的情况,需要联系昇腾技术支持获取帮助。
support.huaweicloud.com/bestpractice-modelarts/modelarts_10_2507.html