【发布时间】:2020-05-09 10:20:51
【问题描述】:
作为强化学习训练系统的一部分,我使用四个 GPU 并行训练四个策略。对于每个模型,有两个进程——参与者和学习者,它们只使用它们特定的 GPU(例如,对应于模型 #2 的参与者和学习者只使用 GPU #2 来处理它们的所有张量)。 Actor 和Learner 通过torch 的share_memory_() 共享模型层。
由于四个训练“子系统”是完全对称的,我希望它们在四个 GPU 上使用完全相同数量的 GPU 内存。然而,在实践中,我发现在第一个 GPU (cuda:0) 上分配了更多的 GPU 内存。
感觉所有的内存共享都是通过 GPU #0 完成的。有没有办法解决这个问题?
到目前为止,我尝试通过显式更改进程start 函数中的os.environ 在子进程中设置CUDA_VISIBLE_DEVICES。这似乎没有任何效果,可能是因为子进程是从主进程派生出来的,其中 PyTorch CUDA 已经初始化,并且此时似乎忽略了 envvars。
【问题讨论】:
-
如果我有能力拥有四个 2080 RTX,那么我很乐意尝试并提供帮助。这是我很想遇到的问题。
-
公司为此类事情付费;)
标签: deep-learning gpu pytorch