Jak uzyskać aktualne dostępne GPU w tensorflow?

Mam plan użycia rozproszonego TensorFlow i widziałem, że TensorFlow może używać GPU do treningu i testowania. W środowisku klastrowym każda maszyna może mieć 0 LUB 1 lub więcej GPU, a ja chcę uruchomić mój wykres TensorFlow na GPU na jak największej liczbie maszyn.

Odkryłem, że podczas uruchamiania tf.Session() TensorFlow podaje informacje o GPU w wiadomościach dziennika, jak poniżej:

I tensorflow/core/common_runtime/gpu/gpu_init.cc:126] DMA: 0 
I tensorflow/core/common_runtime/gpu/gpu_init.cc:136] 0:   Y 
I tensorflow/core/common_runtime/gpu/gpu_device.cc:838] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 1080, pci bus id: 0000:01:00.0)

Moje pytanie brzmi jak uzyskać informacje o aktualnym dostępnym GPU z TensorFlow? I can get załadowane informacje GPU z dziennika, ale chcę to zrobić w bardziej wyrafinowany, programowy sposób. Mógłbym również ograniczyć GPU celowo używając zmiennej środowiskowej CUDA_VISIBLE_DEVICES, więc nie chcę znać sposobu na uzyskanie informacji o GPU z jądra systemu operacyjnego.

Krótko mówiąc, Chcę funkcję taką jak tf.get_available_gpus(), która zwróci ['/gpu:0', '/gpu:1'], jeśli w maszynie są dostępne dwa GPU. Jak mogę to wdrożyć?

Author: mrry, 2016-07-25

4 answers

Istnieje nieudokumentowana metoda zwana device_lib.list_local_devices() umożliwia to wyświetlenie listy urządzeń dostępnych w procesie lokalnym. (NB jako metoda nieudokumentowana, podlega ona zmianom niezgodnym wstecz.) Funkcja zwraca listę DeviceAttributes bufor protokołu obiektów. Możesz wyodrębnić listę ciągów nazw urządzeń dla urządzeń GPU w następujący sposób:

from tensorflow.python.client import device_lib

def get_available_gpus():
    local_device_protos = device_lib.list_local_devices()
    return [x.name for x in local_device_protos if x.device_type == 'GPU']

Zauważ, że (przynajmniej do TensorFlow 1.4) wywołanie device_lib.list_local_devices() uruchomi jakiś kod inicjalizacyjny, który domyślnie, przydziela całą pamięć GPU na wszystkich urządzeniach (problem z Githubem ). Aby tego uniknąć, najpierw Utwórz sesję z jawnie małym per_process_gpu_fraction lub allow_growth=True, aby zapobiec Przydzielaniu całej pamięci. Zobacz to pytanie aby uzyskać więcej szczegółów.

 128
Author: mrry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-13 14:58:15

Możesz sprawdzić listę wszystkich urządzeń za pomocą następującego kodu:

from tensorflow.python.client import device_lib

device_lib.list_local_devices()
 55
Author: hyun woo Cho,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-19 06:59:13

Oprócz doskonałego wyjaśnienia Mrry, gdzie zasugerował użycie device_lib.list_local_devices() mogę pokazać, jak można sprawdzić informacje związane z GPU z linii poleceń.

Ponieważ obecnie tylko GPU Nvidii pracują dla frameworków NN, odpowiedź dotyczy tylko nich. Nvidia posiada Stronę , gdzie dokumentuje sposób użycia interfejsu systemu plików /proc w celu uzyskania informacji o sterowniku, zainstalowanych kartach graficznych NVIDIA i statusie AGP.

/proc/driver/nvidia/gpus/0..N/information

Podaj informacje o każdy z zainstalowanych kart graficznych NVIDIA (Nazwa modelu, IRQ, BIOS wersji, Typu Bus). Należy pamiętać, że wersja BIOS jest dostępna tylko podczas X działa.

Więc możesz uruchomić to z linii poleceń cat /proc/driver/nvidia/gpus/0/information i zobaczyć informacje o swoim pierwszym GPU. Łatwo jest uruchomić to z Pythona , a także możesz sprawdzić drugi, trzeci, czwarty GPU, aż się nie powiedzie.

Zdecydowanie odpowiedź Mrry jest mocniejsza i nie jestem pewnie, czy moja odpowiedź będzie działać na nie-linuksowej maszynie, ale ta strona Nvidii dostarcza innych ciekawych informacji, o których niewiele osób wie.

 8
Author: Salvador Dali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-29 04:31:12

Istnieje również metoda w Test util . Więc wszystko co trzeba zrobić to:

tf.test.is_gpu_available()

I / lub

tf.test.gpu_device_name()

Poszukaj argumentów w dokumentach Tensorflow.

 4
Author: Soham Bhattacharyya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-22 06:14:08