如何在Tensorflow 2.0+;凯拉斯?
让我们从一个前提开始,即我刚刚开始学习TensorFlow和深度学习 我使用如何在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()
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基于
,而会话在TF2.0中是隐式的,如果我理解正确,我所读的解决方案对每个GPU使用单独的会话,我真的不知道如何在TF2.0中复制它TF.Session()
- 我不知道如何在特定会话中使用
方法model.predict()
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格式保存我的模型,这在将模型加载回分布式启动时是不受支持的。这不适用于模型。在批上预测(更大的批大小)对吗?