안녕하세요.. 최근에 윈도우 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 메모리가 모두 사용중인 것으로 나옵니다.
아래 답변은 OpenAI의 GPT-3.5(ChatGPT) 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다.
안녕하세요! 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의 메모리만 사용하게 됩니다.
아래 답변은 OpenAI의 GPT-4 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다.
안녕하세요! 멀티 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만 사용하게 됩니다.