我已经在我的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匹配
参考资料
- How to tell if tensorflow is using gpu acceleration from inside python shell?
|