Tensorflow 如何在tf.keras代码中使用多个GPU进行循环训练?

Tensorflow 如何在tf.keras代码中使用多个GPU进行循环训练?,tensorflow,keras,deep-learning,tf.keras,Tensorflow,Keras,Deep Learning,Tf.keras,我正在尝试使用一所大学的HPC系统来训练一个模型,该系统在每个节点上有两个GPU和两个CPU(处理器;36核)。到目前为止,我一直试图使用tf.distribute.MirroredStrategy()仅用于GPU;然而,我并不成功。代码和错误如下所示。有人能帮我找到解决办法吗?完整的代码可以通过查看。多谢各位 strategy=tf.distribute.MirroredStrategy() 打印(“设备数:{}”.format(strategy.num\u replications\u in

我正在尝试使用一所大学的HPC系统来训练一个模型,该系统在每个节点上有两个GPU和两个CPU(处理器;36核)。到目前为止,我一直试图使用
tf.distribute.MirroredStrategy()
仅用于GPU;然而,我并不成功。代码和错误如下所示。有人能帮我找到解决办法吗?完整的代码可以通过查看。多谢各位

strategy=tf.distribute.MirroredStrategy()
打印(“设备数:{}”.format(strategy.num\u replications\u in\u sync))
#############################################
使用strategy.scope():
vae_model=vae_util.create_vae(输入形状)
vae_model.compile(优化器=opt,loss='mse')
#############################################
rec_损耗=vae_损耗(vae_模型输出,列车目标)
总损失=回收损失
更新=选择获取更新(总损失、vae模型、可训练重量)
迭代=K.函数(vae_model.inputs+[train_target],[rec_loss],updates=updates)
评估记录损失=vae损失(vae模型输出、测试目标)
评估=K.功能(vae\u模型输入+测试目标],[评估记录损失])
输出\u目录='/已保存的\u模型/'
#训练
对于范围内的e(历元):
对于范围内的ib(数量批次):
ind0=ib*批量大小
n_itr=e*序列号+ind0+批量大小#用于张力板输出
x_批次=序列x[ind0:ind0+批次大小,…]
y\u批次=序列y[ind0:ind0+批次大小,…]
rec_loss_val=迭代([x_批次]+[y_批次])
评估损失=评估([测试x[:100,…]]+[测试y[:100,…]])
如果ib%100==0:
打印('历元%d/%d,批次%d/%d,记录丢失%f'(e+1,历元,ib+1,数量批次,记录丢失值[0]))
打印('历元%d/%d,列车记录丢失%f,评估记录丢失%f'(e+1,历元,记录丢失值[0],评估丢失值[0]))
如果(e+1)%10==0:
vae_model.save_weights(输出_dir+‘训练的_model_ep%d.h5’((e+1)))
vae_model.save_weights(输出_dir+‘训练的_model_ep%d.h5’((e+1)))
回溯(最近一次呼叫最后一次):
文件“train_full_data_set.py”,第120行,在
更新=选择获取更新(总损失、vae模型、可训练重量)
文件“/lib/python3.8/site packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py”,第654行,在get_updates中
返回[自应用梯度(梯度和变量)]
文件“/lib/python3.8/site packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py”,第519行,应用梯度
自身。创建所有权重(变量列表)
文件“/lib/python3.8/site packages/tensorflow/python/keras/optimizer\u v2/optimizer\u v2.py”,第704行,位于“创建所有权重”
自创建插槽(变量列表)
文件“/lib/python3.8/site packages/tensorflow/python/keras/optimizer\u v2/adam.py”,第127行,位于创建槽中
self.add_插槽(变量'm')
文件“/lib/python3.8/site packages/tensorflow/python/keras/optimizer\u v2/optimizer\u v2.py”,第751行,在add\u槽中
升值误差(
ValueError:尝试在tf.distribute.Strategy()的作用域下创建优化器插槽变量,该变量与原始变量使用的作用域不同(MirroredVariable:{
0: ,
1: 
})。确保在相同的策略作用域下创建插槽变量。如果从作用域外的检查点还原,则可能会发生这种情况
信息:

Tensorflow 2.3.2 [物理设备(名称='/物理设备:CPU:0',设备类型='CPU'),物理设备(名称='/物理设备:GPU:0',设备类型='GPU'),物理设备(名称='/物理设备:GPU:1',设备类型='GPU')]