Я установил тензор потока в моем 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?
Нет, я не думаю, что "открытой библиотеки CUDA" достаточно, чтобы сказать, потому что разные узлы графа могут быть на разных устройствах.
Чтобы выяснить, какое устройство используется, вы можете включить размещение устройства журнала следующим образом:
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Проверьте консоль на этот тип вывода.
Помимо использования 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))
Вот
Если у вас есть графический процессор и вы можете использовать его, вы увидите результат. В противном случае вы увидите ошибку с длинной трассировкой стека. В итоге у вас будет что-то вроде этого:
Невозможно назначить устройство для узла '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)
Следующий фрагмент кода должен предоставить вам все устройства, доступные для 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"]
Я думаю, что есть более простой способ достичь этого.
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
Мне кажется, это проще, чем подробные записи.
Это подтвердит, что тензорный поток с использованием графического процессора при тренировке также?
код
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
log_device_placement
и как увидеть CPU и GPU в выводе?). Это улучшит качество вашего ответа!
В дополнение к другим ответам, следующее должно помочь вам убедиться, что ваша версия tenorflow включает поддержку GPU.
import tensorflow as tf
print(tf.test.is_built_with_cuda())
Это должно предоставить список устройств, доступных для 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)
Я предпочитаю использовать nvidia-smi для мониторинга использования GPU. если он значительно повышается при запуске программы, это сильный признак того, что ваш тензорный поток использует графический процессор.
Хорошо, сначала запустите 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, но еще не использовали графический процессор, статистика использования будет такой:
Обратите внимание, как использование памяти графическим процессором очень мало (~ 200 МБ).
Теперь давайте загрузим графический процессор в наш код. Как указано в tf documentation
, выполните:
In [2]: sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Теперь статистические данные должны показывать обновленную память использования графического процессора, как показано ниже:
Посмотрите, как наш процесс Python из оболочки ipython использует 7,7 ГБ памяти GPU.
PS Вы можете продолжать смотреть эту статистику во время выполнения кода, чтобы увидеть, насколько интенсивно используется графический процессор.
Я нахожу, что просто запросить 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
Запустите в 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.
Вы можете проверить, используете ли вы в данный момент графический процессор, выполнив следующий код:
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()
log_device_placement
подходlog_device_placement
. Самый надежный способ - посмотреть на временную шкалу, как указано в этом комментарии: github.com/tensorflow/tensorflow/issues/…