训练网络执行过程中,发生频繁浮点异常问题时,可参见本节内容进行浮点异常检测。
溢出数据检测的主要流程如图1所示。
以下操作在NPU训练环境执行。
# 引用precision_tool/tf_config.py import precision_tool.tf_config as npu_tf_config # 1. 手工迁移网络 # 1.1 Estimator方式 dump_config=npu_tf_config.estimator_dump_config(action='overflow') npu_config = NPURunConfig(dump_config=dump_config) # 1.2 Session run方式 config = npu_tf_config.session_dump_config(config, action='overflow') sess = tf.Session(config) # 2. 自动迁移网络 # 若脚本中未配置custom_op,则在脚本中新增如下粗体语句 session_config = npu_tf_config.session_dump_config(session_config, action='overflow') # 若脚本中已配置custom_op,如下所示,则在脚本中新增下列粗体语句更新custom_op custom_op = session_config.graph_options.rewrite_options.custom_optimizers.add() custom_op.name = 'NpuOptimizer' custom_op.parameter_map["precision_mode"].s = tf.compat.as_bytes("allow_mix_precision") custom_op = npu_tf_config.update_custom_op(custom_op, action='overflow') # 2.1 Estimator方式 run_config = tf.estimator.RunConfig(session_config=session_config,...) # 2.2 Session run方式 with tf.Session(config=npu_config_proto(session_config)): .... # 2.3 tf.keras方式 npu_keras_sess = set_keras_session_npu_config(config=session_config)
溢出数据分析依赖CANN Toolkit软件包中的atc工具和msaccucmp.py工具,以下操作需要在CANN开发环境,即Toolkit安装环境进行。
├── precision_tool │ ├── cli.py │ ├── ... ├── precision_data │ ├── overflow │ │ ├── dump
pip3 install rich
# 依赖Toolkit包中的atc和msaccucmp.py工具,一般在run包安装目录,配置到父目录即可 # 默认Toolkit包安装在/usr/local/Ascend,可以不用修改,指定目录安装则需要修改 CMD_ROOT_PATH = '/usr/local/Ascend'
python3 ./precision_tool/cli.py
进入交互命令行界面:
PrecisionTool >
如需退出,可执行ctrl + c。
PrecisionTool > ac
根据数据量大小,分析过程需要时间不同,当执行过程中出现算子溢出,则会输出如下结果。
从上图可以看到:
当出现多个算子溢出时,会出现N个溢出算子信息,默认按照算子执行顺序排序,由于后面算子溢出可能是因为前一个算子溢出导致,建议用户优先分析第一个异常算子。
from npu_bridge.npu_init import * with npu_scope.keep_dtype_scope(): y = tf.mul(x1,x2)