Как определить, использует ли тензорный поток ускорение 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, но еще не использовали графический процессор, статистика использования будет такой:
Обратите внимание, как использование памяти графическим процессором очень мало (~ 200 МБ).
Теперь давайте загрузим графический процессор в наш код. Как указано в tf documentation
, выполните:
In [2]: sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Теперь статистические данные должны показывать обновленную память использования графического процессора, как показано ниже:
Посмотрите, как наш процесс 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))
- Блокнот Jupyter - проверьте консоль, на которой работает блокнот Jupyter. Вы сможете увидеть, как используется графический процессор.
- Оболочка Python - вы сможете непосредственно увидеть вывод. (Note- не присваивает вывод второй команды переменной 'sess'; если это помогает).
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')