도찐개찐

[Docker] No CUDA GPUs are available 본문

Infra -------------------------/DOCKER

[Docker] No CUDA GPUs are available

도개진 2024. 2. 14. 12:36

Issue

  • Docker container 만들고 처음엔 학습이 됐는데 갑자기 No CUDA GPUs are available
  • nvidia-smi 찍어보면 Failed to initialize NVML: Unknown Error in Docker after Few hours

호스트가 데몬 다시 로드(또는 유사한 활동)를 수행합니다. 컨테이너가 systemd를 사용하여 cgroup을 관리하는 경우 daemon-reload는 "NVIDIA GPU에 대한 참조가 있는 모든 유닛 파일을 다시 로드하도록 트리거합니다." 그러면 컨테이너가 다시 로드된 GPU 참조에 액세스할 수 없게 됩니다.

문제로 인해 문제가 발생했는지 확인하는 방법 :
컨테이너에 여전히 GPU 액세스 권한이 있는 경우 " host " 터미널을 열고 실행합니다.

$ sudo systemctl daemon-reload

그런 다음 컨테이너로 돌아갑니다. 컨테이너의 nvidia-smi에 바로 문제가 있는 경우 해결 방법을 계속 사용할 수 있습니다.

해결 방법 :
한 토론에서 NVIDIA가 2023년 7월 8일 기준으로 6월 중순에 공식 수정 사항을 출시할 계획이라는 것을 보았지만 아직 확인하지 못했습니다. 따라서 이는 특히 컨테이너 스택을 업데이트할 수 없는 경우 여전히 유용할 것입니다.

가장 쉬운 방법은 docker daemon.json을 통해 컨테이너에서 cgroup을 비활성화하는 것입니다. cgroup을 비활성화해도 문제가 발생하지 않으면 다음 단계를 따르십시오. 모든 작업은 호스트 시스템에서 수행됩니다.

$ sudo nano /etc/docker/daemon.json

그런 다음 파일 내에서 이 매개변수 설정을 추가합니다.

이 매개변수 설정 앞에 쉼표를 추가하는 것을 잊지 마십시오. 잘 알려진 JSON 구문이지만, 일부는 익숙하지 않을 수도 있다고 생각합니다. 이것은 내 컴퓨터에서 편집된 파일의 예입니다.

{  
   "runtimes": {  
       "nvidia": {  
           "args": [],  
           "path": "nvidia-container-runtime"  
       }  
   },  
   "exec-opts": ["native.cgroupdriver=cgroupfs"]  
}

마지막 단계에서는 호스트에서 Docker 서비스를 다시 시작합니다.

$ sudo service docker restart

참고 : 컨테이너가 자체 NVIDIA 드라이버를 실행하는 경우 위 단계는 작동하지 않지만 참조 링크에는 이를 처리하기 위한 자세한 내용이 나와 있습니다. 나는 많은 사람들이 유용하다고 생각할 간단한 해결책에 대해서만 자세히 설명합니다.

728x90
Comments