Инсталирах tensorflow в моето ubuntu 16.04, като използвах втория отговор тук с вградената инсталация на apt cuda.
Сега въпросът ми е как мога да проверя дали tensorflow наистина използва gpu? Имам gtx 960m gpu. Когато импортирам 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 библиотека" е достатъчно, за да се каже, защото различните възли на графиката могат да бъдат на различни устройства.
За да разберете кое устройство се използва, можете да активирате функцията за регистриране на разположението на устройствата по следния начин:
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))
Тук
Ако разполагате с gpu и можете да го използвате, ще видите резултата. В противен случай ще видите грешка с дълга стейкхрейс. В крайна сметка ще получите нещо подобно:
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, използвайки GPU по време на обучението също ?
Code
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Output
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