即使你用tensorflow或者keras跑一个非常简单的模型,你也会发现你的显存全被占完了,这和tensorflow的显存占用机制有关。
tensorflow默认就是占用所有显存的(会给你留下一点点保证系统正常运行),按谷歌的说法是占用所有显存有利于程度调度,使得数据尽量储存在连续的显存块上,从而加快计算速度。
然后我就勉强打个文明了,打dota2都偶尔能花贴图(1080p分辨率下)。
不过谷歌也给了解决办法:
告诉tensorflow不要一次性占用所有显存,而是按序申请:
1 | os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true' |
1 | config = tf.ConfigProto() |
以上是两种不同的写法,第一种比较新。注意,这种写法只是让tensorflow按序申请新显存,它并不会释放老显存,谷歌的说法是这样会造成显存碎片。
或是强制只允许占用一定百分比的显存:
1 | config = tf.ConfigProto() |
这种声明会让tensorflow在一次性分配显存时最大分配到这么多的显存,但并不会限制tensorflow继续申请新显存,换而言之如果tensorflow发现自己需要更多的显存,程序将会突破这个上限(毕竟哪个炼丹的会嫌显存够用呢?)