收集AI Core Error问题信息

收集前须知

定位AI Core Error问题时,需提前收集故障信息,支持以下两种方式

故障信息收集方式

收集方式说明

注意事项

用户手动收集

从Host服务器的各目录下收集仅与AI Core Error问题有关的信息,包括exception dump文件、算子编译信息、Host应用类日志文件。具体收集方法请参见用户手动收集方法

  • 依赖PyTorch/MindSpore/TensorFlow框架的业务,无需复跑业务,默认收集exception dump信息。
  • 不依赖或不使用PyTorch/MindSpore/TensorFlow框架的业务,设置NPU_COLLECT_PATH环境变量后,需复跑业务,可收集exception dump信息。

    若设置了此环境变量,部分算子可能会重新编译时,因此可能会导致业务变慢。

    如果通过环境变量收集exception dump信息异常,还可以通过修改aclInit接口或aclmdlSetDump接口的json配置文件接口配置收集exception dump信息,json配置示例如下,修改后需重新编译应用程序、复跑业务:

    {
       "dump":{
               "dump_scene":"lite_exception"
        }
    }

    关于aclInit接口或aclmdlSetDump接口的详细说明请参见CANN AscendCL应用软件开发指南(C&C++)

  • 如果日志中的时间与发生AI Core Error问题的时间相距较远,则旧日志可能已经被覆盖或清理,这种场景需复跑业务后,再收集故障信息。

工具自动收集

在Host服务上,使用asys工具收集所有故障相关信息,包括安装版本信息、Device健康状态信息、exception dump文件、算子编译信息、全量日志文件等。具体收集方法请参见工具自动收集方法

注意:asys工具使用场景有限,集群、容器、虚拟机、云场景不支持asys工具一键式收集故障信息。

用户手动收集方法

  1. 创建一个空目录(此处以aic_err_info为例),用于承载收集到的AI Core Error问题信息。
    mkdir aic_err_info
  2. 收集日志文件。
    关于日志级别、日志路径以及日志文件的详细介绍请参见日志参考
    • Host侧应用类日志的默认路径为Host服务器的${HOME}/ascend/log目录。将日志文件拷贝至aic_err_info目录下:
      mv ${HOME}/ascend/log aic_err_info/ 
    • Device侧系统类日志(包括slog日志、syslog日志、黑匣子等)通过使用msnpureport工具导出到Host侧,然后再拷贝至aic_err_info目录下:
      # 在Host上有读写权限的目录下(例如${HOME}/ascend/report)执行msnpureport命令
      Driver安装目录/driver/tools/msnpureport -f
      
      #拷贝日志文件到aic_err_info目录
      mv ${HOME}/ascend/report aic_err_info/ 
    • trace日志的默认路径为Host服务器的$HOME/ascend/atrace/目录。将日志文件拷贝至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/

  3. 收集exception dump文件。

    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
  4. 收集算子编译信息,指算子.json和.o文件。

    先从缓存目录下查找算子.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命令,同时执行业务复跑和收集故障信息。命令示例如下: