2017-03-01 19 views
7

Poszukuję prostego sposobu sprawdzenia, czy moje wykresy TF rzeczywiście działają na GPU.TensorFlow: Jak sprawdzić, czy działa na GPU?

PS. Byłoby również miło sprawdzić, czy jest używana biblioteka cuDNN.

+0

Uruchom z 'nvprof' może podać szczegółowe informacje o wywołaniach funkcji cuda. Lub po prostu uruchom 'nvidia-smi', aby sprawdzić wykorzystanie GPU podczas działania. – Kh40tiK

+0

Możliwy duplikat [W jaki sposób TensorFlow nie uruchamia skryptu, chyba że GPU zostało poprawnie załadowane?] (Http://stackoverflow.com/questions/42403501/how-does-one-have-tensorflow-not-run-the -script-unless-the-gpu-was-loaded-succes) –

Odpowiedz

7

Istnieje kilka sposobów wyświetlenia pozycji op.

  1. Dodaj RunOptions i RunMetadata do połączenia sesji i przeglądać umieszczenie OPS i obliczeń w Tensorboard. Zobacz kod tutaj: https://www.tensorflow.org/get_started/graph_viz

  2. Określa opcję log_device_placement w sesji ConfigProto. To loguje się do konsoli, na którym urządzeniu są umieszczane operacje. https://www.tensorflow.org/api_docs/python/tf/ConfigProto

  3. Wyświetl użycie GPU w terminalu za pomocą nvidia-smi.

+1

Uwaga: rejestrowanie metadanych wymaga dużego nakładu zasobów i powinno być używane wyłącznie do debugowania. – pfredriksen

4

Podczas importowania TF w Pythonie

import tensorflow as tf 

Dostaniesz te dzienniki, które wskazują wykorzystanie bibliotek CUDA

I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.8.0 locally 
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally 
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.8.0 locally 
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally 
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.8.0 locally 

również podczas tworzenia wykresu i uruchomić sesję log_device_placement w Config Proto, otrzymasz te logi (pokazuje, że znalazłeś urządzenie GPU):

I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:910] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:885] Found device 0 with properties: 
name: GeForce GTX 1060 6GB 
major: 6 minor: 1 memoryClockRate (GHz) 1.759 
pciBusID 0000:01:00.0 
Total memory: 5.93GiB 
Free memory: 4.94GiB 
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 GTX 1060 6GB, pci bus id: 0000:01:00.0) 
+0

Otrzymuję to samo wyjście, jak opisano powyżej. Ale modele ilościowe, które trzeba przejść do przeszkolenia, są takie same jak procesory. Nie jestem pewien, co robię źle. Przy użyciu estymatora DNNRegressor ten sam kod jest uruchamiany na procesorze i GPU bez żadnych modyfikacji, ponieważ dowiedziałem się, że Estimtors domyślnie wybierają GPU do wykonania, jeśli GPU jest dostępne. Jakikolwiek sposób, aby dowiedzieć się? – user3457384

+0

Czy widzisz użycie GPU? czy "oglądaj nvidia-smi". Sprawdź zużycie pamięci i zmienność GPU. – hars

+0

Oto mój problem wyjaśniony szczegółowo. https://stackoverflow.com/questions/46648484/how-to-make-best-use-of-gpu-for-tensorflow-estimators – user3457384

0

Istnieje powiązany numer TensorFlow upstream issue. Zasadniczo mówi, że API Pythona nie ujawnia jeszcze takich informacji.

C++ API jednak działa. Na przykład. jest tensorflow::KernelsRegisteredForOp(). Napisałem wokół tego małą paczkę Pythona, a następnie zaimplementowałem supported_devices_for_ophere (w this commit).

Powiązane problemy