定位AI Core Error问题时,需提前收集故障信息,支持以下两种方式:
故障信息收集方式 |
收集方式说明 |
注意事项 |
---|---|---|
用户手动收集 |
从Host服务器的各目录下收集仅与AI Core Error问题有关的信息,包括exception dump文件、算子编译信息、Host应用类日志文件。具体收集方法请参见用户手动收集方法。 |
|
工具自动收集 |
在Host服务上,使用asys工具收集所有故障相关信息,包括安装版本信息、Device健康状态信息、exception dump文件、算子编译信息、全量日志文件等。具体收集方法请参见工具自动收集方法。 注意:asys工具使用场景有限,集群、容器、虚拟机、云场景不支持asys工具一键式收集故障信息。 |
mkdir aic_err_info
mv ${HOME}/ascend/log aic_err_info/
# 在Host上有读写权限的目录下(例如${HOME}/ascend/report)执行msnpureport命令 Driver安装目录/driver/tools/msnpureport -f #拷贝日志文件到aic_err_info目录 mv ${HOME}/ascend/report aic_err_info/
mv $HOME/ascend/atrace ${HOME}/aic_err_info/
由于Host服务器中trace日志不会自动清理,占用磁盘空间可能比较大,如果内存空间有限,用户也可以按需拷贝$HOME/ascend/atrace/目录下的指定进程的trace日志,拷贝命令示例:cp -rf $HOME/ascend/atrace/trace_{进程组pid}* aic_err_info/
exception dump文件默认存放在执行推理应用或训练脚本的当前路径的extra-info目录下,如果配置了环境变量ASCEND_WORK_PATH,则${ASCEND_WORK_PATH}/extra-info目录下。extra-info目录下包含AI Core Error相关的输入、输出数据文件extra-info/data-dump/{device_id}/exception_info.{stream_id}.{task_id}.{时间戳}。
将exception dump文件移至aic_err_info目录下:
mv <执行应用的路径>/extra-info aic_err_info/
或
mv ${ASCEND_WORK_PATH}/extra-info aic_err_info/
此处收集的dump文件无法通过文本工具直接查看其内容,若需查看dump文件内容,先将dump文件转换为numpy格式文件后,再通过Python查看numpy格式文件,详细转换步骤请参见《精度比对工具使用指南》中的“扩展功能>查看dump数据文件”章节,转换后的结果示例如下:
# 转换前的dump文件示例 aclnnMatmul_4886226_L0.MatMulCommon.3975510.1717053072064889 # 转换后的npy文件示例 aclnnMatmul_4886226_L0.MatMulCommon.3975510.1717053072064889.input.0.npy aclnnMatmul_4886226_L0.MatMulCommon.3975510.1717053072064889.input.1.npy aclnnMatmul_4886226_L0.MatMulCommon.3975510.1717053072064889.output.0.npy
先从缓存目录下查找算子.json和.o文件,默认为${HOME}/atc_data目录,如果配置了ASCEND_CACHE_PATH环境变量,则从该环境变量配置的路径下查找。如果找不到,再从CANN软件安装路径查找,CANN软件默认安装路径为/usr/local/Ascend。
查找算子.json文件时,以日志中的kernel_name为关键字,但如果kernel_name中包含_mix_aic或_mix_aiv,在搜索时需剔除_mix_aic或_mix_aiv,例如kernel_name为xxx_mix_aic_kernel0,在搜索时需使用xxx_kernel0关键字来搜索;再例如kernel_name为xxx_tilingkey_mix_aic,在搜索时需以关键字xxx_tilingkey来搜索。查找命令示例如下,在${HOME}/atc_data目录下查找:
# 剔除_mix_aic或_mix_aiv,其中xxxxxx需替换为实际的kernel_name kernel_name=xxxxxx kernel_name=$(echo $kernel_name | sed 's/_mix_aic//g' | sed 's/_mix_aiv//g' ) # 找到对应的json文件 find ${HOME}/atc_data/ -name "*.json"|xargs grep -rn $kernel_name
查找算子.o文件时,以算子.json文件中的binFileName字段值(该值为.o文件名)为关键字搜索。查找命令示例如下,在${HOME}/atc_data目录下查找:
# 在json文件中查看"binFileName":xxxxxx获取到.o文件名 find ${HOME}/atc_data/ -name xxxxxx.o # 将对应的.o和.json文件拷贝到aic_err_info目录中 mv xxxxxx.json aic_err_info/ mv xxxxxx.o aic_err_info/
使用工具收集信息后,需检查dfx/data-dump目录下是否存在dump文件、检查dfx/ops目录下是否存在算子编译信息(算子编译*.o和*.json文件)、检查dfx/log/host/cann目录下是否日志文件,若不存在,则无法使用msaicerr工具提取AI Core Error信息。
asys工具的使用约束请参见asys工具功能及约束,在使用asys工具前需先安装、配置asys工具,请先参见asys工具使用指导(EP模式)处的前提条件说明。
若不涉及业务复跑,则可以执行asys collect命令,直接收集故障信息;若涉及业务复跑,则可以执行asys launch命令,同时执行业务复跑和收集故障信息。命令示例如下:
asys collect [--output="path"]
output表示收集信息所存放的目录,详细参数说明及约束请参见故障信息收集。
asys launch --task="sh ../app_run.sh" [--output="path"]
task表示要复跑的任务,output表示收集信息所存放的目录,详细参数说明及约束请参见业务复跑+故障信息收集。
注意:离线推理场景下,若需要重新构建模型(例如通过ATC工具转换模型),需先使用asys launch命令复跑构建模型的任务,再使用重新编译的模型、使用asys launch命令复跑推理业务。另外,还需将构建模型时收集的维测信息与推理时收集的维测信息放到一个目录下,例如:$HOME/asys_output。