在进行迁移后的训练/在线推理网络dump数据前,您需要完成训练/在线推理网络开发、编译和运行,确保具备可执行的训练/在线推理工程。
详细介绍请参见:
import os ... def main(): ... os.environ['DUMP_GE_GRAPH'] = '2'
在训练/在线推理过程中,计算图文件会保存在训练/在线推理脚本所在目录中。
from npu_bridge.npu_init import * # dump_path:dump数据存放路径,该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限 # enable_dump:是否开启dump功能 # dump_step:指定采集哪些迭代的dump数据 # dump_mode:dump模式,取值:input/output/all dump_config = DumpConfig(enable_dump=True, dump_path = "/home/HwHiAiUser/output", dump_step="0|5|10", dump_mode="all") config = NPURunConfig( dump_config=dump_config, session_config=session_config )
关于DumpConfig类的构造函数中每个字段的详细解释,请参见《TensorFlow 1.15网络模型迁移和训练指南》手册。
config = tf.ConfigProto() custom_op = config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" custom_op.parameter_map["use_off_line"].b = True custom_op.parameter_map["enable_dump"].b = True custom_op.parameter_map["dump_path"].s = tf.compat.as_bytes("/home/HwHiAiUser/output") custom_op.parameter_map["dump_step"].s = tf.compat.as_bytes("0|5|10") custom_op.parameter_map["dump_mode"].s = tf.compat.as_bytes("all") custom_op.parameter_map["dump_data"].s = tf.compat.as_bytes("stats") custom_op.parameter_map["dump_layer"].s = tf.compat.as_bytes("nodename1 nodename2 nodename3") config.graph_options.rewrite_options.remapping = RewriterConfig.OFF with tf.Session(config=config) as sess: print(sess.run(cost))
TensorFlow模型训练过程中可能存在算子溢出的情况,此时若直接进行精度比对操作则会造成比对结果不准确。参见《TensorFlow 1.15网络模型迁移和训练指南》中的“更多特性 > 溢出数据采集”章节可配置开启dump溢出数据。
参数名 |
描述 |
---|---|
enable_dump |
是否开启dump功能。取值为:
|
dump_path |
dump文件保存路径。enable_dump为True时,该参数必须配置。 该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限,支持配置绝对路径或相对路径(相对执行命令行时的当前路径)。 |
dump_step |
指定采集哪些迭代的dump数据。默认值:None,表示所有迭代都会产生dump数据。 多个迭代用“|”分割,例如:0|5|10;也可以用"-"指定迭代范围,例如:0|3-5|10。 |
dump_mode |
dump模式,用于指定dump算子输入还是输出数据。取值为:
|
dump_data |
指定算子dump内容类型,取值为:
大规模训练场景下,通常dump数据量太大并且耗时长,可以先dump所有算子的统计数据,根据统计数据识别可能异常的算子,然后再指定dump异常算子的input或output数据。 |
dump_layer |
指定需要dump的算子。取值为算子名,多个算子名之间使用空格分隔。若不配置此字段,默认dump全部算子。 |
路径key |
说明 |
备注 |
---|---|---|
dump_path |
dump数据存放路径(如果设置的是相对路径,则为拼接后的全路径)。 |
- |
time |
dump数据文件落盘的时间。 |
格式为:YYYYMMDDHHMMSS |
deviceid |
DeviceID。 |
- |
model_name |
子图名称。 |
model_name层可能存在多个文件夹,dump数据取计算图名称对应目录下的数据。 如果model_name出现了“.”、“/”、“\”以及空格时,转换为下划线表示。 |
model_id |
子图ID号。 |
-- |
data_index |
迭代数,用于保存对应迭代的dump数据。 |
如果指定了dump_step,则data_index和dump_step一致;如果不指定dump_step,则data_index序号从0开始计数,每dump一个迭代的数据,序号递增1。 |
执行训练脚本完成后会在训练脚本当前目录生成GE图文件,图文件可能会有多个。一般情况下,选取计算图文件方法:将TensorFlow模型保存为pb文件,然后查看该模型,选取其中一个计算类算子的名字作为关键字,找包含该关键字的计算图文件。计算图名称取计算图文件graph下的name字段值。
grep Iterator *_Build.txt
如上图所示,“ge_proto_00292_Build.txt”即为需要的计算图文件。
graph { name: "ge_default_20201209083353_71" op { name: "atomic_addr_clean0_71" type: "AtomicAddrClean" attr { key: "_fe_imply_type" value { i: 6 } }
文件命名各字段详细介绍请参见数据格式要求。