Skip to main content

PyTorch로 GPU를 사용하는 방법

딥러닝 모델에 PyTorch로 GPU를 사용하는 방법에 대한 간략한 튜토리얼.
Created on February 2|Last edited on February 2
이는 여기에서 볼 수 있는 영어 기사를 번역한 것이다.

섹션




도입

이 보고서에서는 GPU를 보다 효과적으로 사용 및 제어할 수 있는 방법에 대해 설명하고자 합니다.
모든 GPU와 CPU 활용률 메트릭(Utilization Metrics)을 자동으로 로그(Log)할 수 있는 가중치 & 바이어스 (Weights & Biases)를 사용할 것입니다. 수많은 모델에 트레이닝을 제공함에 따라 컴퓨팅 리소스 사용량을 쉽게 모니터링할 수 있습니다.

GPU 가용성 확인

GPU에 액세스할 수 있는지 확인하는 가장 쉬운 방법은 torch.cuda.is_available()을 콜(Call)하는 것입니다. 결과가 True인 경우 시스템에 Nvidia 드라이버가 올바르게 설치된 것입니다.
>>> import torch
>>> torch.cuda.is_available()


GPU - Gotcha 사용

  • 텐서 (Tensor)는 디폴트 값으로 CPU에서 생성되며 모델도 CPU에서 초기화됩니다. 따라서 GPU를 사용하여 작업이 완료되었는지 수동으로 확인해야 합니다.
    >>> X_train = torch.FloatTensor([0., 1., 2.])
    >>> X_train.is_cuda
    False
  • PyTorch는 CPU가 생성한 텐서 (Tensor)를 GPU로 전송할 수 있도록 하는 간편한 API를 제공합니다. 다행히 새로운 텐서 (Tensor)는 상위 텐서와 동일한 장치에 생성됩니다.
    >>> X_train = X_train.to(device)
    >>> X_train.is_cuda
    True
  • 모델에도 같은 로직이 적용됩니다.
    model = MyModel(args)
    model.to(device)
  • 따라서 데이터와 모델은 GPU로 전송되어야 합니다. 그렇다면 장치device 란 무엇일까요?
  • 일반적으로 트레이닝 중인 장치(CPU 또는 GPU)에 보관할 장치device를 초기화하는 것이 PyTorch의 일반적인 관행입니다.
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    print(device)

Torch CUDA 패키지

PyTorch에서 torch.cuda 패키지가 CPU 텐서와 동일한 기능을 구현하는 CUDA 텐서 유형을 추가로 지원하지만 컴퓨팅을 위해 GPU를 활용합니다.
  • 만약 GPU에 탠서를 원한다면, .cuda()를 콜(Call)하세요.
    >>> X_train = torch.FloatTensor([0., 1., 2.])
    >>> X_train = X_train.cuda()
  • 이미 GPU에 텐서(Tensor)가 있는 경우 CPU에 가져오려면 .cpu()를 콜(Call)하세요. 이는 일반적으로 모델의 출력값(텐서)을 CPU로 가져오는 데 사용됩니다.
  • 현재 선택한 장치의 인덱스 가져오기.
    >>> torch.cuda.current_device() # returns 0 in my case
  • 사용할 수 있는 GPU 수 가져오기.
    >>> torch.cuda.device_count() # returns 1 in my case
  • 장치 이름을 가져오기.
    >>> torch.cuda.get_device_name(0) # good old Tesla K80


예시 및 GPU 메트릭 시각화


PyTorch를 사용하여 간단한 MNIST classifier를 트레이닝하기 위해 링크된 코랩 노트북(Colab Notebook)을 사용해 보세요. 노트북은 Weights & Biases와 통합되어 있습니다.
Weights & Biases를 사용하여 모델을 추적하는 경우 GPU 활용률을 포함한 모든 시스템 메트릭이 자동으로 로그(기록)됩니다. 로그(기록)된 가장 중요한 메트릭 중 일부에는 할당된 GPU 메모리와 사용률, CPU 사용률 등이 포함되어 있습니다. 로그된 메트릭의 전체 목록은 여기에서 확인할 수 있습니다.
다음의 미디어 패널은 트레이닝 중에 W&B (가중치 & 바이어스)에서 자동으로 로그(기록)한 이러한 시스템 메트릭 중 일부를 보여줍니다.



요약

이 아티클에서는 케라스(Keras)를 사용한 딥 러닝 연구에 GPU를 활용하고 가중치 & 바이어스를 사용하여 리소스의 소비를 모니터링하는 방법을 살펴보고자 합니다. W&B로 트레이닝 하는 동안 리소스 활용률 추적 시스템 (Tracking System Resource Utilization)에 대한 람다 랩스(Lambda Labs)의 이 훌륭한 아티클의 확인해보세요.

Weights & Biases

Weights & Biases는 여러분의 머신 러닝 실험을 추적할 수 있도록 도와줍니다. 우리 툴을 사용하면 실행에서 하이퍼 파라미터 (Hyperparameter)와 출력 메트릭을 로그(기록)한 후에 결과값을 시각화 및 비교하고 결과값을 동료 분들과 신속하게 공유할 수 있습니다.
5분 안에 시작해보세요.

PyTorch에 관심있는 분들에게 추천하는 내용



Iterate on AI agents and models faster. Try Weights & Biases today.