Я установил tensorflow в ubuntu 16.04, используя второй ответ здесь со встроенной установкой apt cuda.
Теперь мой вопрос в том, как я могу проверить, действительно ли tensorflow использует gpu? У меня gpu gtx 960m. Когда я импортирую 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?
Нет, я не думаю, что "открытой библиотеки CUDA" достаточно для определения, потому что разные узлы графа могут находиться на разных устройствах.
Чтобы узнать, какое устройство используется, вы можете включить log device placement следующим образом:
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Проверьте свою консоль на наличие такого вывода.
Помимо использования sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
, которое описано в других ответах, а также в официальной документации TensorFlow documentation, вы можете попробовать назначить вычисления на 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))
Здесь
Если у вас есть графический процессор и вы можете его использовать, вы увидите результат. В противном случае вы увидите ошибку с длинным стектрейсом. В итоге вы получите что-то вроде этого:
Cannot assign a device to node 'MatMul': Could not satisfy explicit спецификации устройства '/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)
Следующий фрагмент кода должен дать вам все устройства доступны для tensorflow.
from tensorflow.python.client import device_lib
print(device_lib.list_local_devices())
пример вывода
[имя: " и/процессор:0 и" device_type: на "процессор"и memory_limit: 268435456 район { } воплощение: 4402277519343584096,
и GT; название: " и/ГПУ:0"и device_type: на "ГПУ"и memory_limit: 6772842168 район { 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
Это, кажется, легче для меня, нежели те подробные записи.
Tensorflow 2.0
Как из tensorflow 2.0, сессий больше не используются. Все еще функционирующий способ проверить функциональность ГПУ:
import tensorflow as tf
assert tf.test.is_gpu_available()
assert tf.test.is_built_with_cuda()
Если вы получаете сообщение об ошибке, нужно проверить вашу установку.
Это подтвердит, что tensorflow также использует GPU во время обучения?
Код
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
В дополнение к другим ответы, следующие должны помочь вам, чтобы убедиться, что ваша версия tensorflow включает поддержку ГПУ.
import tensorflow as tf
print(tf.test.is_built_with_cuda())
Это должно дать список устройств, доступных для Tensorflow (в РУ-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-СМИ для мониторинга использования процессора. если она идет вверх значительно, когда вы запустите программу, она'ы сильный признак того, что ваш tensorflow использует ГПУ.
ОК, первый запуск и оболочки IPython от терминала и "импорт" 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
Поскольку мы'вэ только импорт `объед TensorFlow но не использовали любой ГПУ тем не менее, статистика использования:
Наблюдать за тем, как используется графический процессор памяти очень мало (~ 200МБ).
Теперь давайте'с нагрузкой ГПУ в наш код. Как указано в ТФ документации
, то:
In [2]: sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Сейчас смотреть статистика должна показать обновленную памяти GPU, как ниже:
Наблюдать, как наш процесс Python из оболочки IPython использует 7.7 ГБ памяти GPU.
P. S. Вы можете продолжать смотрит эта статистика, как работает этот код, чтобы увидеть, насколько интенсивным использованием процессора.
Я найти просто запросив в ГПУ из командной строки простой:
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 |
+-----------------------------------------------------------------------------+
если ваше обучение является фоновым процессом пид-с
вакансии-Р
должна соответствовать пид от компании NVIDIA-СМИ`
Выполните следующие команды в Jupyter,
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Если вы'ве правильно настроить ваше окружение, вы'll получить следующие выход в терминал, куда ты побежал-то "jupyter ноутбука и",
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 K620 Quodro.
С недавнего обновления Tensorflow, вы можете проверить это следующим образом :
tf.test.is_gpu_available( cuda_only=False, min_cuda_compute_capability=None)
Это вернет true
, если ГПУ используется Tensorflow
, и возвращает "ложь" в противном случае.
Если вы хотите имя_устройства устройства `вы можете тип : ТФ.тест.gpu_device_name()
.
Получить более подробную информацию от ЗДЕСЬ
Положите это в верхней части вашего ноутбука 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 (for TensorFlow 1.X + Keras)
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()))
Примечание: при выпуске TensorFlow 2.0, Керрас сейчас входит в состав ТФ АПИ.
Изначально answerwed здесь.
Вы можете проверить, если вы используете ГПУ, выполнив следующий код:
tensorflow импорта, ТФ ТФ.тест.gpu_device_name()
Если выход''
, это означает, что вы используете только процессора; Если на выходе что-то подобное
/устройству:графический процессор:0, это означает
ГПУ` работает.
И использовать следующий код, чтобы проверить, какие ГПУ
вы используете:
из tensorflow.на Python.импорт клиент device_lib device_lib.list_local_devices()
Это линия я использую в списке устройств, доступных для ТФ.сессии прямо с Баша:
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
Я нашел ниже фрагменте очень удобно для тестирования видеокарты ..
`` tensorflow импорта, ТФ tensorflow импорт.совместимости.v1 как ТФ ТФ.disable_v2_behavior() с ТФ.устройство('/ГПУ:0'): а = ТФ.постоянная([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], форма=[2, 3], имя='Это') б = ТФ.постоянная([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], форма=[3, 2], имя='б') с = ТФ.matmul(A, Б)
с ТФ.Сессии() в качестве Сэсс: печати (Сэсс.бежать(с)) ``
``питон tensorflow импорта, ТФ с ТФ.устройство('/ГПУ:0'): а = ТФ.постоянная([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], форма=[2, 3], имя='Это') б = ТФ.постоянная([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], форма=[3, 2], имя='б') с = ТФ.matmul(A, Б)
с ТФ.Сессии() в качестве Сэсс: печати (Сэсс.бежать(с)) ``
У вас есть несколько вариантов, чтобы проверить, является ли GPU ускорение используется установка TensorFlow.
Вы можете ввести следующие команды в трех различных платформах.
import tensorflow as tf
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
tensorflow импорт как ТФ ТФ.тест.is_gpu_available()