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

174

Я установил тензор потока в моем 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
    Вы должны увидеть что-то подобное в своем журнале: I tenorflow / core / common_runtime / gpu / gpu_device.cc: 838] Создание устройства TensorFlow (/ gpu: 0) -> (устройство: 0, имя: GeForce GTX 980, идентификатор шины pci : 0000: 03: 00.0)
  • 1
    В log_device_placement подход log_device_placement . Самый надежный способ - посмотреть на временную шкалу, как указано в этом комментарии: github.com/tensorflow/tensorflow/issues/…
Показать ещё 5 комментариев
Теги:
tensorflow

12 ответов

173
Лучший ответ

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

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

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

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

Изображение 3922

  • 13
    Я попробовал это, и он абсолютно ничего не печатает. Есть идеи, почему это может быть?
  • 7
    Вы делали это на ноутбуке Jupyter?
Показать ещё 11 комментариев
182

Помимо использования 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)
  • 8
    Результат: [[22. 28.] [49. 64.]]
  • 3
    @ GegePligor результат здесь не очень важен. Либо у вас есть результат и графический процессор был использован, либо у вас есть ошибка, что означает, что он не был использован
Показать ещё 3 комментария
71

Следующий фрагмент кода должен предоставить вам все устройства, доступные для 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"]

  • 0
    Это лучший ответ.
  • 2
    и если эта команда не возвращает какую-либо запись с "GPU", означает ли это, что на моей машине просто есть GPU, или тензор потока не может ее найти?
Показать ещё 1 комментарий
33

Я думаю, что есть более простой способ достичь этого.

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

Мне кажется, это проще, чем подробные записи.

  • 0
    Согласовано. Проще, чем подходы, описанные выше. Выводит список используемых им графических процессоров. Спасибо
  • 0
    Лучший из всех
27

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

код

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
  • 5
    Пожалуйста, добавьте небольшое объяснение, почему ваш ответ работает (что делает log_device_placement и как увидеть CPU и GPU в выводе?). Это улучшит качество вашего ответа!
  • 0
    Попробуйте правильно отформатировать код
17

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

import tensorflow as tf
print(tf.test.is_built_with_cuda())
  • 3
    Предупреждение: это говорит вам, если TensorFlow скомпилирован с GPU. Не используется ли GPU. (Если, например, драйверы не установлены должным образом, то используется процессор, даже если «is_built_with_cuda ()» имеет значение true.)
13

Это должно предоставить список устройств, доступных для 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)
  • 0
    человек, которого я отклонил твой вопрос по ошибке ... если ты отредактируешь свой вопрос, я отменю свой голос
10

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

  • 0
    Это косвенный способ
  • 0
    Как вы используете nvdia-smi для мониторинга использования графического процессора?
Показать ещё 3 комментария
8

Хорошо, сначала запустите 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, но еще не использовали графический процессор, статистика использования будет такой:

Изображение 3923

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



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

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

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

Изображение 3924

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


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

  • 1
    Я хотел бы пометить ответы. Этот золотой
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 |
+-----------------------------------------------------------------------------+

Если ваше обучение является фоновым процессом, pid из jobs -p должен соответствовать pid из nvidia-smi

3

Запустите в 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.

  • 0
    Jupyter вообще не нужен, пожалуйста, не добавляйте сложности к вопросу
  • 0
    Некоторые пользователи могут захотеть убедиться, что графический процессор можно использовать в Jupyter. Кроме того, это можно запустить из скрипта Python.
0

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

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()
  • 0
    Хотя этот код может решить вопрос, в том числе объяснение того, как и почему это решает проблему, действительно поможет улучшить качество вашего сообщения и, вероятно, получит больше голосов "за". Помните, что вы отвечаете на вопрос для читателей в будущем, а не только для того, кто спрашивает сейчас. Пожалуйста, измените свой ответ, чтобы добавить объяснения и указать, какие ограничения и предположения применяются.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню