tensorflow 单机到分布式 tf.train.SyncReplicasOptimizer + monitoredtrainningsession

reduce_grads = average_gradients(tower_grads)
        opt = tf.train.SyncReplicasOptimizer(
          opt_gpu,
          replicas_to_aggregate=num_workers,
          total_num_replicas=num_workers,
          name="sync_replicas")
        apply_gradient_op = opt.apply_gradients(reduce_grads, global_step=global_step)

...

hooks = [opt.make_session_run_hook((FLAGS.task_index == 0),num_tokens=0),
             tf.train.StopAtStepHook(last_step=1000000),
             tf.train.LoggingTensorHook(tensors={'step': global_step, 'loss': total_loss}, every_n_iter=10)]

...
with tf.train.MonitoredTrainingSession(master=server.target,
                                     is_chief=(FLAGS.task_index == 0),
                                     checkpoint_dir="/weixue/my_bench/train_logs",
                                     hooks = hooks,
                                     scaffold=scaffold,
                                     config = config) as mon_sess:
问题记录:

1. opt的顺序

2.var的initialize

3.hook参数增加了num_tokens=0 

This is supposed to be executed in the beginning of the chief/sync thread so that even if the total_num_replicas is less than replicas_to_aggregate, the model can still proceed as the replicas can compute multiple steps per variable update. Make sure:
`num_tokens >= replicas_to_aggregate - total_num_replicas`.

当replicas_to_aggregate = total_num_replicas,不要往queue中继续添加op

TensorFlow中,模型的保存和加载是一个非常重要的功能,但是直接使用`saver=tf.train.Saver()`来保存和加载模型有时候会出现一些问题,比如保存的模型无法在不同的TensorFlow版本中加载,或者无法加载某些变量等。因此,我们需要对`saver=tf.train.Saver()`进行优化,具体方法如下: 1. 使用`tf.train.Checkpoint()`来保存和加载模型。 `tf.train.Checkpoint()`是TensorFlow2中的一种新的保存和加载模型的方式,可以更好地支持分布式训练和多种模型架构。使用`tf.train.Checkpoint()`保存和加载模型的示例如下: ``` import tensorflow as tf # 定义模型及训练过程 # ... # 创建一个Checkpoint对象 checkpoint = tf.train.Checkpoint(model=model) # 在训练过程中保存模型 checkpoint.save(save_path) # 加载模型 checkpoint.restore(load_path) ``` 在这种方式下,我们只需要定义一个`tf.train.Checkpoint()`对象,然后将所有需要保存的变量作为该对象的属性即可。这种方式的优点在于,它不需要定义一个字典来保存变量名和变量值的对应关系,而是直接通过属性名来保存和加载变量。 2. 使用`tf.keras.callbacks.ModelCheckpoint()`来保存模型。 `tf.keras.callbacks.ModelCheckpoint()`是TensorFlow2中的一个回调函数,可以在每个epoch结束时保存模型。使用`tf.keras.callbacks.ModelCheckpoint()`保存模型的示例如下: ``` import tensorflow as tf # 定义模型及训练过程 # ... # 创建一个ModelCheckpoint对象 checkpoint = tf.keras.callbacks.ModelCheckpoint(save_path) # 在训练过程中保存模型 model.fit(x_train, y_train, epochs=10, callbacks=[checkpoint]) ``` 在这种方式下,我们只需要定义一个`tf.keras.callbacks.ModelCheckpoint()`对象,并将保存路径作为参数传入即可。该对象会在每个epoch结束时自动保存模型,无需手动调用保存函数。 综上所述,如果您正在使用TensorFlow2,建议使用`tf.train.Checkpoint()`或`tf.keras.callbacks.ModelCheckpoint()`来保存和加载模型,以获得更好的兼容性和易用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值