【问题标题】:How to do multi GPU training with Keras?如何使用 Keras 进行多 GPU 训练?
【发布时间】:2021-06-13 21:28:13
【问题描述】:

我希望我的模型在多个 GPU 共享参数上运行,但具有不同批次的数据。

我可以用model.fit() 做类似的事情吗?还有其他选择吗?

【问题讨论】:

    标签: tensorflow keras multi-gpu


    【解决方案1】:

    尝试使用 make_parallel 函数: https://github.com/kuza55/keras-extras/blob/master/utils/multi_gpu.py (它只适用于 tensorflow 后端)。

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        【解决方案3】:

        多GPU模型训练比以往任何时候都非常方便。请查看以下文档:Multi-GPU and distributed training


        本质上,要使用 模型进行单主机、多设备同步训练,您将使用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)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-20
          • 2017-07-13
          • 2021-05-23
          • 1970-01-01
          • 2021-04-24
          • 2020-03-24
          相关资源
          最近更新 更多