我有一个可以在一个 GPU 中训练的深度学习模型,但是速度非常慢。有没有办法通过在多个 GPU 上并行化来加速训练?培训过程将如何?
我可以使用任何框架(pytorch、tensorflow 等)。而且我知道他们接受多个 GPU 以及如何做到这一点。我更感兴趣的是如何在概念上在 GPU 之间传播单个模型以获得性能。我主要用 RNN 做 NLP 模型,但我也对 CNN 感兴趣。
我有一个可以在一个 GPU 中训练的深度学习模型,但是速度非常慢。有没有办法通过在多个 GPU 上并行化来加速训练?培训过程将如何?
我可以使用任何框架(pytorch、tensorflow 等)。而且我知道他们接受多个 GPU 以及如何做到这一点。我更感兴趣的是如何在概念上在 GPU 之间传播单个模型以获得性能。我主要用 RNN 做 NLP 模型,但我也对 CNN 感兴趣。
你使用什么样的框架?如果您使用的是 Keras,它的最新版本支持多 GPU如何在多 GPU 上运行 keras 模型
如果你有一个 RNN 网络,使用 GPU 不会给你更多的性能。根据我的经验,大多数时候 CPU 学习速度更快。
请为您的问题提供更多信息。
更新
如果您在 Tensorflow 或 Keras 中有更复杂的架构,您可以为模型中的每个进程步骤分配一个特定的 GPU/CPU,模型的这一部分将在该 GPU/CPU 上工作。你可以这样做
with tf.device('/gpu:1'):
我认为你只需要尝试一下。这取决于您拥有的模型(您没有提供,因此复杂性未知)和数据量。您的整个数据集都在 RAM 中还是单独生成每个批次?如果您的架构中有多个分支,并且它们在某个点连接。哪个分支最慢?
首先,在做任何其他事情之前,我会尝试在 CPU 上训练你的模型。
这篇文章很好地概述了如何使用多 GPU。
有两种方法可以在多 GPU 中并行您的模型。一种是数据并行,它在每个GPU中复制整个模型,你应该将不同的数据输入到不同的GPU中;你必须付出的代价是你必须在更新权重之前将梯度合并为一个,所以这种方法更适合卷积。另一个是模型并行,你将模型分成多个部分,每个 gpu 被分配执行不同的部分;这样,您必须将部分输出传递给另一个部分,因此全连接层更适合。