PyTorch가 GPU를 사용하고 있는지 어떻게 확인합니까?
GPU를 해야 합니까?PyTorch GPU는 어떻게 해야 ?nvidia-smi
명령어는 GPU 액티비티를 검출할 수 있지만 Python 스크립트 내부에서 직접 확인하고 싶습니다.
다음 기능이 도움이 됩니다.
>>> import torch
>>> torch.cuda.is_available()
True
>>> torch.cuda.device_count()
1
>>> torch.cuda.current_device()
0
>>> torch.cuda.device(0)
<torch.cuda.device at 0x7efce0b03be0>
>>> torch.cuda.get_device_name(0)
'GeForce GTX 950M'
이것은 다음과 같습니다.
- CUDA는 1대의 디바이스에서 사용할 수 있습니다.
Device 0
를 말합니다.GeForce GTX 950M
파이토치
여기에 제안되지 않았기 때문에 올바른 텐서를 초기화할 때도 편리하기 때문에 를 사용한 메서드를 추가합니다.device
.
# setting device on GPU if available, else CPU
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print('Using device:', device)
print()
#Additional Info when using cuda
if device.type == 'cuda':
print(torch.cuda.get_device_name(0))
print('Memory Usage:')
print('Allocated:', round(torch.cuda.memory_allocated(0)/1024**3,1), 'GB')
print('Cached: ', round(torch.cuda.memory_reserved(0)/1024**3,1), 'GB')
집::torch.cuda.memory_cached
.torch.cuda.memory_reserved
★★★★★★★★★★★★를 사용해 .memory_cached
를 참조해 주세요.
출력:
Using device: cuda
Tesla K80
Memory Usage:
Allocated: 0.3 GB
Cached: 0.6 GB
설명한 바와 같이 ""를 합니다.device
다음과 같은 것이 가능합니다.
텐서를 각 텐서로 이동하려면
device
:torch.rand(10).to(device)
텐서를 직접 작성하려면
device
:torch.rand(10, device=device)
따라서 실제 코드를 변경하지 않고도 CPU와 GPU를 쉽게 전환할 수 있습니다.
편집:
캐싱 및 할당된 메모리에 대해 몇 가지 의문과 혼란이 있어 이에 대한 추가 정보를 추가합니다.
torch.cuda.max_memory_cached(device=None)
지정된 디바이스에 대해 캐시 할당자가 관리하는 최대 GPU 메모리(바이트)를 반환합니다.torch.cuda.memory_allocated(device=None)
지정된 디바이스의 현재 GPU 메모리 사용량을 텐서 단위로 반환합니다.
투고에서 상술한 바와 같이를 직접 건네주거나 [None]를 그대로 두면가 사용됩니다.
★★★★★3.0 수할 수 !Cuda 연산능력이 3.0 이하인 오래된 그래픽 카드는 보일 수 있지만 Pytorch에서는 사용할 수 없습니다!
Hekimgil씨가 지적해 주셔서 감사합니다.- 「쿠다 기능 3.0의 GPU0 GeForce GT 750M을 찾았습니다.PyTorch는 이 GPU를 너무 오래되었기 때문에 지원하지 않습니다.우리가 지원하는 최소 cuda 기능은 3.5입니다."
트레이닝 루프를 실행한 후 프로그램이 GPU 리소스를 어느 정도 사용하고 있는지 터미널에서 수동으로 감시하고 싶다면 간단히 사용할 수 있습니다.watch
$ watch -n 2 nvidia-smi
그러면 + 키를 c누를 때까지 2초마다 사용 통계가 계속 업데이트됩니다.
필요한 GPU 통계를 더 많이 제어해야 할 경우 보다 고급 버전의 를 와 함께 사용할 수 있습니다.다음은 이를 간단히 보여 줍니다.
$ watch -n 3 nvidia-smi --query-gpu=index,gpu_name,memory.total,memory.used,memory.free,temperature.gpu,pstate,utilization.gpu,utilization.memory --format=csv
다음과 같은 통계 정보를 출력합니다.
주의: 에서 콤마로 구분된 쿼리 이름 사이에는 공백이 없어야 합니다.--query-gpu=...
그렇지 않으면 이러한 값은 무시되고 통계 정보는 반환되지 않습니다.
또, PyTorch 의 인스톨이 CUDA 의 인스톨을 올바르게 검출하고 있는지를 확인하려면 , 다음의 조작을 실시합니다.
In [13]: import torch
In [14]: torch.cuda.is_available()
Out[14]: True
True
status는 PyTorch가 올바르게 설정되어 GPU를 사용하고 있는 것을 의미합니다.단, 코드에 필요한 문장이 있는 텐서를 이동/배치해야 합니다.
Python 코드 내에서 이 작업을 수행하려면 다음 모듈을 참조하십시오.
https://github.com/jonsafari/nvidia-ml-py 또는 여기 pypi: https://pypi.python.org/pypi/nvidia-ml-py/
실제적인 관점에서 보면, 단 한 가지 사소한 탈선:
import torch
dev = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
★★★★★★★★★★★★★★★★★.dev
cpu.cuda 중 어느 쪽이 cpu인지 알 수 있게 되었습니다.
그리고 cuda로 이동할 때 모델을 다루는 방법과 텐서를 다루는 방법에 차이가 있습니다.처음에는 좀 이상해요.
import torch
import torch.nn as nn
dev = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
t1 = torch.randn(1,2)
t2 = torch.randn(1,2).to(dev)
print(t1) # tensor([[-0.2678, 1.9252]])
print(t2) # tensor([[ 0.5117, -3.6247]], device='cuda:0')
t1.to(dev)
print(t1) # tensor([[-0.2678, 1.9252]])
print(t1.is_cuda) # False
t1 = t1.to(dev)
print(t1) # tensor([[-0.2678, 1.9252]], device='cuda:0')
print(t1.is_cuda) # True
class M(nn.Module):
def __init__(self):
super().__init__()
self.l1 = nn.Linear(1,2)
def forward(self, x):
x = self.l1(x)
return x
model = M() # not on cuda
model.to(dev) # is on cuda (all parameters)
print(next(model.parameters()).is_cuda) # True
이 모든 것은 까다로우므로 한 번 이해하면 디버깅을 줄일 수 있습니다.
공식 사이트의 시작 페이지에서 다음과 같이 PyTorch에 GPU를 사용할 수 있는지 확인할 수 있습니다.
import torch
torch.cuda.is_available()
쿼리 | 명령어 |
---|---|
PyTorch는 GPU를 인식합니까? | torch.cuda.is_available() |
텐서는 디폴트로 GPU에 저장되어 있습니까? | torch.rand(10).device |
기본 텐서 유형을 CUDA로 설정합니다. | torch.set_default_tensor_type(torch.cuda.FloatTensor) |
이 텐서는 GPU 텐서입니까? | my_tensor.is_cuda |
이 모델은 GPU에 저장되어 있습니까? | all(p.is_cuda for p in my_model.parameters()) |
사용 가능한 GPU가 있는지 확인하려면:
torch.cuda.is_available()
가 " "를 반환하는 False
,
- GPU가 없거나
- 또는 Nvidia 드라이버가 인스톨 되어 있지 않기 때문에, OS 로 GPU 가 인식되지 않습니다.
- GPU가 「GPU」에 .
CUDA_VISIBLE_DEVICES
의 の of の of . . 、CUDA_VISIBLE_DEVICES
-1면 되다.그러면 모든 디바이스가 숨겨집니다.에서는 이 할 수 . 이 행으로 할 수 있습니다.os.environ['CUDA_VISIBLE_DEVICES']
가 " "를 반환하는 True
GPU를 사용합니다.Pytorch에서는 디바이스를 작성할 때 텐서를 할당할 수 있습니다.는 '일부러'에 됩니다.cpu
을 수행합니다 텐서가 할당된 위치를 확인하려면 다음을 수행합니다.
# assuming that 'a' is a tensor created somewhere else
a.device # returns the device where the tensor is allocated
다른 디바이스에 할당되어 있는 텐서에서는 동작할 수 없습니다.GPU에 텐서를 할당하는 방법에 대해서는, https://pytorch.org/docs/stable/notes/cuda.html 를 참조해 주세요.
여기에서는 거의 모든 답변이 참조되어 있습니다.torch.cuda.is_available()
하지만 그건 동전의 일부일 뿐입니다.GPU(CUDA)를 사용합니다.일반적인 설정에서는 다음과 같이 장치를 설정합니다.
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
그러나 대규모 환경(연구 등)에서는 사용자에게 더 많은 옵션을 제공하는 것이 일반적이므로 입력에 따라 CUDA를 비활성화하거나 CUDA ID를 지정할 수 있습니다.이 경우 GPU의 사용 여부는 사용 가능 여부에만 근거하는 것이 아닙니다.되면, 그 디바이스의 「토치 디바이스」를 할 수 .type
CUDA인지 아닌지를 확인하는 속성입니다.
if device.type == 'cuda':
# do something
명령 프롬프트 또는 Linux 환경에서만 다음 명령을 실행합니다.
python -c 'import torch; print(torch.cuda.is_available())'
상기의 인쇄가 필요합니다.True
python -c 'import torch; print(torch.rand(2,3).cuda())'
이것은, 다음의 내용을 인쇄합니다.
tensor([[0.7997, 0.6170, 0.7042], [0.4174, 0.1494, 0.0516]], device='cuda:0')
에 온 가 항상 을 주기 때문이라면False
★★★★★★에torch.cuda.is_available()
GPU를 지원하지 않고 pytorch 버전을 설치했기 때문일 수 있습니다(예: 노트북으로 코드화한 후 서버에서 테스트했습니다).
해결 방법은 pytorch 다운로드 페이지에서 올바른 명령을 사용하여 pytorch를 제거하고 다시 설치하는 것입니다.이 Pytorch 문제도 참조하십시오.
는 가능하다.
torch.cuda.is_available()
True
를 할 때 다음과 가 발생하게 됩니다.
>>> torch.rand(10).to(device)
MBT가 제안하는 대로:
RuntimeError: CUDA error: no kernel image is available for execution on the device
이 링크는 다음과 같은 것을 알 수 있습니다.
... torch.cuda.is_available은 드라이버가 바이너리에서 사용된 cuda 버전과 호환되는지 여부만 확인합니다.즉, CUDA 10.1은 드라이버와 호환성이 있습니다.그러나 CUDA로 계산하면 아치의 코드를 찾을 수 없었습니다.
Linux 를 사용하고 있는 경우는, nvtop https://github.com/Syllo/nvtop 를 인스톨 하는 것을 추천합니다.
다음과 같은 결과를 얻을 수 있습니다.
다음과 같이 GPU에 텐서를 작성합니다.
$ python
>>> import torch
>>> print(torch.rand(3,3).cuda())
종료하지 말고 다른 터미널을 열고 다음을 사용하여 python 프로세스가 GPU를 사용하고 있는지 확인합니다.
$ nvidia-smi
아래 코드 사용
import torch
torch.cuda.is_available()
GPU가 존재하며 pytorch에 의해 인식되는지 여부만 표시됩니다.
다만, 「태스크 매니저」의 퍼포먼스에서는, GPU 의 사용율은 극히 소수입니다.
즉, 실제로는 CPU를 사용하고 있습니다.
위의 문제를 해결하려면 다음 사항을 확인하고 변경하십시오.
- 그래픽스 설정 --> 하드웨어 액셀러레이션 GPU 설정을 켜고 재시작합니다.
- 알림 영역에서 NVIDIA 제어판 --> 데스크톱 --> 디스플레이 GPU를 엽니다 [주의:Windows 를 새로 인스톨 했을 경우는, NVIDIA 제어판의 계약 조건도 동의할 필요가 있습니다.]
이거면 될 거야!
언급URL : https://stackoverflow.com/questions/48152674/how-do-i-check-if-pytorch-is-using-the-gpu
'programing' 카테고리의 다른 글
Maria에서 lower_case_table_names 변수 변경DB (0) | 2023.01.13 |
---|---|
마리아DB 삽입 위치...선택...0 행에 영향을 주는 중복 키 업데이트 켜기 (0) | 2023.01.13 |
PHP에서 두 좌표 사이의 거리 측정 (0) | 2023.01.13 |
'mariadb 다운로드 중'에서 도커 빌드에 실패했습니다. (0) | 2023.01.13 |
DOM parentNode와 parentElement의 차이점 (0) | 2023.01.13 |