我最近遇到了一种情况,即我在单个 Nvidia V100 上内存不足。我在使用多个 GPU 训练网络方面经验有限,因此我不太确定数据并行化过程的工作原理。假设我正在使用需要 20-25GB 内存的模型和批量大小。有什么方法可以利用两个 16GB V100 之间的全部 32GB 内存? PyTorch 的 DataParallel 功能会实现这一点吗?我想也有可能分解模型并使用模型并行性。请原谅我对这个问题缺乏了解。提前感谢您的帮助或澄清!
最佳答案
您应该将模型并行性作为您的最后资源,并且只有当您的模型不适合单个 GPU 的内存时(使用 16GB/GPU,您有足够的空间容纳一个巨大的模型)。
如果您有两个 GPU,我会使用数据并行。在数据并行中,你在每个 GPU 上都有一个模型副本,每个副本都有一个批处理。然后收集梯度并用于更新副本。
Pytorch 使实现数据并行变得非常容易,因为您只需要将模型实例包装在 nn.DataParallel
中即可。 :
model = torch.nn.DataParallel(model, device_ids=[0, 1])
output = model(input_var)
关于deep-learning - PyTorch 等深度学习框架在使用多个 GPU 时如何处理内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52285621/