Dump数据采集

概述

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

默认训练过程中不采集算子的dump数据,如需采集并对数据进行分析,可从以下两种方法中任选一种:

  • 参考整网数据比对进行一键式dump数据采集和分析。此方法简化了采集和分析方法,更友好易用,推荐使用。
  • 参考本节内容。

使用注意事项

Estimator模式修改

  1. 检查迁移后的脚本是否存在“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)
  2. 在迁移后的脚本中找到“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))
  3. 配置相关参数:
    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))
  4. 如果脚本中的运行配置函数,例如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模式修改

  1. 检查迁移后的脚本是否存在“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)
  2. 在脚本中找到“npu_config_proto”:
    with tf.Session(config=npu_config_proto()) as sess:
        sess.run(tf.global_variables_initializer())
        interaction_table.init.run()
  3. 配置相关参数:
    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模式修改

  1. 检查迁移后的脚本是否存在“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)
  2. 在脚本中找到“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()
    
    #数据预处理...
    #模型搭建...
    #模型编译...
    #模型训练...
  3. 配置相关参数:
    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)
    
    #数据预处理...
    #模型搭建...
    #模型编译...
    #模型训练...