如何在Tensorflow 2.0+;凯拉斯?

如何在Tensorflow 2.0+;凯拉斯?,tensorflow,keras,predict,tensorflow2.0,multi-gpu,Tensorflow,Keras,Predict,Tensorflow2.0,Multi Gpu,让我们从一个前提开始,即我刚刚开始学习TensorFlow和深度学习 我使用TF.model.train()和两个可用的GPU对TF 2.0 Keras样式的模型进行了训练,我希望能够缩短推理时间 我使用非常方便的tf.distribute.MirroredStrategy().scope()上下文管理器训练了跨GPU分布的模型 mirrored_strategy = tf.distribute.MirroredStrategy() with mirrored_strategy.scope()

让我们从一个前提开始,即我刚刚开始学习TensorFlow和深度学习

我使用
TF.model.train()
和两个可用的GPU对TF 2.0 Keras样式的模型进行了训练,我希望能够缩短推理时间

我使用非常方便的
tf.distribute.MirroredStrategy().scope()
上下文管理器训练了跨GPU分布的模型

mirrored_strategy = tf.distribute.MirroredStrategy()

with mirrored_strategy.scope():
  model.compile(...)
  model.train(...)

两个GPU都得到了有效的使用(即使我对结果的准确性不太满意)

对于使用
tf.Model.predict()
方法在GPU之间分配推理,我似乎找不到类似的策略:当我运行
Model.predict()
时,我(显然)只从两个GPU中的一个获得使用

是否有可能在两个GPU上都显示相同的模型,并并行地向它们提供不同的数据块

有些帖子建议如何在TF 1.x中实现这一点,但我似乎无法复制TF2.0中的结果

我与这个问题的思想斗争主要是

  • TF 1.x基于
    TF.Session()
    ,而会话在TF2.0中是隐式的,如果我理解正确,我所读的解决方案对每个GPU使用单独的会话,我真的不知道如何在TF2.0中复制它
  • 我不知道如何在特定会话中使用
    model.predict()
    方法
我知道这个问题可能没有很好的表述,但我总结如下:

有人知道如何在TF2.0中的多个GPU上运行Keras style
model.predict()
(以并行方式推断每个GPU上的不同数据批)吗


提前感谢您的帮助。

尝试在
tf.distribute.MirroredStrategy
中加载模型,并使用更大的批处理大小

mirrored_strategy = tf.distribute.MirroredStrategy()

with mirrored_strategy.scope():
    model = tf.keras.models.load_model(saved_model_path)

result = model.predict(batch_size=greater_batch_size)

这可能会有帮助。我也有同样的问题,我的问题似乎源于这样一个事实:我正在以hdf5格式保存我的模型,这在将模型加载回分布式启动时是不受支持的。这不适用于模型。在批上预测(更大的批大小)对吗?