【发布时间】:2021-06-13 21:28:13
【问题描述】:
我希望我的模型在多个 GPU 共享参数上运行,但具有不同批次的数据。
我可以用model.fit() 做类似的事情吗?还有其他选择吗?
【问题讨论】:
标签: tensorflow keras multi-gpu
我希望我的模型在多个 GPU 共享参数上运行,但具有不同批次的数据。
我可以用model.fit() 做类似的事情吗?还有其他选择吗?
【问题讨论】:
标签: tensorflow keras multi-gpu
尝试使用 make_parallel 函数: https://github.com/kuza55/keras-extras/blob/master/utils/multi_gpu.py (它只适用于 tensorflow 后端)。
【讨论】:
Keras 现在(从 v2.0.9 开始)使用 keras.utils.multi_gpu_model 对跨多个 GPU 的设备并行性提供内置支持。
目前仅支持 Tensorflow 后端。
这里的好例子(文档):https://keras.io/getting-started/faq/#how-can-i-run-a-keras-model-on-multiple-gpus 也在这里介绍:https://datascience.stackexchange.com/a/25737
【讨论】:
在kera 多GPU模型训练比以往任何时候都非常方便。请查看以下文档:Multi-GPU and distributed training。
本质上,要使用keras 模型进行单主机、多设备同步训练,您将使用tf.distribute.MirroredStrategy API。以下是它的工作原理:
实例化 MirroredStrategy,可选择配置您要使用的特定设备(默认情况下,该策略将使用所有可用的 GPU)。
使用策略对象打开一个作用域,在这个作用域内,创建你需要的所有包含变量的 Keras 对象。通常,这意味着在分发范围内创建和编译模型。
像往常一样通过fit() 训练模型。
示意图如下:
# Create a MirroredStrategy.
strategy = tf.distribute.MirroredStrategy()
print('Number of devices: {}'.format(strategy.num_replicas_in_sync))
# Open a strategy scope.
with strategy.scope():
# Everything that creates variables should be under the strategy scope.
# In general this is only model construction & `compile()`.
model = Model(...)
model.compile(...)
# Train the model on all available devices.
model.fit(train_dataset, validation_data=val_dataset, ...)
# Test the model on all available devices.
model.evaluate(test_dataset)
【讨论】: