Mam plan wykorzystania rozproszonego TensorFlow i widziałem, że TensorFlow może używać GPU do szkolenia i testowania. W środowisku klastrowym każda maszyna może mieć 0 lub 1 lub więcej procesorów graficznych i chcę uruchomić mój wykres TensorFlow na procesorach GPU na jak największej liczbie komputerów.
Odkryłem, że podczas uruchamiania tf.Session()
TensorFlow podaje informacje o GPU w komunikatach 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: w jaki sposób mogę uzyskać informacje o aktualnie dostępnym GPU od TensorFlow? Mogę pobrać informacje o GPU z dziennika, ale chcę to zrobić w bardziej wyrafinowany, programistyczny sposób. Mógłbym również celowo ograniczyć GPU za pomocą zmiennej środowiskowej CUDA_VISIBLE_DEVICES, więc nie chcę wiedzieć, w jaki sposób uzyskać informacje o GPU z jądra systemu operacyjnego.
Krótko mówiąc, chcę, aby taka funkcja tf.get_available_gpus()
powróciła, ['/gpu:0', '/gpu:1']
jeśli w komputerze są dostępne dwa GPU. Jak mogę to zaimplementować?
źródło
Free memory
dla mnie pole za pomocątensorflow1.1
. W Pythoniefrom tensorflow.python.client import device_lib
device_lib.list_local_devices()
Możesz sprawdzić listę wszystkich urządzeń za pomocą następującego kodu:
źródło
python3 -c "from tensorflow.python.client import device_lib; print(device_lib.list_local_devices())"
cannot import name 'format_exc' from 'traceback'
W narzędziu testowym znajduje się również metoda . Więc wszystko, co należy zrobić, to:
i / lub
Poszukaj argumentów w dokumentacji Tensorflow.
źródło
tf.test.is_gpu_available()
powrócimyTrue
W TensorFlow 2.0 możesz użyć
tf.config.experimental.list_physical_devices('GPU')
:Jeśli masz zainstalowane dwa GPU, wyświetla to:
Od 2.1 możesz upuścić
experimental
:Widzieć:
źródło
'GPU'
się'XLA_GPU'
.Odpowiedź Zaakceptowany daje liczbę procesorów graficznych, ale także przydziela całą pamięć o tych procesorów graficznych. Możesz tego uniknąć, tworząc sesję ze stałą mniejszą ilością pamięci przed wywołaniem device_lib.list_local_devices (), co może być niepożądane dla niektórych aplikacji.
Skończyło się na tym, że użyłem nvidia-smi, aby uzyskać liczbę procesorów graficznych bez przydzielania im pamięci.
źródło
Oprócz doskonałego wyjaśnienia Mrry'ego, w którym zasugerował użycie
device_lib.list_local_devices()
, mogę pokazać, jak można sprawdzić informacje związane z GPU z wiersza poleceń.Ponieważ obecnie tylko procesory graficzne Nvidii działają dla frameworków NN, odpowiedź dotyczy tylko nich. Nvidia ma stronę, na której dokumentują, w jaki sposób można używać interfejsu systemu plików / proc do uzyskiwania informacji o sterowniku, wszelkich zainstalowanych kartach graficznych NVIDIA i statusie AGP w czasie wykonywania.
Możesz więc uruchomić to z wiersza poleceń
cat /proc/driver/nvidia/gpus/0/information
i zobaczyć informacje o swoim pierwszym GPU. Łatwo jest to uruchomić z Pythona, a także możesz sprawdzić drugi, trzeci, czwarty GPU, aż się nie powiedzie.Zdecydowanie odpowiedź Mrry'ego jest solidniejsza i nie jestem pewien, czy moja odpowiedź będzie działać na komputerze innym niż Linux, ale strona Nvidii zawiera inne interesujące informacje, o których niewiele osób wie.
źródło
W tensorflow 2 działa:
Od 2.1 możesz upuścić
experimental
:https://www.tensorflow.org/api_docs/python/tf/config/list_physical_devices
źródło
Mam GPU wywołane
NVIDIA GTX GeForce 1650 Ti
na mojej maszynie ztensorflow-gpu==2.2.0
Uruchom następujące dwie linie kodu:
Wynik:
źródło
Skorzystaj w ten sposób i sprawdź wszystkie części:
źródło
Upewnij się, że masz zainstalowany najnowszy procesor graficzny TensorFlow 2.x na maszynie obsługującej GPU, wykonaj następujący kod w języku Python,
Otrzyma wynik w postaci,
źródło