最近我遇到了一个Nvidia V100内存不足的情况。我使用多个GPU训练网络的经验有限,因此我不确定数据并行化过程如何工作。可以说我使用的模型和批量大小需要20-25GB的内存。有什么方法可以利用两个16GB V100之间的全部32GB内存吗? PyTorch的DataParallel功能可以实现吗?我想也有可能分解模型并使用模型并行性。请原谅我对此事缺乏知识。预先感谢您的帮助或澄清!
答案 0 :(得分:2)
只有当模型不能容纳在单个GPU的内存中时,才应将模型并行性作为最后的资源(对于16GB / GPU,您有足够的空间容纳巨大的模型)。
如果您有两个GPU,我将使用数据并行性。在数据并行性中,您在每个GPU上都有一个模型副本,并且每个副本都有一批。然后收集渐变并用于更新副本。
Pytorch使得实现数据并行性非常容易,因为您只需要将模型实例包装在nn.DataParallel
中即可:
model = torch.nn.DataParallel(model, device_ids=[0, 1])
output = model(input_var)