繁体   English   中英

如何限制tensorflow GPU内存使用?

[英]How to restrict tensorflow GPU memory usage?

我在Ubuntu 18.04中使用了tensorflow-gpu 1.13.1,在Nvidia GeForce RTX 2070上使用了CUDA 10.0(驱动程序版本:415.27)。

下面的代码用于管理张量流内存使用情况。 我有大约8Gb的GPU内存,因此tensorflow不能分配超过1Gb的GPU内存。 但是当我使用nvidia-smi命令查看内存使用情况时,我看到它尽管我使用GPUOptions限制了内存数量,但它使用了~1.5 Gb。

memory_config = tf.ConfigProto(gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=0.12))

memory_config.gpu_options.allow_growth = False

with tf.Session(graph=graph, config=memory_config) as sess:
    output_dict = sess.run(tensor_dict,
                           feed_dict={image_tensor: np.expand_dims(image, 0)})

为什么会这样? 我如何避免这种情况或者至少计算每次会话的内存需求? 我需要为每个进程制定强大的限制,因为我有几个不同会话的并行实例,所以我需要确定,没有资源竞争

顺便说一下,我试过将memory_config.gpu_options.allow_growth设置为False,但它没有任何影响。 Tensorflow仍然以与此标志值无关的方式分配内存。 它也似乎很奇怪

解决方法尝试使用gpu_options.allow_growth = True查看tf.Session创建中消耗了多少默认内存。 无论值如何,都将始终分配该内存。

根据您的结果,它应该小于500MB。 因此,如果您希望每个进程真正拥有1GB内存,请计算:

(1GB minus default memory)/total_memory

原因

在创建tf.Session ,无论您的配置如何,都会在GPU上创建Tensorflow设备。 设备需要一些最小内存。

import tensorflow as tf

conf = tf.ConfigProto()
conf.gpu_options.allow_growth=True
session = tf.Session(config=conf)

给定allow_growth=True ,应该没有gpu分配。 但实际上,它会产生:

2019-04-05 18:44:43.460479:I tensorflow / core / common_runtime / gpu / gpu_device.cc:1053]创建TensorFlow设备(/ job:localhost / replica:0 / task:0 / device:GPU:0 with 15127 MB内存) - >物理GPU(设备:0,名称:Tesla P100-PCIE-16GB,pci总线ID:0000:03:00.0,计算能力:6.0)

它占据了一小部分内存(在我过去的经验中,数量因gpu模型而异)。 注意:设置allow_growth占用与设置per_process_gpu_memory=0.00001几乎相同的内存,但后者将无法正确创建会话。

在这种情况下,它是345MB

在此输入图像描述

这是您正在经历的偏移。 我们来看看per_process_gpu_memory

conf = tf.ConfigProto()
conf.gpu_options.per_process_gpu_memory_fraction=0.1
session = tf.Session(config=conf)

由于gpu有16,276MB的内存,因此设置per_process_gpu_memory_fraction = 0.1 可能会让你认为只会分配大约1,627MB。 但事实是:

在此输入图像描述

分配了1,971MB ,但是与默认内存(345MB)和预期内存(1,627MB)的总和相吻合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM