文档
注册

--status_check

功能说明

控制编译算子时是否添加溢出检测逻辑。

当模型计算精度有问题,并且怀疑是模型中算子有计算溢出时,模型编译时可以通过使能该参数,添加编译算子时的溢出检测逻辑,然后重新编译模型。

关联参数

使用该参数时,建议与--op_debug_level参数配合使用,这样在生成的算子*.cce文件中,可以查看是否加入了溢出检测逻辑,加入了溢出检测逻辑的代码样例如下:

  if (status_overflow[0]) {
    xxxxxx
}

参数取值

参数值:

  • 0:不使能,算子编译时不添加溢出检测逻辑。
  • 1:使能,算子编译时添加溢出检测逻辑。

参数默认值:0

示例

--status_check=1

支持的产品形态

Atlas 推理系列产品(Ascend 310P处理器)

Atlas 训练系列产品

使用约束

使用--status_check参数只是在模型编译后生成的算子*.cce文件中加入了溢出检测逻辑,如果想查看具体哪些算子有溢出,则需要配合模型推理过程中的AscendCL aclInit接口使用,在该接口入参的json配置文件中打开“dump_debug”开关:

  • 采集溢出算子信息
    AscendCL aclInit接口json配置文件中的示例内容如下,示例中的dump_path以相对路径为例:(关于AscendCL aclInit接口的详细介绍请参见应用软件开发指南(C&C++)
    {
        "dump":{
            "dump_path":"output",
            "dump_debug":"on"
        }
    }

    当dump_path配置为相对路径时,您可以在“应用可执行文件的目录/{dump_path}”下查看导出的数据文件,针对每个溢出算子,会导出两个数据文件:

    • 溢出算子的dump文件:命名规则如{op_type}.{op_name}.{taskid}.{stream_id}.{timestamp},如果op_type、op_name出现了“.”、“/”、“\”、空格时,会转换为下划线表示。

      用户可通过该信息知道具体出现溢出错误的算子,并通过•解析溢出算子的dump文件获取该算子的输入和输出信息。

    • 算子溢出数据文件:命名规则如OpDebug.Node_Opdebug.{taskid}.{stream_id}.{timestamp},其中taskid不是溢出算子的taskid,用户不需要关注taskid的实际含义。

      用户可通过•解析算子溢出数据文件获取溢出相关信息,包括溢出算子所在的模型、AICore的status寄存器状态等。

  • 解析溢出算子的dump文件
    1. 请根据实际情况,将{op_type}.{op_name}.{taskid}.{stream_id}.{timestamp}上传到安装有Ascend-cann-toolkit开发套件包的环境。
    2. 进入解析脚本所在目录,例如Ascend-cann-toolkit开发套件包安装目录为:/home/HwHiAiUser/Ascend/ascend-toolkit/latest
      cd /home/HwHiAiUser/Ascend/ascend-toolkit/latest/tools/operator_cmp/compare
    3. 执行msaccucmp.py脚本,转换dump文件为numpy文件。举例:
      python3 msaccucmp.py convert -d /home/HwHiAiUser/dump -out /home/HwHiAiUser/dumptonumpy -v 2

      -d参数支持传入单个文件,对单个dump文件进行转换,也支持传入目录,对整个path下所有的dump文件进行转换。

    4. 调用Python,转换numpy文件为txt文件。举例:
      $ python3
      >>> import numpy as np
      >>> a = np.load("/home/HwHiAiUser/dumptonumpy/Pooling.pool1.1147.1589195081588018.output.0.npy")
      >>> b = a.flatten()
      >>> np.savetxt("/home/HwHiAiUser/dumptonumpy/Pooling.pool1.1147.1589195081588018.output.0.txt", b)

      转换为.txt格式文件后,维度信息、Dtype均不存在。详细的使用方法请参考numpy官网介绍。

  • 解析算子溢出数据文件

    由于生成的溢出数据是二进制格式,可读性较差,需要通过工具将bin文件解析为用户可读性好的json文件。

    1. 请根据实际情况,将溢出数据文件OpDebug.Node_Opdebug.{taskid}.{timestamp}上传到安装有Toolkit软件包的环境。
    2. 进入解析脚本所在路径,例如Toolkit软件包安装目录为:/home/HwHiAiUser/Ascend/ascend-toolkit/latest
      cd /home/HwHiAiUser/Ascend/ascend-toolkit/latest/toolkit/tools/operator_cmp/compare
    1. 执行解析命令,例如:
      python3 msaccucmp.py convert -d /home/HwHiAiUser/opdebug/Opdebug.Node_OpDebug.59.1597922031178434  -out /home/HwHiAiUser/result

      关键参数:

      • -d:溢出数据文件所在目录,包括文件名。
      • -out:解析结果待存储目录,如果不指定,默认生成在当前目录下。
    1. 解析结果文件内容如下所示。
      {
          "DHA Atomic Add": {
              "model_id": 0,
              "stream_id": 0,
              "task_id": 0,
              "task_type": 0,
              "pc_start": "0x0",
              "para_base": "0x0",
              "status": 0
          },
          "L2 Atomic Add": {
              "model_id": 0,
              "stream_id": 0,
              "task_id": 0,
              "task_type": 0,
              "pc_start": "0x0",
              "para_base": "0x0",
              "status": 0
          },
          "AI Core": {
              "model_id": 514,
              "stream_id": 563,
              "task_id": 57,
              "task_type": 0,
              "pc_start": "0x1008005b0000",
              "para_base": "0x100800297000",
              "kernel_code": "0x1008005ae000",
              "block_idx": 1,
              "status": 32
          }
      }

      参数解释:

      • model_id:标识溢出算子所在的模型id。
      • stream_id:标识溢出算子所在的streamid。
      • task_id:标识溢出算子的taskid。
      • task_type:标识溢出算子的task类型。
      • pc_start:标识溢出算子的代码程序的内存起始地址。
      • para_base:标识溢出算子的参数的内存起始地址。
      • kernel_code:标识溢出算子的代码程序的内存起始地址,和pc_start相同。
      • block_idx:标识溢出算子的blockid参数。
      • status:AICore的status寄存器状态,用户可以从status值分析得到具体溢出错误。status为10进制表示,需要转换成16进制,然后定位到具体错误。

        例如:status为272,转换成16进制为0x00000110,则可以判定出可能原因为0x00000010+0x00000100。

        • 0x00000008: 符号整数最小负数NEG符号位取反溢出
        • 0x00000010: 整数加法、减法、乘法或乘加操作计算有溢出
        • 0x00000020: 浮点计算有溢出
        • 0x00000080: 浮点数转无符号数的输入是负数
        • 0x00000100: FP32转FP16或32位符号整数转FP16中出现溢出
        • 0x00000400: CUBE累加出现溢出
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词