在使用GPU进行“炼丹”的过程中,经常会出现,明明数据不是很大,网络规模也很小,batch_size也不大,但是GPU内存占用瞬间拉满。GPU内存拉满的原因可能时Tensorflow默认将内存全部沾满,以利用大块内存,实现提速。如果想要Tensorflow占用的GPU内存下降,可采用以下几种方式:
1. 获取特定数量GPU内存
这种情况可以给程序分配指定大小的内存,剩下的GPU内存该干嘛干嘛,不会受到影响。但是在指定内存过小的情况下,可能会爆内存!
for gpu in tf.config.experimental.list_physical_devices(“GPU”):
tf.config.experimental.set_virtual_device_configuration(gpu,
[tf.config.experimental.VirtualDeviceConfiguration(memory_limit=2048)])
2. 仅在需要时获取GPU内存
Tensorflow炼丹过程中,一直占用着GPU内存,即使是炼丹结束,只要不关闭程序,GPU内存就会一直显示100%占用,这时通过下面的指令就可以让Tensorflow及时释放GPU内存,强迫症瞬间得到治愈。
for gpu in tf.config.experimental.list_physical_devices(“GPU”):
tf.config.experimental.set_memory_growth(gpu, True)
3. 将一个GPU分为两个虚拟设备
一个“丹炉”太慢了?多个“丹炉”太贵了?通过下面的指令可以将一个实体“丹炉”虚拟为多个“丹炉”,就是不知道会不会炸炉。
physical_gpus = tf.config.experimental.list_physical_devices(“GPU”)
tf.config.experimental.set_virtual_deivce_configuration(physical_gpus[0],
tf.config.experimental.VirtualDeviceConfiguration(memory_limit=2048),
tf.config.experimental.VirtualDeviceConfiguration(memory_limit=2048)])
参考文献
[1] A GéRon. Hands-on machine learning with Scikit-Learn and TensorFlow : concepts, tools, and techniques to build intelligent systems. 2017.