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

默认训练过程中不采集算子的dump数据,如需采集并对数据进行分析,可从以下两种方法中任选一种:
- 参考整网数据比对进行一键式dump数据采集和分析。此方法简化了采集和分析方法,更友好易用,推荐使用。
- 参考本节内容。
使用注意事项
- 当前支持采集所有迭代的dump数据,也支持用户指定dump的迭代数。在训练数据集较大的情况下,每次迭代的dump数据量很大(约几十G,甚至更多),建议控制迭代次数。
- 不能同时采集算子的dump数据和溢出检测数据,即不能同时开启enable_dump_debug和enable_dump。
- 当前仅支持采集AI Core和AI CPU算子的dump数据,不支持采集集合通信算子的dump数据。
- 建议在dump数据时,仅保留对计算过程的sess.run,删除不必要的sess.run代码,例如sess.run(globle_step),否则可能出现dump异常。
Estimator模式修改
- 检查迁移后的脚本是否存在“init_resource”。
- 如果存在,则需要参考下面示例进行修改;修改完后,执行下一步。
- 如果不存在,则直接执行下一步。
if __name__ == '__main__': session_config = tf.ConfigProto() custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" # enable_dump:是否开启Dump功能 custom_op.parameter_map["enable_dump"].b = True # dump_path:dump数据存放路径,该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限 custom_op.parameter_map["dump_path"].s = tf.compat.as_bytes("/home/HwHiAiUser/output") # dump_step:指定采集哪些迭代的Dump数据 custom_op.parameter_map["dump_step"].s = tf.compat.as_bytes("0|5|10") # dump_mode:Dump模式,取值:input/output/all custom_op.parameter_map["dump_mode"].s = tf.compat.as_bytes("all") (npu_sess, npu_shutdown) = init_resource(config=session_config) tf.app.run() shutdown_resource(npu_sess, npu_shutdown) close_session(npu_sess)
- 在迁移后的脚本中找到“npu_run_config_init”:
session_config = tf.ConfigProto(allow_soft_placement=True) run_config = tf.estimator.RunConfig( train_distribute=distribution_strategy, session_config=session_config, save_checkpoints_secs=60*60*24) classifier = tf.estimator.Estimator( model_fn=model_function, model_dir=flags_obj.model_dir, config=npu_run_config_init(run_config=run_config))
- 配置相关参数:
session_config = tf.ConfigProto(allow_soft_placement=True) custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = 'NpuOptimizer' # enable_dump:是否开启Dump功能 custom_op.parameter_map["enable_dump"].b = True # dump_path:dump数据存放路径,该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限 custom_op.parameter_map["dump_path"].s = tf.compat.as_bytes("/home/HwHiAiUser/output") # dump_step:指定采集哪些迭代的Dump数据 custom_op.parameter_map["dump_step"].s = tf.compat.as_bytes("0|5|10") # dump_mode:Dump模式,取值:input/output/all custom_op.parameter_map["dump_mode"].s = tf.compat.as_bytes("all") run_config = tf.estimator.RunConfig( train_distribute=distribution_strategy, session_config=session_config, save_checkpoints_secs=60*60*24) classifier = tf.estimator.Estimator( model_fn=model_function, model_dir=flags_obj.model_dir, config=npu_run_config_init(run_config=run_config))
- 如果脚本中的运行配置函数,例如RunConfig中没有传入session_config参数,需要自行传入session_config:
session_config = tf.ConfigProto(allow_soft_placement=True) custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = 'NpuOptimizer' # 使能相关配置 custom_op.parameter_map["xxx"].x = xxx run_config = tf.estimator.RunConfig( train_distribute=distribution_strategy, session_config=session_config, save_checkpoints_secs=60*60*24) classifier = tf.estimator.Estimator( model_fn=model_function, model_dir=flags_obj.model_dir, config=npu_run_config_init(run_config=run_config))
sess.run模式修改
- 检查迁移后的脚本是否存在“init_resource”。
- 如果存在,则需要参考下面示例进行修改;修改完后,执行下一步。
- 如果不存在,则直接执行下一步。
if __name__ == '__main__': session_config = tf.ConfigProto() custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" # enable_dump:是否开启Dump功能 custom_op.parameter_map["enable_dump"].b = True # dump_path:dump数据存放路径,该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限 custom_op.parameter_map["dump_path"].s = tf.compat.as_bytes("/home/HwHiAiUser/output") # dump_step:指定采集哪些迭代的Dump数据 custom_op.parameter_map["dump_step"].s = tf.compat.as_bytes("0|5|10") # dump_mode:Dump模式,取值:input/output/all custom_op.parameter_map["dump_mode"].s = tf.compat.as_bytes("all") (npu_sess, npu_shutdown) = init_resource(config=session_config) tf.app.run() shutdown_resource(npu_sess, npu_shutdown) close_session(npu_sess)
- 在脚本中找到“npu_config_proto”:
with tf.Session(config=npu_config_proto()) as sess: sess.run(tf.global_variables_initializer()) interaction_table.init.run()
- 配置相关参数:
config_proto = tf.ConfigProto() custom_op = config_proto.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = 'NpuOptimizer' 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") config = npu_config_proto(config_proto=config_proto) with tf.Session(config=config) as sess: sess.run(tf.global_variables_initializer()) interaction_table.init.run()
tf.keras模式修改
- 检查迁移后的脚本是否存在“init_resource”。
- 如果存在,则需要参考下面示例进行修改;修改完后,执行下一步。
- 如果不存在,则直接执行下一步。
if __name__ == '__main__': session_config = tf.ConfigProto() custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = "NpuOptimizer" # enable_dump:是否开启Dump功能 custom_op.parameter_map["enable_dump"].b = True # dump_path:dump数据存放路径,该参数指定的目录需要在启动训练的环境上(容器或Host侧)提前创建且确保安装时配置的运行用户具有读写权限 custom_op.parameter_map["dump_path"].s = tf.compat.as_bytes("/home/HwHiAiUser/output") # dump_step:指定采集哪些迭代的Dump数据 custom_op.parameter_map["dump_step"].s = tf.compat.as_bytes("0|5|10") # dump_mode:Dump模式,取值:input/output/all custom_op.parameter_map["dump_mode"].s = tf.compat.as_bytes("all") (npu_sess, npu_shutdown) = init_resource(config=session_config) tf.app.run() shutdown_resource(npu_sess, npu_shutdown) close_session(npu_sess)
- 在脚本中找到“set_keras_session_npu_config”:
import tensorflow as tf import tensorflow.python.keras as keras from tensorflow.python.keras import backend as K from npu_bridge.npu_init import * npu_keras_sess = set_keras_session_npu_config() #数据预处理... #模型搭建... #模型编译... #模型训练...
- 配置相关参数:
import tensorflow as tf import tensorflow.python.keras as keras from tensorflow.python.keras import backend as K from npu_bridge.npu_init import * config_proto = tf.ConfigProto() custom_op = config_proto.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = 'NpuOptimizer' 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") npu_keras_sess = set_keras_session_npu_config(config=config_proto) #数据预处理... #模型搭建... #模型编译... #模型训练...
父主题: 更多特性