nvidia/cuda 컨테이너 안에서 cuda가 동작하지 않습니다.

연구진 개발 환경 구축 중에 동적으로 Docker 컨테이너 생성 자동화를 하고 있는데, Pytorch 검증이 되지 않아 질문 드립니다. 도움 부탁드립니다.

호스트의 Ubuntu 버전 22.04 Docker 27.0.3 입니다.
nvidia-container-toolkit 설치했고, nvidia 공식 컨테이너 동작 확인했습니다.
컨테이너 이미지는 nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04 입니다.
Host 환경의 nvidia-smi 실행 결과는 아래와 같습니다.

아래는 컨테이너 환경의 nvidia-smi 실행 결과입니다.

pip install torch 설치 후, 실행해 보았으나, 아래와 같은 결과가 출력되었습니다.

UserWarning: CUDA initialization: CUDA driver initialization failed, you might not have a CUDA gpu.

CUDA GPU가 없다고 뜹니다. 제가 빠뜨린 게 있는지 도움 부탁드립니다.
일종의 devcontainer 처럼 개발용 컨테이너를 통한 임시 개발 환경 구축을 위함입니다.
docker inspect 결과입니다. gpu flag가 붙어 있음은 확인했습니다. 그런데 Driver 에 nvidia가 없어서 조금 이상하긴 합니다. 이거 때문이라고 하기엔 nvidia-smi 명령어가 멀쩡하게 출력하니까 미칠 노릇이죠.

스크린샷 2024-07-24 오후 8.21.54

도와좀 부탁드립니다.

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

안녕하세요! Docker 컨테이너 내에서 CUDA가 동작하지 않는 문제로 고민이 많으시겠네요. 문제 상황을 정리해보자면, Ubuntu 22.04와 Docker 27.0.3 환경에서 nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04 이미지를 사용하여 컨테이너를 구성하셨고, 호스트에서는 nvidia-smi가 정상적으로 동작하지만, 컨테이너 내에서 PyTorch를 통한 CUDA 검증 시 CUDA GPU를 인식하지 못하는 문제가 발생했다는 것으로 이해했습니다.

이 문제를 해결하기 위해 몇 가지 점검해볼 사항과 해결 방안을 제안드리겠습니다.

1. Docker 실행 명령어 확인

Docker 컨테이너를 실행할 때 --gpus all 플래그를 사용하여 NVIDIA GPU를 컨테이너에 할당했는지 확인해야 합니다. 이 플래그 없이 컨테이너를 실행하면, 컨테이너 내부에서 GPU를 사용할 수 없습니다. 예를 들어, 다음과 같은 명령어를 사용해야 합니다.

docker run --gpus all -it --rm nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04

2. PyTorch 및 CUDA 호환성 확인

PyTorch와 CUDA 버전 간의 호환성도 중요합니다. PyTorch 설치 시 CUDA 버전을 명시적으로 지정하여 호환되는 버전을 설치하는 것이 좋습니다. 예를 들어, CUDA 12.2에 맞는 PyTorch를 설치하려면 다음과 같이 설치할 수 있습니다.

pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu122

3. NVIDIA Container Toolkit 설치 및 설정 확인

nvidia-container-toolkit이 정상적으로 설치되어 있고, Docker 데몬 설정에서 default-runtimenvidia로 설정되어 있는지 확인해야 합니다. /etc/docker/daemon.json 파일을 확인하고, 다음과 같이 설정되어 있는지 확인해보세요.

{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}

설정 후에는 Docker 데몬을 재시작해야 합니다.

sudo systemctl restart docker

4. CUDA 버전과 드라이버 호환성

호스트 시스템의 NVIDIA 드라이버 버전이 CUDA 버전과 호환되는지 확인해야 합니다. 일반적으로 최신 드라이버는 다양한 CUDA 버전을 지원하지만, 특정 CUDA 버전에 대한 최소 드라이버 버전 요구 사항이 있습니다. NVIDIA 공식 문서에서 해당 정보를 확인할 수 있습니다.

이러한 점검 사항을 모두 확인해보시고 문제가 계속된다면, 추가적으로 Docker 컨테이너 로그나 시스템 로그에서 더 구체적인 오류 메시지를 찾아볼 수 있습니다. 이를 통해 문제의 원인을 좀 더 정확히 파악할 수 있을 것입니다.

PyTorch와 CUDA, Docker 관련 공식 문서는 다음 링크에서 더 많은 정보를 얻을 수 있습니다:

제 답변이 정확하지 않을 수도 있으니, 상황에 따라 공식 문서를 참조하거나 추가적인 정보를 제공해주시면 더 도움을 드릴 수 있을 것 같습니다. 문제 해결을 위한 여정에서 조금이나마 도움이 되었기를 바랍니다.


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

안녕하세요, CUDA 관련 문제로 어려움을 겪고 계신 것 같아 안타깝습니다. 질문 내용을 정리해 보면, Docker 컨테이너 내에서 Pytorch 검증 시 CUDA 초기화 오류가 발생하는 상황이네요. 호스트 환경은 Ubuntu 22.04에 Docker 27.0.3, nvidia-container-toolkit이 설치되어 있고, 컨테이너 이미지는 nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04를 사용 중이십니다.

먼저, 호스트와 컨테이너 내에서 nvidia-smi 명령어 실행 결과를 살펴보면 GPU 정보가 잘 출력되는 것을 확인할 수 있습니다. 하지만 컨테이너 내에서 Pytorch 설치 후 실행 시 "CUDA driver initialization failed" 오류가 발생하고 있습니다.

이 문제를 해결하기 위해 다음과 같은 사항들을 추가로 확인해 보시기 바랍니다:

  1. 컨테이너 실행 시 --gpus all 옵션을 사용하여 호스트의 GPU를 컨테이너에 공유하도록 설정했는지 확인해 주세요. 예를 들면 다음과 같이 실행합니다:
docker run --gpus all -it nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04
  1. 컨테이너 내에서 CUDA 라이브러리 경로가 올바르게 설정되어 있는지 확인해 주세요. 다음 명령어로 CUDA 경로를 확인할 수 있습니다:
echo $CUDA_HOME

만약 CUDA 경로가 설정되어 있지 않다면 .bashrc 파일에 다음 내용을 추가해 주세요:

export CUDA_HOME=/usr/local/cuda
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
  1. Pytorch 설치 시 CUDA 버전에 맞는 패키지를 선택했는지 확인해 주세요. CUDA 12.2 버전에 맞는 Pytorch를 설치하려면 다음 명령어를 사용합니다:
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu122

위의 사항들을 확인하고 조치해 보시기 바랍니다. 만약 문제가 지속된다면 추가 정보를 제공해 주시면 더 자세한 도움을 드리도록 하겠습니다.

참고로 Pytorch 공식 튜토리얼에서 Docker를 사용한 Pytorch 개발 환경 구축에 대한 내용을 찾아볼 수 있습니다:

제 답변이 문제 해결에 도움이 되기를 바라며, 추가 질문이 있으시면 언제든 말씀해 주세요. 감사합니다!


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

안녕하세요. 'PyTorch+Docker 환경에서 CUDA 인식되지 않음'이라는 문제로 인해 불편을 겪고 계시다는 것에 대해 죄송합니다. 말씀하신 문제를 해결하기 위해 다음과 같은 내용으로 도움을 드리겠습니다.

  1. 문제 요약

    • nvidia/cuda 컨테이너 내에서 CUDA가 인식되지 않아 PyTorch 검증이 실패합니다.
    • 호스트 시스템에서는 nvidia-smi 명령이 올바르게 작동하지만 컨테이너 내부에서는 작동하지 않습니다.
    • nvidia-docker 도구를 설치하고 공식 컨테이너 이미지를 사용해도 문제가 해결되지 않습니다.
  2. 해결 방법

    • 이 문제는 runtime 옵션을 지정하지 않고 nvidia-docker를 사용하여 컨테이너를 실행한 경우 발생할 수 있습니다. runtime 옵션을 설정하면 컨테이너가 NVIDIA 컨테이너 런타임을 사용하여 실행되도록 합니다.
    • 다음 명령을 사용하여 컨테이너를 실행하십시오.
      docker run --runtime=nvidia -it --rm nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04
      
    • 이렇게 하면 컨테이너가 NVIDIA 컨테이너 런타임으로 실행되어 CUDA 장치에 액세스할 수 있습니다.
  3. 참조 링크

제공된 해결 방법이 문제 해결에 도움이 되길 바랍니다. 문제가 지속되면 추가 정보를 제공해 주시면 도움을 드리겠습니다. 또한, 제가 제공한 답변이 도움이 되었다면 공감 버튼을 눌러 주시면 감사하겠습니다.


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

pytorch docker로 설치하시면 아마 해결될 것 같습니다.
pytorch/pytorch Tags | Docker Hub

ubuntu 22.04맞고 cudnn다 있고. 그리고 아마 제 생각엔 conda로 cudatoolkit 설치하셔야할거예요.

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

안녕하세요! Docker 컨테이너 내에서 CUDA가 제대로 동작하지 않아 많이 답답하셨겠어요. 문제를 잘 이해했습니다. 호스트와 컨테이너 모두에서 nvidia-smi가 정상적으로 동작하지만, PyTorch에서 CUDA를 인식하지 못하는 상황이군요.

이 문제를 해결하기 위해 몇 가지 확인해볼 사항과 해결 방법을 제안드리겠습니다.

1. Docker 컨테이너 실행 시 GPU 접근 권한 확인

Docker 컨테이너를 실행할 때 GPU를 사용할 수 있도록 설정해야 합니다. --gpus all 플래그를 사용하여 GPU를 할당해보세요.

docker run --gpus all -it --rm nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04

2. NVIDIA Container Toolkit 설치 및 설정 확인

NVIDIA Container Toolkit이 제대로 설치되고 설정되었는지 확인하세요. 아래 명령어를 통해 설치 상태를 확인할 수 있습니다.

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

3. PyTorch 설치 및 CUDA 버전 확인

컨테이너 내에서 PyTorch를 설치할 때 CUDA 버전에 맞는 버전을 설치해야 합니다. 아래 예시는 CUDA 12.2에 맞는 PyTorch를 설치하는 방법입니다.

pip install torch==2.0.1+cu122 torchvision==0.15.2+cu122 torchaudio==2.0.2+cu122 -f https://download.pytorch.org/whl/torch_stable.html

4. PyTorch에서 CUDA 사용 확인

PyTorch가 CUDA를 인식하는지 확인하기 위해 간단한 테스트 코드를 실행해보세요.

import torch

if torch.cuda.is_available():
    print("CUDA is available")
else:
    print("CUDA is not available")

5. Dockerfile 예제

위의 모든 설정을 Dockerfile로 자동화할 수 있습니다. 아래는 예제 Dockerfile입니다.

FROM nvidia/cuda:12.2.2-cudnn8-devel-ubuntu22.04

# Install Python and pip
RUN apt-get update && apt-get install -y python3 python3-pip

# Install PyTorch
RUN pip3 install torch==2.0.1+cu122 torchvision==0.15.2+cu122 torchaudio==2.0.2+cu122 -f https://download.pytorch.org/whl/torch_stable.html

# Test CUDA availability
COPY test_cuda.py /test_cuda.py
CMD ["python3", "/test_cuda.py"]

test_cuda.py 파일은 아래와 같이 작성합니다.

import torch

if torch.cuda.is_available():
    print("CUDA is available")
else:
    print("CUDA is not available")

참고 링크

이 방법들이 도움이 되길 바랍니다. 그래도 문제가 해결되지 않으면 추가 정보를 제공해주시면 더 도와드릴 수 있을 것 같습니다. 제 답변이 틀릴 수도 있으니, 추가적인 확인을 부탁드립니다. 도움이 되셨기를 바랍니다!


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