当前位置: 首页>>技术问答>>正文


如何判断查看tensorflow是否在python shell中使用gpu加速?

qingchuanTR 技术问答 , , , 去评论

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

现在我的问题是如何测试tensorflow是否真的使用gpu?我有一个gtx 960m gpu。当我import 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?

最佳解决办法

我不认为“打开CUDA库”足以说明问题,因为Graph的不同节点可能位于不同的设备上。

要找出使用哪个设备,可以像这样启用日志:

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

次佳解决办法

除了使用其他答案中列出的sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))以及TF官方文档外,还可以尝试将计算分配给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并可以使用它,你会看到结果。否则,你会看到一个长堆栈跟踪的错误。最后你会看到下面的内容:

Cannot assign a device to node 'MatMul': Could not satisfy explicit device specification '/device:GPU:0' because no devices matching that specification are registered in this process

第三种解决办法

以下代码可以为您提供tensorflow所有可用的设备。

from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())

Sample Output

[name: "/cpu:0" device_type: "CPU" memory_limit: 268435456 locality { } incarnation: 4402277519343584096,

name: "/gpu:0" device_type: "GPU" memory_limit: 6772842168 locality { bus_id: 1 } incarnation: 7471795903849088328 physical_device_desc: "device: 0, name: GeForce GTX 1070, pci bus id: 0000:05:00.0" ]

第4种办法

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

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

这对我来说似乎更容易理解,而不像那些详细的日志,一大堆东西看得人很凌乱。

第5种办法

我更喜欢使用nvidia-smi来监视GPU的使用情况。如果您在开始编程时显著增加,则表明您的tensorflow正在使用GPU。

第6种办法

这应该提供可用于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)

第7种办法

我发现从命令行查询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 |
+-----------------------------------------------------------------------------+

如果您的学习是后台进程,则jobs -p中的pid应与nvidia-smi中的pid匹配

参考资料

本文由《纯净的天空》出品。文章地址: https://vimsky.com/article/3872.html,未经允许,请勿转载。