How to free CPU RAM after module.to(cuda_device)
?
大家在使用pytorch的时候,可能会发现一个问题,就是呢,我们使用module.to(cuda_device) 语句后,模型转到了gpu,显存增长了但是同样内存也增长了,一般不管网络多大,最少涨2G。我在lenet测试了,在maskrcnn-benchmark项目均测试过,效果都是这样子。
这里经过理解pytorch的原理发现,事实就是这样的,对,pytorch运行只要是使用cuda都会申请很大块的内存,并不会释放,我的猜测是因为pytorch是动态图网络,它的内部机制导致pytorch需要很多内存。但是由于pytorch自己内部管理机制,它又是很省内存和显存的,假设你需要跑两个模型,1个单独测试CPU损耗1.6G,GPU损耗500M,另一个单独测试CPU损耗2.0G,GPU损耗600M,你把这两个模型合在一个份代码,一起跑,你会发现惊奇的一幕,内存并不是按照1.6G+2.0G=3.6G的算法,而是可能只有2.0G,显存是1.1G。
Tips,在TX2上跑pytorch请不要拿PC上的资源占用去衡量,在TX系列内存和显存公用,合在一起跑,内存(显存)占用要比PC上内存+显存少很多。