默认情况下,TensorFlow会映射该进程可见的几乎所有GPU的所有GPU内存(取决于CUDA_VISIBLE_DEVICES)。这样做是为了通过减少内存碎片来更有效地使用设备上相对宝贵的GPU内存资源。
TensorFlow在Session上提供了两个Config选项来控制它。
第一个是allow_growth选项,它尝试根据运行时分配仅分配尽可能多的GPU内存:
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
session = tf.Session(config=config)
第二种方法是per_process_gpu_memory_fraction选项,该选项确定应为每个可见GPU分配的总内存量的一部分。例如,您可以通过以下方式告诉TensorFlow仅分配每个GPU的总内存的40%:
config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.4
session = tf.Session(config=config)
0
我在TensorFlow中运行了具有2个conv层和1个全连接层的MNIST演示,我收到一条消息“试图分配2.59GiB的内存不足”,但它显示总内存为4.69GiB,可用内存为3.22 GiB,如何以2.59GiB停止?在更大的网络中,如何管理GPU内存?我只关心如何充分利用gpu内存,想知道它是如何发生的,而不是如何预先分配内存