starry-sky6688 / MARL-Algorithms

Implementations of IQL, QMIX, VDN, COMA, QTRAN, MAVEN, CommNet, DyMA-CL, and G2ANet on SMAC, the decentralised micromanagement scenario of StarCraft II
1.46k stars 283 forks source link

内存泄漏问题 #90

Closed hccz95 closed 2 years ago

hccz95 commented 2 years ago

在运行COMA算法时,我发现runner.py的44行,调用self.rolloutWorker.generate_episode(episode_idx)时貌似造成了内存泄漏,导致整个程序的内存占用不断增加,最终消耗所有内存

starry-sky6688 commented 2 years ago

你有该改过代码吗?比如把某些变量值保存了下来

hccz95 commented 2 years ago

你有该改过代码吗?比如把某些变量值保存了下来

我没有做任何修改。后来我进行了一些尝试,发现在rollout.py的61行前面加上with torch.no_grad():之后,就不存在内存泄漏问题了。但是不知道怎么解释

starry-sky6688 commented 2 years ago

这里的action是一个tensor,所以还包含了梯度等其他信息;可能你的机器还没来得及把之前的action占用的空间删掉,这样累计下来就会超过你的内存了

harnvo commented 2 years ago

这不是内存泄漏,而是在rollout的时候pytorch在计算梯度信息,占用了额外内存,而no_grad省去内存以后内存正好够用。rollout函数里没有反向传播,所以建议在generate_episode前加上一个@torch.no_grad()装饰器。