programing

PyTorch가 GPU를 사용하고 있는지 어떻게 확인합니까?

nicescript 2023. 1. 13. 20:02
반응형

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를 쉽게 전환할 수 있습니다.


편집:

캐싱 할당된 메모리에 대해 몇 가지 의문과 혼란이 있어 이에 대한 추가 정보를 추가합니다.


투고에서 상술한 바와 같이를 직접 건네주거나 [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

Truestatus는 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")

★★★★★★★★★★★★★★★★★.devcpu.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 | 시작하기

쿼리 명령어
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,

  1. GPU가 없거나
  2. 또는 Nvidia 드라이버가 인스톨 되어 있지 않기 때문에, OS 로 GPU 가 인식되지 않습니다.
  3. GPU가 「GPU」에 .CUDA_VISIBLE_DEVICES의 の of の of . . 、CUDA_VISIBLE_DEVICES-1면 되다.그러면 모든 디바이스가 숨겨집니다.에서는 이 할 수 . 이 행으로 할 수 있습니다.os.environ['CUDA_VISIBLE_DEVICES']

가 " "를 반환하는 TrueGPU를 사용합니다.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의 사용 여부는 사용 가능 여부에만 근거하는 것이 아닙니다.되면, 그 디바이스의 「토치 디바이스」를 할 수 .typeCUDA인지 아닌지를 확인하는 속성입니다.

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를 사용하고 있습니다.

위의 문제를 해결하려면 다음 사항을 확인하고 변경하십시오.

  1. 그래픽스 설정 --> 하드웨어 액셀러레이션 GPU 설정을 켜고 재시작합니다.
  2. 알림 영역에서 NVIDIA 제어판 --> 데스크톱 --> 디스플레이 GPU를 엽니다 [주의:Windows 를 새로 인스톨 했을 경우는, NVIDIA 제어판의 계약 조건도 동의할 필요가 있습니다.]

이거면 될 거야!

언급URL : https://stackoverflow.com/questions/48152674/how-do-i-check-if-pytorch-is-using-the-gpu

반응형