Как определить, использует ли тензорный поток ускорение gpu изнутри оболочки python?

Я установил тензор потока в моем Ubuntu 16.04, используя второй ответ здесь с Ubuntu, встроенным в установку CUDA.

Теперь мой вопрос: как я могу проверить, действительно ли тензорный поток использует 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

Достаточно ли этого вывода, чтобы проверить, использует ли tenorflow gpu?

Ответы

Ответ 1

Нет, я не думаю, что "открытой библиотеки CUDA" достаточно, чтобы сказать, потому что разные узлы графа могут быть на разных устройствах.

Чтобы выяснить, какое устройство используется, вы можете включить размещение устройства журнала следующим образом:

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

Проверьте консоль на этот тип вывода.

Ответ 2

Помимо использования 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": процессор вашей машины.
  • "/gpu: 0": графический процессор вашей машины, если он у вас есть.

Если у вас есть графический процессор и вы можете использовать его, вы увидите результат. В противном случае вы увидите ошибку с длинной трассировкой стека. В итоге у вас будет что-то вроде этого:

Невозможно назначить устройство для узла 'MatMul': не удалось удовлетворить явную спецификацию устройства '/device: GPU: 0', поскольку в этом процессе не зарегистрированы устройства, соответствующие этой спецификации.


Недавно в TF появилось несколько полезных функций:

Вы также можете проверить наличие доступных устройств в сеансе:

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)

Ответ 3

Следующий фрагмент кода должен предоставить вам все устройства, доступные для tenorflow.

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

Пример вывода

[name: "/cpu: 0" device_type: "CPU" memory_limit: 268435456 locality {} воплощение: 4402277519343584096,

name: "/gpu: 0" device_type: "GPU" memory_limit: 6772842168 locality {bus_id: 1} воплощение: 7471795903849088328 Physical_device_desc: "устройство: 0, имя: GeForce GTX 1070, идентификатор шины pci: 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

Это подтвердит, что тензорный поток с использованием графического процессора при тренировке также?

код

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

Выход

I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties: 
name: GeForce GT 730
major: 3 minor: 5 memoryClockRate (GHz) 0.9015
pciBusID 0000:01:00.0
Total memory: 1.98GiB
Free memory: 1.72GiB
I tensorflow/core/common_runtime/gpu/gpu_device.cc:906] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:916] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0)
Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0
I tensorflow/core/common_runtime/direct_session.cc:255] Device mapping:
/job:localhost/replica:0/task:0/gpu:0 -> device: 0, name: GeForce GT 730, pci bus id: 0000:01:00.0

Ответ 6

Tensorflow 2.0

Начиная с тензорного потока 2.0, сеансы больше не используются. Все еще работающий способ проверить функциональность графического процессора:

import tensorflow as tf

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

Если вы получили ошибку, вам нужно проверить вашу установку.

Ответ 7

В дополнение к другим ответам, следующее должно помочь вам убедиться, что ваша версия tenorflow включает поддержку GPU.

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

Ответ 8

Это должно предоставить список устройств, доступных для 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)

Ответ 9

Я предпочитаю использовать nvidia-smi для мониторинга использования GPU. если он значительно повышается при запуске программы, это сильный признак того, что ваш тензорный поток использует графический процессор.

Ответ 10

Хорошо, сначала запустите ipython shell из терминала и import TensorFlow

$ 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

Теперь мы можем наблюдать за использованием памяти GPU с помощью команды:

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

Поскольку мы только import ed TensorFlow, но еще не использовали графический процессор, статистика использования будет такой:

tf non-gpu usage

Обратите внимание, как использование памяти графическим процессором очень мало (~ 200 МБ).



Теперь давайте загрузим графический процессор в наш код. Как указано в tf documentation, выполните:

In [2]: sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

Теперь статистические данные должны показывать обновленную память использования графического процессора, как показано ниже:

tf gpu-watch

Посмотрите, как наш процесс Python из оболочки ipython использует 7,7 ГБ памяти GPU.


PS Вы можете продолжать смотреть эту статистику во время выполнения кода, чтобы увидеть, насколько интенсивно используется графический процессор.

Ответ 11

Я нахожу, что просто запросить 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 должен соответствовать pid из nvidia-smi

Ответ 12

Запустите в Jupyter следующее:

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

Если вы настроили среду должным образом, вы получите следующий вывод в терминале, где вы запустили "jupyter notebook" ,

2017-10-05 14:51:46.335323: I c:\tf_jenkins\home\workspace\release-win\m\windows-gpu\py\35\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\35\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.

Ответ 13

С последними обновлениями Tensorflow вы можете проверить его следующим образом:

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

Это вернет True, если Tensorflow использует графический процессор, и вернет False в противном случае.

Если вы хотите устройство device_name, вы можете набрать: tf.test.gpu_device_name(). Узнайте больше здесь here

Ответ 14

Вы можете проверить, используете ли вы в данный момент графический процессор, выполнив следующий код:

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

Ответ 15

Это строка, которую я использую для перечисления устройств, доступных для tf.session непосредственно из bash:

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__);"

Он распечатает доступные устройства и версию tenorflow, например:

_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

Ответ 16

Поместите это в верхней части вашего ноутбука Jupyter. Закомментируйте то, что вам не нужно.

# confirm TensorFlow sees the GPU
from tensorflow.python.client import device_lib
assert 'GPU' in str(device_lib.list_local_devices())

# confirm Keras sees the GPU
from keras import backend
assert len(backend.tensorflow_backend._get_available_gpus()) > 0

# confirm PyTorch sees the GPU
from torch import cuda
assert cuda.is_available()
assert cuda.device_count() > 0
print(cuda.get_device_name(cuda.current_device()))

Первоначально отвечал здесь.

Ответ 17

У вас есть несколько вариантов, чтобы проверить, используется ли ускорение графического процессора вашей установкой TensorFlow.

Вы можете ввести следующие команды на трех разных платформах.

import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
  1. Блокнот Jupyter - проверьте консоль, на которой работает блокнот Jupyter. Вы сможете увидеть, как используется графический процессор.
  2. Оболочка Python - вы сможете непосредственно увидеть вывод. (Note- не присваивает вывод второй команды переменной 'sess'; если это помогает).
  3. Spyder - введите в консоли следующую команду.

    import tensorflow as tf tf.test.is_gpu_available()

Ответ 18

Просто из командной строки или среды Linux выполните следующую команду.

python -c 'import torch; print(torch.cuda.is_available())' python -c 'import torch; print(torch.cuda.is_available())' Выше должно печататься' True '

python -c 'import torch; print(torch.rand(2,3).cuda())' python -c 'import torch; print(torch.rand(2,3).cuda())' Этот должен напечатать следующее

tensor([[0.7997, 0.6170, 0.7042], [0.4174, 0.1494, 0.0516]], device='cuda:0')