【问题标题】:How do deep learning frameworks such as PyTorch handle memory when using multiple GPUs?PyTorch 等深度学习框架在使用多个 GPU 时如何处理内存?
【发布时间】:2019-02-16 12:44:35
【问题描述】:
我最近遇到了单个 Nvidia V100 内存不足的情况。我使用多个 GPU 来训练网络的经验有限,所以我有点不确定数据并行化过程的工作原理。假设我正在使用需要 20-25GB 内存的模型和批量大小。有什么办法可以利用两个 16GB V100 之间的全部 32GB 内存? PyTorch 的 DataParallel 功能会实现这一点吗?我想也有可能分解模型并使用模型并行性。请原谅我缺乏这方面的知识。提前感谢您的帮助或澄清!
【问题讨论】:
标签:
deep-learning
gpu
hardware
pytorch
【解决方案1】:
您应该将模型并行性作为最后的资源,并且仅当您的模型不适合单个 GPU 的内存时(使用 16GB/GPU,您有足够的空间容纳巨大的模型)。
如果您有两个 GPU,我会使用数据并行。在数据并行性中,您在每个 GPU 上都有一个模型副本,并且每个副本都有一个批次。然后收集梯度并用于更新副本。
Pytorch 让实现数据并行变得非常容易,因为您只需将模型实例包装在 nn.DataParallel 中:
model = torch.nn.DataParallel(model, device_ids=[0, 1])
output = model(input_var)