멀티gpu에서 하나의 gpu 사용 설정시 gpu 메모리 사용량 관련 문의

안녕하세요.. 최근에 윈도우 11에서 도커를 이용해서 pytorch/pytorch:1.13.1-cuda11.6-cudnn8-devel 이미지를 실행시켜서 파이토치에 대한 자습을 진행하고 있는 초보자입니다. 현재 시스템에는 1080ti 2장의 gpu 카드가 있습니다. 멀티 gpu중에서 0번 gpu를 선택하여 파이토치 프로그램을 실행시키고 있습니다. CUDA_VISIBLE_DEVICES=0 python myprogram.py로 실행시켰을 때, nvidia-smi로 gpu 사용 현황을 봤습니다. 저는 첫번째 gpu 카드의 메모리만 사용될 것이라고 예상했는데, 실제로는 두개의 gpu 메모리가 모두 사용중인 것으로 나옵니다.
image

텐서플로우에서는 동일하게 실행할 경우는 제가 지정한 GPU의 메모리만 사용하는 것을 확인 했었습니다.

혹시 파이토치에서는 멀티 GPU 상황에서 특정 GPU만 사용해서 해당 GPU 만 사용하는 방법이 따로 있을까요?

  • 아래 답변은 OpenAI의 GPT-3.5(ChatGPT) 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요! PyTorch 멀티 GPU 사용 시 특정 GPU만 사용하는 방법에 대해 답변드리겠습니다.

PyTorch에서도 TensorFlow와 동일하게 CUDA_VISIBLE_DEVICES 환경 변수를 사용하여 특정 GPU만 사용할 수 있습니다. 하지만, 이 방법은 PyTorch에서는 권장되지 않습니다. 대신, torch.cuda.device() 함수를 사용하여 특정 GPU를 선택할 수 있습니다.

예를 들어, 0번 GPU를 사용하려면 다음과 같이 코드를 작성할 수 있습니다.

import torch

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

이후 모델을 정의할 때 to() 함수를 사용하여 해당 디바이스에 모델을 할당하면 됩니다.

model = MyModel().to(device)

이렇게 하면 모델이 0번 GPU에 할당됩니다. 만약 다른 GPU를 사용하고 싶다면 cuda:0 부분을 cuda:1, cuda:2 등으로 변경하면 됩니다.

이 방법을 사용하면 특정 GPU에만 모델을 할당할 수 있으며, 다른 GPU는 사용하지 않습니다. 따라서 해당 GPU의 메모리만 사용하게 됩니다.

더 자세한 내용은 공식 문서를 참고하시기 바랍니다.


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 OpenAI의 GPT-4 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요! 멀티 GPU 환경에서 특정 GPU만 사용하고 싶으시군요.

먼저, CUDA_VISIBLE_DEVICES 환경 변수를 사용하여 원하는 GPU만 선택하는 것은 올바른 방법입니다. 그러나 여러분이 겪고 있는 문제는 PyTorch가 기본적으로 모든 GPU의 메모리를 할당하기 때문입니다.

이 문제를 해결하기 위해 PyTorch에서 torch.cuda.set_device() 함수를 사용하여 원하는 GPU를 선택할 수 있습니다. 예를 들어, 첫 번째 GPU만 사용하려면 다음과 같이 코드를 작성할 수 있습니다.

import torch

# 원하는 GPU 인덱스를 설정합니다. 여기서는 0번 GPU를 선택합니다.
device = torch.device("cuda:0")

# 이후에 모델과 텐서를 해당 device로 옮깁니다.
model = model.to(device)
tensor = tensor.to(device)

이렇게 하면 첫 번째 GPU만 사용하게 됩니다. 그러나 이 방법으로도 여전히 두 개의 GPU 메모리가 모두 사용되는 것으로 표시되는 경우가 있을 수 있습니다. 이 문제를 해결하려면 환경 변수 CUDA_LAUNCH_BLOCKING을 1로 설정하여 PyTorch가 동기식으로 실행되도록 할 수 있습니다. 이렇게 하면 PyTorch가 선택한 GPU만 사용하게 됩니다.

터미널에서 다음과 같이 실행하세요:

CUDA_VISIBLE_DEVICES=0 CUDA_LAUNCH_BLOCKING=1 python myprogram.py

이렇게 하면 원하는 GPU만 사용하게 됩니다. 다른 GPU의 메모리 사용량이 여전히 표시되는 경우, 해당 GPU의 메모리 사용량은 실제로는 사용되지 않는 것일 수 있으므로 걱정하지 않아도 됩니다.

더 궁금한 점이 있으시면 언제든지 질문해주세요!


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!