如何在Tensorflow中验证和分配GPU分配?

时间:2019-04-30 17:20:54

标签: tensorflow keras gpu

我的笔记本电脑是Thinkpad T470P,它似乎具有双GPU-一个是集成的Intel HD图形630,另一个是GeForce 940MX。

我安装了CUDA版本。在这台机器上的10.1成功,现在我想在Tensorflow中进行培训。我想知道培训使用的是哪个GPU,所以我尝试了以下方法:

from tensorflow.python.client import device_lib

device_lib.list_local_devices()

这就是我得到的:

[name: "/device:CPU:0"
 device_type: "CPU"
 memory_limit: 268435456
 locality {
 }
 incarnation: 17770480900406893487, name: "/device:GPU:0"
 device_type: "GPU"
 memory_limit: 1462163865
 locality {
   bus_id: 1
   links {
   }
 }
 incarnation: 5306128727345722238
 physical_device_desc: "device: 0, name: GeForce 940MX, pci bus id: 0000:02:00.0, compute capability: 5.0"]

我很好奇为什么会有两个化身?一个叫/device:GPU:0,另一个叫GeForce 940MX

据我所知,CUDA和tensorflow只能在GeForce上运行,这是真的吗,因为CUDA甚至不支持集成GPU吗?

在这种情况下,如何指定在GeForce 940MX上运行的tensorflow?由于有两个名称,因此我不确定它们是否指向不同的GPU。非常感谢您的输入!

1 个答案:

答案 0 :(得分:2)

首先,CUDA仅与NVIDIA显卡兼容,因此TensorFlow不会使用您的集成Intel HD图形630,也不会使用device_lib.list_local_devices()来列出您的集成Intel HD图形630。

使用的唯一GPU设备是device_type: "GPU"中列出的项目,它代表您的GeForce 940MX卡。我相信列出的其他项目 指同一张GPU卡-我通常只注意设备类型= GPU的项目。要专门打印这些项目,可以使用https://stackoverflow.com/a/38580201/9672143中的以下脚本:

from tensorflow.python.client import device_lib

local_device_protos = device_lib.list_local_devices()
print([x.name for x in local_device_protos if x.device_type == 'GPU'])

一个有用的工具是命令行上的nvidia-smi。这列出了可用的NVIDIA GPU,以及正在使用每个GPU的进程。启动TensorFlow / Keras程序时,您应该看到python进程出现在nvidia-smi输出的底部。

要回答您的最后一个问题,您可以在导入TF / Keras之前,使用以下代码强制TensorFlow使用特定的GPU:

import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'  # gpu ID

可以从nvidia-smi的输出中找到GPU ID,该输出显示每个GPU及其关联的ID。