前提条件
- 在进行TensorFlow 2.x原始训练网络生成npy或dump数据前,要求有一套完整、可执行的标准TensorFlow模型训练工程。GPU训练环境准备可以参考在ECS上快速创建GPU训练环境,链接内容仅供参考,请以实际训练场景为准。
- 参见tfdbg_ascend工具的readme文档安装TensorFlow 2.x的debug工具tfdbg_ascend。
- 首先要把脚本中所有的随机全部关闭,包括但不限于对数据集的shuffle,参数的随机初始化,以及某些算子的隐形随机初始化(比如dense算子),确认自己脚本内所有参数均非随机初始化。
生成npy数据文件
利用TensorFlow的debug工具tfdbg_ascend生成npy文件。详细的操作方法如下:
- 修改TensorFlow训练脚本,在调起模型部分的训练脚本.py文件中修改配置。示例代码如下。
样例一:
- 导入debug插件。
import tfdbg_ascend as dbg
- 在每个step训练启动代码前配置如下代码,例如dump第5个step的数据。
tfdbg.disable()
if current_step == 5:
tfdbg.enable()
tfdbg.set_dump_path('home/test/gpu_dump')
样例二:
- 导入debug插件。
import tfdbg_ascend as dbg
- 例如dump第4个step的数据。dbg.enable不配置时,dump功能默认开启;dump路径不指定时,dump文件默认保存在训练脚本所在路径下。
class DumpConfig(tf.keras.callbacks.Callback):
def __init__(self):
super().__init__()
def on_batch_begin(self, batch, logs={}):
if batch == 4:
dbg.enable()
dbg.set_dump_path("/user/name1/pip_pkg/dump4")
else:
dbg.disable()
- 注册回调函数(define callbacks )。
# define callbacks
callbacks = [
ModelCheckpoint(
f'models/model_epochs-{epochs}_batch-{batch_size}_loss-{loss_function}_{Mask2FaceModel.get_datetime_string()}.h5'),
LossHistory(batch_size),
DumpConfig()
]
# fit the model 调起模型的代码位置
history = self.model.fit(train_dataset, validation_data=valid_dataset, epochs=1, callbacks=callbacks, verbose=2)
- 执行训练脚本,训练任务停止后,在指定目录下生成*.npy文件。
- 检查生成的npy文件命名是否符合{op_name}.{output_index}.{timestamp}.npy格式,如图1所示。
- 如果因算子名较长,造成按命名规则生成的npy文件名超过255字符而产生文件名异常,这类算子不支持精度比对。
- 因tfdbg自身原因或运行环境原因,可能存在部分生成的npy文件名不符合精度比对要求,请按命名规则手工重命名。如果不符合要求的npy文件较多,请参见批量处理生成的npy文件名异常情况重新生成npy文件。
- npy文件命名各字段详细介绍请参见数据格式要求。
图1 查询.npy文件