Dump数据采集

概述

当训练网络精度未达预期时,可以通过采集训练过程中各算子的运算结果(即Data Dump数据),然后借助精度比对工具,和业界标准算子(如TensorFlow)运算结果进行数据偏差对比,从而帮助开发人员快速定位算子精度问题。当前支持采集的算子数据主要包括:

默认训练过程中不采集算子的dump数据,如需采集并对数据进行分析,除了可以参考本节方法外,还可以参考整网数据比对进行一键式dump数据采集和分析,这种方法简化了采集和分析方法,更友好易用,推荐使用。

使用注意事项

Estimator模式下采集Dump数据

sess.run模式下采集Dump数据

tf.keras模式修改

分布式场景下在指定的RANK上采集Dump数据

分布式的数据并发场景下,如果需要减少dump数据量,可以指定在某个RANK上采集Dump数据,下面以Estimator模式训练脚本为例介绍指定方法。

  if int(os.getenv('RANK_ID')) == 7:
      dump_flag = True
  else:
      dump_flag = False
    dump_config = DumpConfig(enable_dump=dump_flag, dump_path="/home/data_dump", dump_step="20", dump_mode="output")

执行训练,生成Dump数据

后续通过工具进行精度比对时,不仅依赖Dump数据,而且需要计算图结构,因此,在执行训练之前,需要配置环境变量dump图文件:
export DUMP_GE_GRAPH=2
export DUMP_GRAPH_PATH=/home/dumpgraph    # 指定dump图路径,如果不配置存储在训练脚本所在目录
  1. 执行训练,生成的dump图文件和dump数据文件。

    • dump图文件:生成在DUMP_GRAPH_PATH指定的目录下,以“ge”开头。
    • dump数据文件:生成在dump_path指定的目录下,即{dump_path}/{time}/{deviceid}/{model_name}/{model_id}/{data_index}目录下,以{dump_path}配置/home/HwHiAiUser/output为例,例如存放在“/home/HwHiAiUser/output/20200808163566/0/ge_default_20200808163719_121/11/0”目录下。
      • 每次迭代都会产生dump数据,在训练数据集较大的情况下,每次迭代的dump数据量很大(约几十G,甚至更多),建议控制迭代次数,一般仅执行一次迭代。
      • 多p环境下,因训练脚本中多device进程调起时间有差异会导致落盘时产生多个时间戳目录。
      • 在docker内执行时,生成的数据存在docker里。
      表1 dump数据文件路径格式说明

      路径key

      说明

      备注

      dump_path

      训练脚本中设置的dump_path路径(如果设置的是相对路径,则为拼接后的全路径)。

      --

      time

      dump数据文件落盘的时间

      格式为:YYYYMMDDHHMMSS

      deviceid

      Device设备ID号

      --

      model_name

      子图名称

      model_name层可能存在多个文件夹。

      如果model_name出现了“.”“/”“\”、空格时,转换为下划线表示。

      model_id

      子图ID号

      --

      data_index

      迭代数,用于保存对应迭代的dump数据

      如果指定了dump_step,则data_index和dump_step一致;如果不指定dump_step,则data_index序号从0开始计数,每dump一个迭代的数据,序号递增1。

      dump文件

      命名规则格式为{op_type}.{op_name}.{taskid}.{stream_id}.{timestamp}。如果按命名规则定义的文件名称长度超过了OS文件名称长度限制(一般是255个字符),则会将该dump文件重命名为一串随机数字,映射关系可查看同目录下的mapping.csv。

      如果op_type、op_name出现了“.”“/”“\”、空格时,转换为下划线表示。

    由于“ge”开头的dump图文件非常多,而且dump数据文件夹的model_name层可能存在多个文件夹,事实上,我们仅需要找到计算图文件,且仅需要model_name为计算图名称的文件夹。下面提供一些方法帮助用户快速找到对应的文件。

  2. 选取计算图文件。

    下面提供两种方法:
    • 方法一:在所有以“_Build.txt”为结尾的dump图文件中,查找“Iterator”这个关键词。记录查找出的计算图文件名称,用于后续精度比对。
      grep Iterator *_Build.txt

      如上图所示,“ge_proto_00292_Build.txt”文件即是我们需要找到的计算图文件。

    • 方法二:将TensorFlow模型保存为pb文件,然后查看该模型,选取其中一个计算类算子的名字作为关键字,包含该关键字的dump图文件即为计算图文件。

  3. 选取dump数据文件。

    1. 打开2中找到的计算图文件,记录graph中的name字段值。如下示例中,记录下“ge_default_20201209083353_71”。
      graph {
        name: "ge_default_20201209083353_71"
        op {
          name: "atomic_addr_clean0_71"
          type: "AtomicAddrClean"
          attr {
            key: "_fe_imply_type"
            value {
              i: 6
            }
      }
    2. 进入到dump数据文件夹,我们会看到model_name层存在多个文件夹:

    3. 找到刚记录的名称为计算图name值的文件夹,例如ge_default_20201209083353_71,该目录下的文件即为需要的dump数据文件。

通过精度比对工具进行精度分析

您可以通过精度比对工具解析Data Dump数据,从而进行算子精度分析,具体请参考精度比对工具使用指南

精度调优案例

昇腾社区上有部分精度调优案例,可供参考。