简介
算子编译工具(op_compiler)是昇腾CANN提供的编译算子生成算子二进制文件的命令行工具。该工具的具体功能和使用约束如下:
具体功能:
- 静态shape编译功能:通过单算子API执行的方式调用算子,算子shape固定或者变化较少时,可以使用该工具编译静态kernel包并安装,提升算子调用的性能;如果需要对上述过程进一步进行性能优化,可以开启调优模式。
- 调试版本编译功能。定位算子问题时,可以使用该工具编译调试版本的二进制,用于后续的问题复现和定位。
使用约束:
- 静态shape编译
- 调试版本编译
支持的产品型号:
- Atlas 推理系列产品
- Atlas 训练系列产品
- Atlas A2训练系列产品/Atlas 800I A2推理产品
工具功能架构
算子编译工具的功能架构如图1所示。
- 开发者在执行此工具时,需要向此工具传入算子信息统计文件或者算子kernel_name(仅调试场景支持传入kernel_name)以及其他参数。
- 传入算子信息统计文件的场景下,算子编译工具获取该文件并解析。
- 判断开发者是否开启了调试版本编译选项:
- 如果开启,则进行调试版本编译,根据实际运行时使用的是静态shape还是动态shape编译出对应的静态shape或者动态shape的调试版本。
- 如果没有开启,判断开发者是否开启了调优编译参数,未开启调优编译参数,执行默认的静态shape编译流程;开启调优编译参数,则执行调优编译流程。
- 算子编译工具编译生成kernel文件并打包成算子kernel包。
静态编译
静态编译是指在编译时指定shape大小,运行时不需要指定shape大小。算子编译工具进行静态编译时,根据输入的算子信息统计文件,得到确定的shape信息,针对每一个shape都编译出一个算子二进制,编译原理如下图所示:
静态编译有如下优势:
- 编译时决定所有tensor的大小,存储空间利用率高。
- 编译时可以针对实际的shape大小做针对性优化。
- AI处理器擅长并行指令运行,不擅长逻辑计算,如果有太多的Scalar操作可能会打断并行指令的运行,从而导致性能下降。静态编译可以在编译时完成标量的计算,一定程度上可以提升性能。
- 编译工具在编译时知道确切的操作数据大小,不会额外插入同步,不会导致并行执行多个指令变成串行执行,一定程度上可以提升性能。
调优编译
如果想要进一步提升算子性能,可以使用算子编译工具的调优模式,尝试进行算子调优。
调试版本编译
在算子二进制的使用过程中,如果出现AICore Error或者内存越界等问题,可以编译出包含相关调试信息的调试版本,用于分析和定位问题。