高 GPU 内存使用但零易失性 gpu-util

Posted

技术标签:

【中文标题】高 GPU 内存使用但零易失性 gpu-util【英文标题】:High GPU Memory-Usage but zero volatile gpu-util 【发布时间】:2017-06-01 05:28:39 【问题描述】:

我的新训练代码占用了很高的 GPU 内存使用率,但易失性 gpu-util 为零

/home/diana/data/KaggleDiabeticRetinopaI tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with     properties: 
name: GeForce GTX 1080
major: 6 minor: 1 memoryClockRate (GHz) 1.835
pciBusID 0000:05:00.0
Total memory: 7.92GiB
Free memory: 7.81GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlowdevice (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:05:00.0)

我正在尝试一个新的数据生成器,而旧的运行 volatile gpu-util 为 10%,所以环境或 tensorflow 版本不会是关键问题

所以我想知道是否有人可以告诉我代码中的哪个元素可能导致这个问题?

非常感谢!

【问题讨论】:

【参考方案1】:

默认情况下,Tensorflow 在您创建会话时会预先分配所有可用的 VRAM,无论是否实际需要。 0% volatile GPU-util 仅表明 GPU 上实际上没有“运行”(没有活动内核)。

如果您不希望这种情况发生,您可以在创建会话时将allow_growth 设置为True 并在config 对象中适当地传递它。

阅读tf.Session和config.proto了解更多详情。

编辑:这就是您将allow_growth 设置为True 的方式

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

【讨论】:

以上是关于高 GPU 内存使用但零易失性 gpu-util的主要内容,如果未能解决你的问题,请参考以下文章

Java 内存模型:易失性变量和发生前

易失性关键字和线程本地内存[关闭]

MRAM技术进入汽车应用

对具有“易失性”属性的动态分配变量的内存访问是不是会导致每次访问的缓存未命中?

C# 内存模型和非易失性变量在其他线程创建之前初始化

展望由非易失性设备构成的未来存储