算子调优前,需要先获取模型中算子信息统计文件(*.json),包括算子的shape、dtype、format等信息。目前支持两种方式Dump算子json文件,请根据实际情况选择合适的方式。
在任意目录下,以运行用户(如HwHiAiUser)身份执行如下命令,进行算子编译:
op_compiler --op_params_dir=<dump_dir> --soc_version=<soc_version> --log=info --job=128 --output=<output_dir> op_compiler -p <dump_dir> -v <soc_version> -l info -j 128 -o <output_dir>
op_compiler --op_params_dir=<dump_dir> --soc_version=<soc_version> --log=info --job=128 --compile_mode=tune --output=<output_dir> op_compiler -p <dump_dir> -v <soc_version> -l info -j 128 -m tune -o <output_dir>
关键参数释义如下,请根据实际情况设置。
如果无法确定当前设备的soc_version,则在安装NPU驱动包的服务器执行npu-smi info命令进行查询,在查询到的“Name”前增加Ascend信息,例如“Name”对应取值为xxxyy,实际配置的soc_version值为Ascendxxxyy。
不输入路径的情况下,默认在当前编译命令执行路径下生成;不输入安装包名称的情况下,安装包默认命名为static_kernel_${datatime}.run。
算子编译工具提供了--count参数和-p参数配合使用,用于统计-p参数指定的目录下算子信息统计json文件的数目。
样例如下:
op_compiler -p <dump_dir> --count
只有动态shape才能dump出算子统计信息,安装静态kernel包后,静态kernel包对应算子的统计信息就不会dump出来。所以在安装静态kernel包后,如果网络有调整,可以通过调整前后dump的json文件的数量来判断静态kernel包和当前网络是否匹配。
通过调整网络前后,各执行一次dump操作,并通过--count命令来统计dump生成的json文件的数目,如果调整后的数目比调整前大,则说明静态kernel包中有部分算子不再匹配当前网络,此时开发者可以:
./static_kernel_${datatime}.run
当出现如下回显信息代表安装成功。
Verifying archive integrity... 100% SHA256 checksums are OK. All good. Uncompressing STATIC KERNEL RUN PACKAGE 100%
目前暂不支持指定目录安装,run包默认安装到${install_path}/opp/static_kernel路径下,其中${install_path}为CANN软件安装后文件存储路径,请根据实际情况替换该路径。
run包安装后的目录结构样例如下,
|-- ${install_path}/opp/static_kernel |-- ai_core |-- config |-- ascendxxxx |-- binary_info_config.json # 全量静态Kernel包的总索引 |-- config.ini # 记录安装顺序的配置文件。 |-- static_kernel_230808110316 # 时间戳为“230808110316”的静态Kernel文件 |-- ascendxxxx | |-- Add # 算子二进制目录 | |-- Add_float16_NCL_xxxx_d0.json | |-- Add_float16_NCL_xxxx_d1.json | |-- Add_float16_NCL_xxxx_d0.o | |-- Add_float16_NCL_xxxx_d1.o | |-- xxxx | |-- xxx.json | |-- xxx.o | |-- ...... |-- config # 单个静态Kernel包索引 | |-- ascendxxxx | |-- binary_info_config.json |-- scripts # 工具涉及的通用脚本 | |-- ...... |-- uninstall.sh # 单包卸载脚本 |-- static_kernel_xxxx # 不同时间戳的静态Kernel文件 |-- uninstall.sh # 全量卸载脚本 |-- version.info # 版本信息
支持多个Kernel包安装,如果多个包中存在相同的算子Kernel,以后安装的Kernel包为准。
进入static_kernel_${datatime}.run包的安装目录,以运行用户(如HwHiAiUser)身份运行uninstall.sh。
cd ${install_path}/opp/static_kernel/ai_core/static_kernel_${datatime} ./uninstall.sh
此时,ai_core目录下static_kernel_${datatime}文件夹被删除。
cd ${install_path}/opp/static_kernel/ai_core/ ./uninstall.sh
此时,ai_core目录下所有内容被删除,所有已安装的kernel包均被卸载。