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ć?
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.
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()
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.
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.
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