Как узнать, использует ли tensorflow ускорение gpu изнутри оболочки python?
Я установил tensorflow в моем ubuntu 16.04, используя второй ответ здесь со встроенной установкой ubuntu apt cuda.
теперь мой вопрос: как я могу проверить, действительно ли tensorflow использует 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
достаточно ли этого вывода, чтобы проверить, использует ли tensorflow gpu ?
11 ответов:
Нет, я не думаю, что "open CUDA library" достаточно сказать, потому что разные узлы графа могут быть на разных устройствах.
чтобы узнать, какое устройство используется, Вы можете включить размещение устройства журнала следующим образом:
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))Проверьте консоль для этого типа вывода.
кроме использования
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))который изложен в других ответах, а также в официальном TF документация, вы можете попробовать назначить вычисление для 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': не удалось удовлетворить явное спецификация устройства '/ устройство: GPU:0', потому что нет устройств, соответствующих этому спецификации регистрируются в этом процессе
следующий фрагмент кода должен дать вам все устройства, доступные для tensorflow.
from tensorflow.python.client import device_lib print(device_lib.list_local_devices())Пример Вывода
[имя: "/ cpu:0" device_type: "CPU" memory_limit: 268435456 местность { } воплощение: 4402277519343584096,
имя: "/ gpu: 0" device_type: "GPU" memory_limit: 6772842168 местность { bus_id: 1 } воплощение: 7471795903849088328 physical_device_desc: "устройство: 0, имя: GeForce GTX 1070, идентификатор шины pci: 0000:05:00.0" ]
Это позволит подтвердить, что tensorflow с помощью графического процессора, а также обучение ?
код
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
Я думаю, что есть более простой способ добиться этого.
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 (под 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. если он значительно повышается при запуске программы, это сильный признак того, что ваш tensorflow использует GPU.
в дополнение к другим ответам, следующее должно помочь вам убедиться, что ваша версия tensorflow включает поддержку GPU.
import tensorflow as tf print(tf.test.is_built_with_cuda())
Я нахожу просто запрос 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
хорошо, сначала запустите
ipython shellиз терминала иimportTensorFlow$ 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поскольку мы
importEd TensorFlow но еще не использовали GPU, статистика использования будет:обратите внимание, как использование памяти GPU очень меньше (~ 200 МБ).
теперь давайте загрузим GPU в наш код. Как указано в
tf documentation, do:In [2]: sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))и посмотреть статистика должна показывать обновленную память использования GPU, как показано ниже:
посмотрите, как наш процесс Python из оболочки ipython использует 7,7 ГБ памяти GPU.
P. S. Вы можете продолжать смотреть эти статистические данные, как код работает,чтобы увидеть, насколько интенсивно использование GPU.
выполните следующие действия в 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\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\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.



Comments