下载
中文
注册

简介

算子编译工具(op_compiler)是昇腾CANN提供的编译算子生成算子二进制文件的命令行工具。该工具的具体功能和使用约束如下:

具体功能:

  • 静态shape编译功能:通过单算子API执行的方式调用算子,算子shape固定或者变化较少时,可以使用该工具编译静态kernel包并安装,提升算子调用的性能;如果需要对上述过程进一步进行性能优化,可以开启调优模式。

    本文档仅介绍算子编译工具的使用方法,具体的场景样例请参见使用静态Kernel提升模型执行性能章节。

  • 调试版本编译功能。定位算子问题时,可以使用该工具编译调试版本的二进制,用于后续的问题复现和定位。

使用约束

  • 静态shape编译
    • 默认编译模式支持的产品型号:
      • Atlas 推理系列产品
      • Atlas 训练系列产品
      • Atlas A2训练系列产品/Atlas 800I A2推理产品
    • 调优模式相关的使用约束如下:
      • 支持的产品型号:Atlas A2训练系列产品/Atlas 800I A2推理产品
      • 不支持不同用户同时使用同一device进行调优。
      • 调优前,请确保关闭Profiling功能,避免影响调优结果。关闭Profiling功能具体操作请参见性能调优工具指南
  • 调试版本编译
    支持的产品型号:
    • Atlas 推理系列产品
    • Atlas 训练系列产品
    • Atlas A2训练系列产品/Atlas 800I A2推理产品

工具功能架构

算子编译工具的功能架构如图1所示。

图1 算子编译工具功能架构
  1. 开发者在执行此工具时,需要向此工具传入算子信息统计文件或者算子kernel_name(仅调试场景支持传入kernel_name)以及其他参数。
  2. 传入算子信息统计文件的场景下,算子编译工具获取该文件并解析。
  3. 判断开发者是否开启了调试版本编译选项:
    1. 如果开启,则进行调试版本编译,根据实际运行时使用的是静态shape还是动态shape编译出对应的静态shape或者动态shape的调试版本。
    2. 如果没有开启,判断开发者是否开启了调优编译参数,未开启调优编译参数,执行默认的静态shape编译流程;开启调优编译参数,则执行调优编译流程。
  4. 算子编译工具编译生成kernel文件并打包成算子kernel包。

静态编译

静态编译是指在编译时指定shape大小,运行时不需要指定shape大小。算子编译工具进行静态编译时,根据输入的算子信息统计文件,得到确定的shape信息,针对每一个shape都编译出一个算子二进制,编译原理如下图所示:

静态编译有如下优势:

  • 编译时决定所有tensor的大小,存储空间利用率高。
  • 编译时可以针对实际的shape大小做针对性优化。
  • AI处理器擅长并行指令运行,不擅长逻辑计算,如果有太多的Scalar操作可能会打断并行指令的运行,从而导致性能下降。静态编译可以在编译时完成标量的计算,一定程度上可以提升性能。
  • 编译工具在编译时知道确切的操作数据大小,不会额外插入同步,不会导致并行执行多个指令变成串行执行,一定程度上可以提升性能。

调优编译

如果想要进一步提升算子性能,可以使用算子编译工具的调优模式,尝试进行算子调优。

调试版本编译

在算子二进制的使用过程中,如果出现AICore Error或者内存越界等问题,可以编译出包含相关调试信息的调试版本,用于分析和定位问题。