Zainstalowałem tensorflow w moim ubuntu 16.04 używając drugiej odpowiedzi tutaj z ubuntu's wbudowaną instalacją apt cuda.
Teraz moje pytanie brzmi, jak mogę przetestować, czy tensorflow naprawdę używa gpu? Mam gpu gtx 960m. Kiedy importuję tensorflow
to jest wyjście
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
Czy to wyjście wystarczy, aby sprawdzić, czy tensorflow używa gpu ?
Nie, nie sądzę, że "otwarta biblioteka CUDA" jest wystarczająca, aby powiedzieć, ponieważ różne węzły wykresu mogą być na różnych urządzeniach.
Aby dowiedzieć się, które urządzenie jest używane, możesz włączyć log device placement w ten sposób:
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
Sprawdź swoją konsolę dla tego typu danych wyjściowych.
Oprócz używania sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
, który jest nakreślony w innych odpowiedziach, a także w oficjalnej TensorFlow dokumentacja, możesz spróbować przypisać obliczenia do gpu i zobaczyć, czy masz błąd.
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))
Tutaj
Jeśli masz gpu i możesz go użyć, zobaczysz wynik. W przeciwnym razie zobaczysz błąd z długim stacktrace. W końcu będziesz miał coś takiego:
Cannot assign a device to node 'MatMul': Could not satisfy explicit specyfikacji urządzenia '/device:GPU:0', ponieważ żadne urządzenie odpowiadające tej specyfikacja nie jest zarejestrowana w tym procesie
Ostatnio w TF pojawiło się kilka pomocnych funkcji:
Możesz również sprawdzić dostępne urządzenia w sesji:
with tf.Session() as sess:
devices = sess.list_devices()
devices
zwróci ci coś takiego jak
[_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)
To potwierdzi, że tensorflow używając GPU podczas treningu również ?
_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