我已经在我的ubuntu 16.04中安装了tensorflow,使用的是ubuntu内置的apt cuda安装。

现在我的问题是,我如何测试tensorflow是否真的使用gpu?我有一个gtx 960m gpu。当我导入tensorflow时,这是输出

I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcublas.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcudnn.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcufft.so locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:105] successfully opened CUDA library libcurand.so locally

这个输出是否足够检查tensorflow是否使用gpu ?


当前回答

这应该会给出Tensorflow可用的设备列表(Py-3.6下):

tf = tf.Session(config=tf.ConfigProto(log_device_placement=True))
tf.list_devices()
# _DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 268435456)

其他回答

我认为有一种更简单的方法来实现这一点。

import tensorflow as tf
if tf.test.gpu_device_name():
    print('Default GPU Device: {}'.format(tf.test.gpu_device_name()))
else:
    print("Please install GPU version of TF")

它通常是这样的

Default GPU Device: /device:GPU:0

对我来说,这似乎比那些冗长的日志更容易。

编辑: 对TF 1进行了测试。x版本。我从来没有机会做TF 2.0或以上的东西,所以请记住。

除了使用sess = tf.Session(config=tf.ConfigProto(log_device_placement=True)),这是在其他答案和官方TensorFlow文档中列出的,你可以尝试给gpu分配一个计算,看看你是否有错误。

import tensorflow as tf
with tf.device('/gpu:0'):
    a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
    b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
    c = tf.matmul(a, b)

with tf.Session() as sess:
    print (sess.run(c))

在这里

"/cpu:0":您机器的cpu。 "/gpu:0":你机器的gpu,如果你有的话。

如果你有一个gpu并且可以使用它,你会看到结果。否则,您将看到一个带有很长的堆栈跟踪的错误。最后你会得到这样的结果:

无法将设备分配给节点“MatMul”:无法满足显式要求 设备规格'/device:GPU:0'因为没有设备与之匹配 规范是在这个过程中注册的


最近在TF中出现了几个有用的函数:

tf.test。Is_gpu_available表示gpu是否可用 tf.test。Gpu_device_name返回gpu设备名称

你也可以检查会话中可用的设备:

with tf.Session() as sess:
  devices = sess.list_devices()

设备会给你一些类似的东西

[_DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:CPU:0, CPU, -1, 4670268618893924978),
 _DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 17179869184, 6127825144471676437),
 _DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:XLA_GPU:0, XLA_GPU, 17179869184, 16148453971365832732),
 _DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:TPU:0, TPU, 17179869184, 10003582050679337480),
 _DeviceAttributes(/job:tpu_worker/replica:0/task:0/device:TPU:1, TPU, 17179869184, 5678397037036584928)

我找到了最简单、最全面的方法。只要设置tf.debug .set_log_device_placement(True),你就可以看到ops是否真的在GPU上运行,例如在device /job:localhost/replica:0/task:0/device:GPU:0中执行op _EagerConst

更多文档:https://www.tensorflow.org/guide/gpu#logging_device_placement

我发现从命令行查询gpu是最简单的:

nvidia-smi

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.98                 Driver Version: 384.98                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 980 Ti  Off  | 00000000:02:00.0  On |                  N/A |
| 22%   33C    P8    13W / 250W |   5817MiB /  6075MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0      1060      G   /usr/lib/xorg/Xorg                            53MiB |
|    0     25177      C   python                                      5751MiB |
+-----------------------------------------------------------------------------+

如果你的学习是一个后台过程,pid从 Jobs -p应该匹配nvidia-smi的pid

你有一些选项来测试你的TensorFlow安装是否正在使用GPU加速。

您可以在三种不同的平台上输入以下命令。

import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

Jupyter Notebook -检查运行Jupyter Notebook的控制台。你将能够看到GPU正在被使用。 Python Shell -你将能够直接看到输出。(注意-不要将第二个命令的输出分配给变量'sess';如果这有帮助的话)。 Spyder -在控制台中输入以下命令。 将tensorflow导入为tf tf.test.is_gpu_available ()