PyTorch GPU setting

  • PyTorch GPU 버전을 설치한다고 GPU를 사용하지 않습니다.
  • GPU가 여럿이라면 어떤 GPU가 사용 가능한지 확인하고,
  • 변수와 모델에 GPU 사용 설정을 해야 합니다.

1. PyTorch 버전 확인

  • 현재 버전을 확인합니다.
    1
    2
    3
    import torch, torchvision
    print(torch.__version__)
    print(torchvision.__version__)
    • 실행 결과
      1
      2
      1.7.1+cu101
      0.8.2+cu101

2. GPU 현황 확인

  • GPU가 사용 가능한지 확인합니다.
  • 사용 가능하다면, 메모리 점유 현황을 출력합니다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if torch.cuda.is_available():
    for i in range(torch.cuda.device_count()):
    print(f"# DEVICE {i}: {torch.cuda.get_device_name(i)}")
    print("- Memory Usage:")
    print(f" Allocated: {round(torch.cuda.memory_allocated(i)/1024**3,1)} GB")
    print(f" Cached: {round(torch.cuda.memory_cached(i)/1024**3,1)} GB\n")

    else:
    print("# GPU is not available")
    • 실행 결과
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      # DEVICE 0: Tesla V100-PCIE-32GB
      - Memory Usage:
      Allocated: 0.0 GB
      Cached: 0.0 GB

      # DEVICE 1: Tesla V100-PCIE-32GB
      - Memory Usage:
      Allocated: 0.0 GB
      Cached: 0.0 GB

      # DEVICE 2: Tesla V100-PCIE-32GB
      - Memory Usage:
      Allocated: 0.0 GB
      Cached: 0.0 GB

3. GPU 할당 변경

  • 작업할 GPU를 선정합니다.
    1
    2
    3
    4
    5
    6
    # GPU 할당 변경하기
    GPU_NUM = 2 # 원하는 GPU 번호 입력
    device = torch.device(f'cuda:{GPU_NUM}' if torch.cuda.is_available() else 'cpu')
    torch.cuda.set_device(device) # change allocation of current GPU

    print ('# Current cuda device: ', torch.cuda.current_device()) # check
    • 실행 결과
      1
      # Current cuda device:  2

4. GPU 사용을 기본값으로 설정

  • 변수를 만들때 자동으로 GPU를 사용하게 설정합니다.
  • 앞서 GPU_NUM으로 지정한 GPU에 할당됩니다.
    1
    2
    3
    if torch.cuda.is_available():
    torch.set_default_tensor_type(torch.cuda.FloatTensor)
    print(f"using cuda: {GPU_NUM}, {torch.cuda.get_device_name(GPU_NUM)}")
  • 실행 결과
    1
    using cuda: 2, Tesla V100-PCIE-32GB
  • 변수를 만들어 확인합니다.

    1
    2
    x = torch.FloatTensor([1.0])
    x.type()
    • 실행 결과
      1
      'torch.FloatTensor'
  • GPU 사용을 기본값으로 명시했는데 안올라갑니다.

  • 강제로 올려봅니다.

    1
    2
    x = x.cuda()
    x.type()
    • 실행 결과
      1
      'torch.cuda.FloatTensor'
  • 그냥 torch.Tensor()를 해야 GPU에 올라갑니다.
  • 자료형도 내가 원하는 torch.cuda.FloatTensor입니다.
    1
    2
    x = torch.Tensor([1.0])
    x.type()
    • 실행 결과
      1
      'torch.cuda.FloatTensor'


도움이 되셨나요? 카페인을 투입하시면 다음 포스팅으로 변환됩니다

Share