关闭一切可能的IO操作!!!!
本人用STABLE_BASELINES3里面的算法进行实验,结果发现GPU利用率一直很低,只会偶尔高一下然后又下去,原来是我的算法写的有问题,采样时间非常的长,智能体会受限于采样时间。但是算法改进以后发现GPU利用率还是上不去,看了网上很多同样的问题,包括但不局限于增大batch_size,使用DataLoader。。。。
都没有解决问题,后来我发现了症结所在,归结于两行代码:
config.policy.tensorboard_log
Monitor(env,str(train))
这两步io操作极大限制了GPU的性能,每1000步和2000步算法均需向monitor.csv和tensorboard里写入相关数据,在调试阶段可以通过这些数据查看算法有无问题。这确实很应该,但是在运行阶段尤其是需要调大迭代次数时,这简直就是灾难,尤其是stable_baselines3算法性能大多在几十万步才能迭代到稳定最优。GPU需要忙等CPU的IO操作结束,于是果断把他注释掉了,算法运行时间快了10倍有木有!