是否有带有 CUDA 统一 GPU-CPU 内存叉的 PyTorch?
Is there a PyTorch with CUDA Unified GPU-CPU Memory fork?
因此,当一批图像占用 15GB 时,训练 DNN 模型可能会很痛苦。速度对我来说并不是那么重要,但要适应更大的批量(和模型才是)。所以我想知道是否有一个带有 CUDA 统一内存分支的 PyTorch 或类似的东西来适应巨型模型(每个 GPU RAM 有 16gb,但 CPU 一侧有 250 个似乎相当合理)?
如果不在意耗时,但需要大批量,可以使用更慢的方式。假设您需要一批 128 个样本,但您的 gpu 内存只能容纳 8 个样本。您可以创建 8 个样本的较小批次,然后平均它们的梯度。
对于您评估的每小批 8 个样本,您将每个参数的 .grad
保存在 cpu 内存中。您为每个模型参数保留一个梯度列表。在收集了 16 批 8 个样本(总共 128 个样本)的梯度后,您可以对每个参数的梯度进行平均,并将结果放回每个参数的 .grad
属性中。
然后您可以调用优化器的 .step()
。这应该会产生与使用一大批 128 个样本完全相同的结果。
因此,当一批图像占用 15GB 时,训练 DNN 模型可能会很痛苦。速度对我来说并不是那么重要,但要适应更大的批量(和模型才是)。所以我想知道是否有一个带有 CUDA 统一内存分支的 PyTorch 或类似的东西来适应巨型模型(每个 GPU RAM 有 16gb,但 CPU 一侧有 250 个似乎相当合理)?
如果不在意耗时,但需要大批量,可以使用更慢的方式。假设您需要一批 128 个样本,但您的 gpu 内存只能容纳 8 个样本。您可以创建 8 个样本的较小批次,然后平均它们的梯度。
对于您评估的每小批 8 个样本,您将每个参数的 .grad
保存在 cpu 内存中。您为每个模型参数保留一个梯度列表。在收集了 16 批 8 个样本(总共 128 个样本)的梯度后,您可以对每个参数的梯度进行平均,并将结果放回每个参数的 .grad
属性中。
然后您可以调用优化器的 .step()
。这应该会产生与使用一大批 128 个样本完全相同的结果。