Chciałbym wiedzieć, czy pytorch
używa mojego GPU. Można wykryć, nvidia-smi
czy w trakcie procesu występuje jakakolwiek aktywność GPU, ale chcę, aby coś było napisane w python
skrypcie.
Czy jest na to sposób?
To zadziała:
In [1]: import torch
In [2]: torch.cuda.current_device()
Out[2]: 0
In [3]: torch.cuda.device(0)
Out[3]: <torch.cuda.device at 0x7efce0b03be0>
In [4]: torch.cuda.device_count()
Out[4]: 1
In [5]: torch.cuda.get_device_name(0)
Out[5]: 'GeForce GTX 950M'
In [6]: torch.cuda.is_available()
Out[6]: True
To mówi mi, że procesor graficzny GeForce GTX 950M
jest używany przez PyTorch
.
torch.cuda.current_device()
było dla mnie pomocne. Okazało się, że mój procesor graficzny jest niestety za stary: „Znaleziono GPU0 GeForce GTX 760, który ma możliwości cuda 3.0. PyTorch nie obsługuje już tego GPU, ponieważ jest za stary”.torch.cuda.is_available()
$ watch -n 2 nvidia-smi
wykonuje zadanie. Aby uzyskać więcej informacji, zobacz moją odpowiedź poniżej .Ponieważ nie zostało to tutaj zaproponowane, dodaję metodę wykorzystującą
torch.device
, ponieważ jest to dość przydatne, również podczas inicjalizacji tensorów na poprawnejdevice
.Wynik:
Jak wspomniano powyżej, stosując
device
to możliwe :Aby przenieść tensory do odpowiednich
device
:Aby utworzyć tensor bezpośrednio na
device
:Co sprawia, że przełączanie między procesorem a GPU jest wygodne bez zmiany rzeczywistego kodu.
Edytować:
Ponieważ pojawiło się kilka pytań i nieporozumień dotyczących pamięci podręcznej i przydzielonej , dodam dodatkowe informacje na ten temat:
torch.cuda.max_memory_cached(device=None)
Zwraca maksymalną ilość pamięci GPU zarządzanej przez alokator buforowania w bajtach dla danego urządzenia.
torch.cuda.memory_allocated(device=None)
Zwraca bieżące użycie pamięci GPU przez tensory w bajtach dla danego urządzenia.
Możesz bezpośrednio przekazać,
device
jak określono powyżej w poście, lub pozostawić Brak i użyje rozszerzeniacurrent_device()
.źródło
## neural network in pytorch
, a na końcu dodaję twój kod. Nadal pokazuje Używając urządzenia: cuda; i 0 GB dla przydzielonych i buforowanych. Próbowałem też wstawić go na końcu pętli forfor i in range(epoch):
po wstecznej propagacji, nadal wszystkiemy_tensor_on_gpu * my_tensor_on_cpu
nie powiedzie się.Found GPU0 GeForce GT 750M which is of cuda capability 3.0. PyTorch no longer supports this GPU because it is too old. The minimum cuda capability that we support is 3.5.
Po uruchomieniu pętli szkoleniowej, jeśli chcesz ręcznie obserwować ją z poziomu terminala, czy Twój program wykorzystuje zasoby GPU iw jakim stopniu, możesz po prostu użyć
watch
:Spowoduje to ciągłą aktualizację statystyk użytkowania co 2 sekundy, aż do naciśnięcia ctrl+c
Jeśli potrzebujesz większej kontroli nad większą liczbą statystyk GPU, których możesz potrzebować, możesz użyć bardziej wyrafinowanej wersji programu
nvidia-smi
with--query-gpu=...
. Poniżej znajduje się prosta ilustracja tego:który wyświetli statystyki takie jak:
Uwaga : między nazwami zapytań oddzielonych przecinkami w programie nie powinno być spacji
--query-gpu=...
. W przeciwnym razie te wartości zostaną zignorowane i żadne statystyki nie zostaną zwrócone.Możesz również sprawdzić, czy Twoja instalacja PyTorch poprawnie wykrywa instalację CUDA, wykonując:
True
oznacza status że PyTorch jest prawidłowo skonfigurowany i jest przy użyciu GPU chociaż trzeba przesunąć / umieścić tensory z niezbędnych instrukcji w kodzie.Jeśli chcesz to zrobić wewnątrz kodu Pythona, spójrz na ten moduł:
https://github.com/jonsafari/nvidia-ml-py lub w pypi tutaj: https://pypi.python.org/pypi/nvidia-ml-py/
źródło
watch
jest przydatneW witrynie biura i na stronie startowej sprawdź GPU dla PyTorch, jak poniżej:
Źródła : PyTorch | Rozpocznij
źródło
Z praktycznego punktu widzenia tylko jedna drobna dygresja:
To
dev
teraz wie, czy CUDA czy CPU.I jest różnica, jak radzisz sobie z modelem i tensorami podczas przechodzenia do CUDA. Na początku jest to trochę dziwne.
To wszystko jest trudne, a zrozumienie tego raz pomaga szybko poradzić sobie z mniejszym debugowaniem.
źródło
M()
? Gdzie jestM
zdefiniowane?Aby sprawdzić, czy jest dostępny procesor graficzny:
Jeśli powyższa funkcja zwróci
False
,CUDA_VISIBLE_DEVICES
. Gdy wartośćCUDA_VISIBLE_DEVICES
wynosi -1, wszystkie urządzenia są ukrywane. Możesz sprawdzić tę wartość w kodzie za pomocą tej linii:os.environ['CUDA_VISIBLE_DEVICES']
Jeśli powyższa funkcja zwróci
True
, niekoniecznie oznacza to, że używasz GPU. W Pytorch możesz przydzielać tensory do urządzeń podczas ich tworzenia. Domyślnie tensory są przydzielane docpu
. Aby sprawdzić, gdzie jest przydzielony twój tensor, wykonaj:Zauważ, że nie możesz operować na tensorach przydzielonych do różnych urządzeń. Aby zobaczyć, jak przydzielić tensor do GPU, zobacz tutaj: https://pytorch.org/docs/stable/notes/cuda.html
źródło
Prawie wszystkie odpowiedzi tutaj odnoszą się
torch.cuda.is_available()
. Jednak to tylko jedna część medalu. Informuje, czy procesor graficzny (a właściwie CUDA) jest dostępny, a nie, czy jest rzeczywiście używany. W typowej konfiguracji możesz ustawić urządzenie na coś takiego:ale w większych środowiskach (np. badania) często daje się użytkownikowi więcej opcji, więc na podstawie danych wejściowych może wyłączyć CUDA, określić identyfikatory CUDA i tak dalej. W takim przypadku to, czy procesor graficzny jest używany, nie zależy tylko od tego, czy jest dostępny, czy nie. Po ustawieniu urządzenia jako latarki można uzyskać jego
type
właściwość, aby sprawdzić, czy jest to CUDA, czy nie.źródło
Po prostu z wiersza poleceń lub środowiska Linux uruchom następujące polecenie.
Powyższe powinno zostać wydrukowane
True
Ten powinien wydrukować:
źródło
Jeśli jesteś tu, ponieważ pytorch zawsze daje
False
zatorch.cuda.is_available()
to prawdopodobnie dlatego, że zainstalowano wersję pytorch bez wsparcia GPU. (Np .: zakodowałeś na laptopie, a potem testowałeś na serwerze).Rozwiązaniem jest odinstalowanie i ponowne zainstalowanie programu pytorch za pomocą odpowiedniego polecenia ze strony pobierania programu pytorch . Odnieś się też do tego problemu z pytorchem.
źródło
Utwórz tensor na GPU w następujący sposób:
Nie wychodź, otwórz inny terminal i sprawdź, czy proces Pythona używa GPU za pomocą:
źródło
nvidia-smi
linii poleceńnvidia-smi
.