有带CUDA统一GPU-CPU内存叉的PyTorch吗?

有带CUDA统一GPU-CPU内存叉的PyTorch吗?,pytorch,unified-memory,Pytorch,Unified Memory,因此,当一批图像需要15GB时,训练DNN模型可能是一件痛苦的事情。速度对我来说并不是那么重要,但要适应更大的批量(而且型号也是如此)。因此,我想知道是否有一款配备CUDA统一内存叉的Pytork或类似产品来适应大型机型(每个GPU RAM有16gb,但CPU端有250 GB,这似乎是合理的)?如果您不在乎所需时间,但需要大批量,您可以使用更慢的方法。假设您需要一批128个样本,但您的gpu内存只能容纳8个样本。您可以创建8个样本的较小批次,然后平均它们的梯度 对于您评估的每一小批8个样本,将每

因此,当一批图像需要15GB时,训练DNN模型可能是一件痛苦的事情。速度对我来说并不是那么重要,但要适应更大的批量(而且型号也是如此)。因此,我想知道是否有一款配备CUDA统一内存叉的Pytork或类似产品来适应大型机型(每个GPU RAM有16gb,但CPU端有250 GB,这似乎是合理的)?

如果您不在乎所需时间,但需要大批量,您可以使用更慢的方法。假设您需要一批128个样本,但您的gpu内存只能容纳8个样本。您可以创建8个样本的较小批次,然后平均它们的梯度

对于您评估的每一小批8个样本,将每个参数的
.grad
保存在cpu内存中。为每个模型参数保留一个梯度列表。收集了16批8个样本(总共128个样本)的梯度后,可以平均每个参数的梯度,并将结果放回每个参数的
.grad
属性中


然后可以调用优化器的
.step()
。这将产生与使用128个样本的大批量样本完全相同的结果。

看起来,即使存在这样的解决方案,CPU部分也将是一个瓶颈,您可能不会从GPU中获得太多好处。你考虑过使用吗?不过,如果使用批处理规范化层,这可能会变得很棘手。