我已经在ubuntu 16.04中使用ubuntu内置apt cuda安装的第二个答案在我的ubuntu 16.04中安装了tensorflow。我有一个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?

评论

您应该在日志中看到以下内容:I tensorflow / core / common_runtime / gpu / gpu_device.cc:838]创建TensorFlow设备(/ gpu:0)->(设备:0,名称:GeForce GTX 980,pci总线ID :0000:03:00.0)

回答中有log_device_placement方法。最可靠的方法是查看此注释中指定的时间轴:github.com/tensorflow/tensorflow/issues/…

是的,我是根据张瑶的回答得到的输出...

@YaroslavBulatov在什么日志中?它是将其写入文件还是在哪里检查是否出现类似的语句?

它写入stdout或stderr

#1 楼

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

要找出使用的设备,可以启用日志设备这样的放置位置:

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


检查您的控制台是否有此类输出。



评论


我试过了,它绝对不打印任何内容。知道为什么会这样吗?

– Qubix
17年2月1日在8:01

您是在Jupyter笔记本上完成的吗?

–塔米姆·阿达里(Tamim Addari)
17 Mar 17 '17 at 9:51

输出可能在您运行Jupyter Notebook的控制台上产生。

–musically_ut
17年4月9日在10:31

我们是否可以获取Tensorflow V2的更新答案(不支持tf.Sessions)。

– iyop45
19年7月3日在12:51

@ iyop45对于tensorflow V2,该命令进行了一些修改:sess = tf.compat.v1.Session(config = tf.compat.v1.ConfigProto(log_device_placement = True))

–万丹
20 Mar 17 '20 at 18:29



#2 楼

除了使用其他答案以及TensorFlow官方文档中概述的sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))之外,您还可以尝试为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()


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)


评论


结果:[[22. 28.] [49. 64.]]

–乔治Pligoropoulos
17年5月5日在16:46

@GeorgePligor的结果在这里并不是很重要。您有结果并且使用了GPU,或者有错误,这表示未使用它

–萨尔瓦多·达利(Salvador Dali)
17年5月5日在18:23

这对我没有用。我在由nvidia-docker等执行的Docker容器中运行了此程序。但是,我没有收到任何错误,并且CPU是完成工作的那个。我将矩阵增加了一点(10k * 10k),以确保计算一段时间。 CPU使用率提高了100%,但GPU始终保持凉爽。

–pascalwhoop
17年12月13日19:00

在控制台中运行它时,出现“没有设备匹配”错误。在像pycharm这样的IDE中,没有错误。我想这与我使用的会话有关,在控制台上有所不同。

–cn123h
18年2月24日在13:15

容易明白。如果GPU可用,它将打印类似找到的设备0的属性:名称:GeForce GTX 1080 Ti major:6 minor:1 memoryClockRate(GHz):1.582 pciBusID:0000:02:00.0 totalMemory:10.92GiB freeMemory:10.76GiB

– Leoli
18年8月6日在4:04

#3 楼

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

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



示例输出

:0“
device_type:” CPU“
memory_limit:268435456
位置{
}
化身:4402277519343584096,

名称:” / gpu:0“
device_type:” GPU“
memory_limit:6772842168
位置{
bus_id:1
}
化身:7471795903849088328
physical_device_desc :“设备:0,名称:GeForce GTX 1070,PCI总线ID:0000:05:00.0”
]


评论


并且如果此命令不返回任何带有“ GPU”的条目,是否表示我的机器确实具有GPU,或者tensorflow无法定位它?

– Mercury0114
18/12/16在17:54

@ mercury0114可能是。例如,您可能有一个GPU,但没有正确安装tensorflow-gpu。

–吉米扎兹
19年5月7日在15:41

我不同意,这不能回答问题:这不是关于可用的设备,而是所使用的设备。那可能是一个完全不同的故事! (例如,TF默认情况下仅使用1个GPU。

– Mayou36
19年5月9日10:00

名称:“ / device:GPU:0” device_type:“ GPU” memory_limit:10711446324位置{bus_id:1个链接{}}化身:17935632445266485019 physical_device_desc:“ device:0,名称:GeForce RTX 2080 Ti,pci总线id:0000: 01:00.0,计算能力:7.5“]

– kamran kausar
20年6月11日在19:53

#4 楼

我认为有一种更简单的方法可以实现此目的。

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

评论


同意比上述方法更容易。打印其使用的GPU列表。谢谢

–user907629
18/12/18在12:08

这不是有效的测试。即使您安装了GPU版本的tensorflow,它也会返回else语句。

–古达
19年10月2日,13:30

#5 楼

Tensorflow 2.0

在2.0中不再使用会话。相反,可以使用tf.test.is_gpu_available

import tensorflow as tf

assert tf.test.is_gpu_available()
assert tf.test.is_built_with_cuda()


如果遇到错误,则需要检查安装。

评论


这也适用于TF 1.14(甚至可能是一些较旧的版本)!

–超速档
19年7月14日在9:55

现在建议做tf.config.list_physical_devices('GPU')

–罗伊·希克罗(Roy Shilkrot)
20年1月4日,11:31

@Roy Shilkrot我认为'tf.config.list_physical_devices('GPU')'在Tensorflow 2.0中不起作用

– joselquin
20 Jan 5 '20在19:36



@joselquin TF v2.x文档指出它应该可以工作:tensorflow.org/api_docs/python/tf/config/experimental/…,我可以验证它是否对我有用。

–罗伊·希克罗(Roy Shilkrot)
20年1月6日在14:48

#6 楼

这将确认在训练的同时使用GPU的张量流吗?

代码

>

评论


请添加一些解释,以说明您的答案为何有效(log_device_placement的作用以及如何在输出中看到CPU与GPU的关系?)。这样可以提高您的答案质量!

– Nander Speerstra
16 Dec 6'在7:40



#7 楼

除了其他答案之外,以下内容还应帮助您确保您的tensorflow版本包括GPU支持。

import tensorflow as tf
print(tf.test.is_built_with_cuda())


评论


警告:这会告诉您TensorFlow是否使用GPU编译。不是是否正在使用GPU。 (例如,如果未正确安装驱动程序,则即使“ is_built_with_cuda()”为true,也会使用CPU。)

–里卡多·克鲁兹(Ricardo Cruz)
'18 Sep 6'在21:18

#8 楼

好的,首先从终端启动ipython shell,然后从TensorFlow启动import: >
$ ipython --pylab
Python 3.6.5 |Anaconda custom (64-bit)| (default, Apr 29 2018, 16:14:56) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.
Using matplotlib backend: Qt5Agg

In [1]: import tensorflow as tf


由于我们仅使用import ed TensorFlow但尚未使用任何GPU,因此使用情况统计信息为:



请注意,GPU内存的使用量要少得多(〜700MB);有时,GPU内存使用量甚至可能低至0 MB。


现在,让我们在代码中加载GPU。如tf documentation中所示,执行以下操作:

# realtime update for every 2s
$ watch -n 2 nvidia-smi


现在,手表统计信息应显示更新的GPU使用情况内存,如下所示: />
现在观察ipython shell中的Python进程如何使用约7 GB的GPU内存。


PS您可以在代码运行时继续观看这些统计信息,以了解随着时间的推移GPU使用情况的强度。

评论


我希望我能给答案加星号。这是金色的

– Zain Rizvi
18年7月20日在17:45

#9 楼

TENSORFLOW> = 2.1的更新。
检查TensorFlow是否使用GPU的推荐方法如下:
tf.config.list_physical_devices('GPU') 

从TensorFlow 2.1开始,不赞成使用tf.test.gpu_device_name()
然后,您可以在终端中使用nvidia-smi检查已分配了多少GPU内存;同时,使用watch -n K nvidia-smi会例如每隔K秒告诉您正在使用多少内存(您可能希望实时使用K = 1

评论


要持续查看使用了多少GPU内存,请使用nvidia-smi -l 10。

–彼得
20 Nov 11在11:57



#10 楼

这应该给出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)


评论


老兄,我误选了您的问题...如果您编辑问题,我将取消我的否决

– Francesco Boi
18年2月17日在16:33

#11 楼

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

评论


这是一种间接方式

– papapabiceps
17年9月26日在12:08

您如何使用nvidia-smi监视GPU使用情况?

–拉津
17-10-10在2:32



在您安装cuda之后。 nvidia-smi应该在您的系统中。我通常使用'nvidia-smi -l'来监视使用情况。

–斯科特·黄(Scott huang)
17-10-10在2:45

您还可以使用手表nvidia-smi,每2秒更新一次屏幕

– Perseus14
18年1月10日在10:27

看nvidia-smi对我来说效果很好。我还可以在输出中看到我的python进程正在使用GPU

–formica
18年4月16日在17:02

#12 楼

使用Tensorflow的最新更新,您可以按以下方式进行检查:

tf.test.is_gpu_available( cuda_only=False, min_cuda_compute_capability=None)


如果True使用的是GPU,这将返回Tensorflow,否则返回False

如果需要设备device_name,可以键入:tf.test.gpu_device_name()
从此处获取更多详细信息

#13 楼

使用tensorflow 2.0> =
import tensorflow as tf
sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(log_device_placement=True))



#14 楼

在Jupyter中运行以下命令,

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


如果正确设置了环境,则将在运行“ jupyter笔记本”的终端中获得以下输出,

2017-10-05 14:51:46.335323: I c:\tf_jenkins\home\workspace\release-win\m\windows-gpu\py\tensorflow\core\common_runtime\gpu\gpu_device.cc:1030] Creating TensorFlow device (/gpu:0) -> (device: 0, name: Quadro K620, pci bus id: 0000:02:00.0)
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: Quadro K620, pci bus id: 0000:02:00.0
2017-10-05 14:51:46.337418: I c:\tf_jenkins\home\workspace\release-win\m\windows-gpu\py\tensorflow\core\common_runtime\direct_session.cc:265] Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: Quadro K620, pci bus id: 0000:02:00.0


您可以在这里看到我正在使用TensorFlow和Nvidia Quodro K620。

评论


根本不需要Jupyter,请不要在问题中添加复杂性

– Patrizio Bertoni
18年8月3日在10:01

一些用户可能想确保GPU在Jupyter中可用。此外,这可以从Python脚本运行。

–华夫猫
18年8月4日在11:37

#15 楼

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

#16 楼

您可以通过运行以下代码来检查当前是否正在使用GPU:

import tensorflow as tf
tf.test.gpu_device_name()


如果输出为'',则意味着您仅使用CPU;
如果输出类似于/device:GPU:0,则表示GPU有效。


并使用以下代码检查您正在使用哪个GPU

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


评论


如果输出为“”,那该怎么办?

–詹森
20年1月21日在7:23

@Jason只需重新安装GPU版本。

–胡锡熙
20 Jan 23'3:33



#17 楼

将其放在jupyter笔记本顶部附近。注释掉您不需要的内容。

最初在这里回答。

#18 楼

>>> import tensorflow as tf 
>>> tf.config.list_physical_devices('GPU')

2020-05-10 14:58:16.243814: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcuda.so.1
2020-05-10 14:58:16.262675: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-10 14:58:16.263119: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties:
pciBusID: 0000:01:00.0 name: GeForce GTX 1060 6GB computeCapability: 6.1
coreClock: 1.7715GHz coreCount: 10 deviceMemorySize: 5.93GiB deviceMemoryBandwidth: 178.99GiB/s
2020-05-10 14:58:16.263143: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudart.so.10.1
2020-05-10 14:58:16.263188: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcublas.so.10
2020-05-10 14:58:16.264289: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcufft.so.10
2020-05-10 14:58:16.264495: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcurand.so.10
2020-05-10 14:58:16.265644: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusolver.so.10
2020-05-10 14:58:16.266329: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcusparse.so.10
2020-05-10 14:58:16.266357: I tensorflow/stream_executor/platform/default/dso_loader.cc:44] Successfully opened dynamic library libcudnn.so.7
2020-05-10 14:58:16.266478: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-10 14:58:16.266823: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:981] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero
2020-05-10 14:58:16.267107: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1697] Adding visible gpu devices: 0
[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]


如@AmitaiIrron所建议:

此部分表明已找到gpu
它已添加为可用的物理设备

2020-05-10 14:58:16.263119: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1555] Found device 0 with properties:

pciBusID: 0000:01:00.0 name: GeForce GTX 1060 6GB computeCapability: 6.1
coreClock: 1.7715GHz coreCount: 10 deviceMemorySize: 5.93GiB deviceMemoryBandwidth: 178.99GiB/s


评论


如果您指向输出中指示是否使用GPU的部分,这将很有用。

–阿米泰(Amitai Irron)
20年5月10日在13:30

@AmitaiIrron感谢您的建议,我希望现在可以更清楚了。

– bLeDy
20年5月11日在12:58

#19 楼

对于Tensorflow 2.0
import tensorflow as tf

tf.test.is_gpu_available(
    cuda_only=False,
    min_cuda_compute_capability=None
)

此处来源
其他选项是:

评论


is_gpu_available(来自tensorflow.python.framework.test_util)已弃用,并将在以后的版本中删除。

–Himanshu Teotia
20年1月18日在10:22

#20 楼

这是我用来直接从bash列出tf.session可用设备的行:

python -c "import os; os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'; import tensorflow as tf; sess = tf.Session(); [print(x) for x in sess.list_devices()]; print(tf.__version__);"


它将打印可用设备和tensorflow版本,例如:

_DeviceAttributes(/job:localhost/replica:0/task:0/device:CPU:0, CPU, 268435456, 10588614393916958794)
_DeviceAttributes(/job:localhost/replica:0/task:0/device:XLA_GPU:0, XLA_GPU, 17179869184, 12320120782636586575)
_DeviceAttributes(/job:localhost/replica:0/task:0/device:XLA_CPU:0, XLA_CPU, 17179869184, 13378821206986992411)
_DeviceAttributes(/job:localhost/replica:0/task:0/device:GPU:0, GPU, 32039954023, 12481654498215526877)
1.14.0


#21 楼

我发现下面的代码片段非常容易测试gpu。.

Tensorflow 2.0测试

import tensorflow as tf
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
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))


Tensorflow 1测试

 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))
 


#22 楼

在Jupyter或IDE中运行以下命令以检查Tensorflow是否使用GPU:tf.config.list_physical_devices('GPU')

评论


这个答案如何帮助这里的其余答案?

–计算机科学家
20年6月2日在20:25

#23 楼

以下还会返回您的GPU设备的名称。

import tensorflow as tf
tf.test.gpu_device_name()


评论


如果此命令的输出为空字符串...我该如何调试?

– zthomas.nc
20-4-5的4:11

#24 楼

您可以选择一些选项来测试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-在控制台中键入以下命令。 > import tensorflow as tf tf.test.is_gpu_available()



#25 楼

Tensorflow 2.1

可以通过nvidia-smi验证的简单计算,以了解GPU上的内存使用情况。

import tensorflow as tf 

c1 = []
n = 10

def matpow(M, n):
    if n < 1: #Abstract cases where n < 1
        return M
    else:
        return tf.matmul(M, matpow(M, n-1))

with tf.device('/gpu:0'):
    a = tf.Variable(tf.random.uniform(shape=(10000, 10000)), name="a")
    b = tf.Variable(tf.random.uniform(shape=(10000, 10000)), name="b")
    c1.append(matpow(a, n))
    c1.append(matpow(b, n))


#26 楼

如果您正在使用TensorFlow 2.0,则可以使用此for循环显示设备:

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


#27 楼

如果您使用的是tensorflow 2.x,请使用:

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