상황
테스트 환경으로 Titan XP가 달린 우분투 서버를 사용하고 있는데, 이 서버에서는 드라이버 문제가 종종 발생해서 nvidia-smi를 입력하면 "NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver." 에러가 출력됩니다.
오류 발생 원인
해당 에러는 nvidia 드라이버를 사용하는 딥러닝 프로세스를 종료하지 않은 채로 서버의 전원이 꺼지거나 시스템 종료하는 경우에 많이 발생한다고 하더라구요. 그랬었나 싶기도하고...ㅋㅋㅋ
이외에도 다음과 같은 문제로 인해 발생할 수도 있습니다.
- 드라이버 미설치 또는 손상: NVIDIA 드라이버가 시스템에 설치되지 않았거나 손상.
- 드라이버 버전 불일치: 설치된 드라이버 버전이 현재 사용 중인 커널 버전과 호환되지 않을 시.
- 오래된 드라이버: 최신 드라이버가 설치되지 않아 시스템과의 호환성 문제가 발생.
- 드라이버 충돌: 다른 드라이버와의 충돌로 인해 NVIDIA 드라이버가 제대로 작동하지 않음.
해결방법
뭐 가장 간단한 방법으로는 기존 드라이버를 제거하고 다시 설치하는 방법이 있습니다. 대신 이전 버전의 드라이버를 확실하게 지우는 것이 중요하고, 더불어 저는 혹시 모른 상황에 대비해서 cuda까지 제거해주고 다시 설치해주고 있습니다.
환경
Titan XP, ubuntu 20.04
Process
1. nvidia, cuda 제거
sudo apt-get --purge remove "\*cuda\*"
sudo apt-get --purge remove "\*nvidia\*"
# sudo apt-get purge nvidia* (혹시 위에꺼로 안지워지면 이걸로)
sudo apt-get --purge remove "\*cudnn\*"
sudo rm -rf /usr/local/cuda\*
sudo rm -rf /usr/lib/cuda\*
sudo rm -rf /etc/cuda\*
sudo rm -rf /etc/nvidia\*
sudo rm /etc/apt/sources.list.d/cuda\*
sudo rm /etc/apt/sources.list.d/nvidia\*
sudo apt-get autoremove
sudo apt-get autoclean
이렇게 실행하시고
- nvidia-smi
- nvcc -V
두개의 명령어를 실행시키셨을 때 실행이 정상적으로 안되야 제대로 지워진 것입니다.
또는,
whereis cuda
를 통해서 cuda나 nvidia 폴더가 남아있는지 확인해보시면 됩니다.
만약, 이렇게 해도 살아있다면 직접 경로로 찾아가 sudo rm -rf를 입력하시면 됩니다. (rm -rf는 조심해서 쓰세요.. 다날라감)
2. 리부트
sudo reboot
안해주셔도 되긴하는데 리부트를 한번 해줍니다.
3. Nvidia-driver 설치
ubuntu-drivers devices
드라이버를 재설치하기 이전에 위의 명령어를 통해 그래픽카드 및 설치 가능한 드라이버를 확인할 수 있습니다.
그럼 이제 설치를 해야하는데, 아래와 같이 특정 버전의 드라이버 및 패키지를 일괄적으로 설치하거나, 추천 버전을 일괄 설치하는 방법도 있습니다.
sudo apt install nvidia-driver-{version}
sudo ubuntu-drivers autoinstall # 추천 버전 다운로드
하지만 아래와 같이 명확한 의존성 파악과 필요한 모듈만 설치하기 위해 아래의 명령어로 주로 설치합니다.
여기선 535버전으로 설치를 진행했습니다.
sudo apt-get install -y linux-modules-nvidia-535-server-generic nvidia-driver-535-server libnvidia-nscq-535 nvidia-modprobe
sudo reboot
그리고 다시 reboot를 해주시고
nvidia-smi
를 입력해주시면 정상적으로 출력 아래와 같이 출력되실겁니다.
안된다면... 드라이버 충돌 등의 다른 문제일 수도 있습니다.
4. CUDA, CUDNN 설치
4-1. gcc, make, g++ 미설치시 설치 후 진행하셔야합니다.
sudo apt-get install -y gcc
sudo apt-get install -y make
sudo apt-get install -y g++
4-2. CUDA 실행 파일 다운로드
wget https://developer.download.nvidia .com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
4-3. cuda_11.8.0_520.61.05_linux.run 파일 설치
sudo sh cuda_11.8.0_520.61.05_linux.run
- 설치하시면 가장 먼저 아래의 화면이 등장하는데 Continue로 이동하셔서 스페이스바 눌러주세요.
- 다음으로 아래의 화면이 등장하면 accept 입력.
- 마지막으로 아래의 화면이 등장했을 때 Driver가 체크 돼있을텐데, 드라이버는 설치하면 안되므로 space바를 눌러서 체크를 해제해주시고 Install 눌러주시면 됩니다.
5. .profile에서 환경변수 세팅
홈 디렉토리나 ~에서 .profile 파일을 열어서 환경변수를 세팅해줘야 합니다.
.profile이 위치하는 경로로 이동 →
vi .profile → set PATH for cuda 11.8 installation에 위치한 코드 복사 →
.profile의 맨 밑에 추가. (I(insert)를누르고 붙여넣기) → esc 이후 :wqa로 저장
→ source .profile → nvcc -V 실행이 정상적으로 작동하면 성공.
6. cudnn 설치
적절한 cudnn 버전을 nvidia 사이트에서 다운로드 받으시고
cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz 같은 파일을 다운 받으신 뒤, 경로에 옮기시고
아래의 명령어로 압축을 해제합니다.
tar xvf cudnn-linux-x86_64-8.7.0.84_cuda11-archive.tar.xz
압축 해제 후, 아래 명령어를 순서대로 실행해주시고
cd cudnn-linux-x86_64.8.7.0.84_cuda11-archive # 경로로 접근 한뒤 아래 명령어 순서대로 실행.
sudo cp include/cudnn* /usr/local/cuda-11.8/include
sudo cp lib/libcudnn* /usr/local/cuda-11.8/lib64/
sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn*
아래 명령어를 입력하면.
cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
아래와 같이 출력되면 정상적으로 설치가 끝난 것입니다.
결론
사실 nvidia driver만 재설치하면 되긴하는데 혹시 모를 상황에 대비해 cuda와 cudnn도 같이 지우고 재설치하고 있습니다.
귀찮으시다면 nvidia driver만 제거하고 재설치하시고 원하시는 동작이 제대로 실행되시면 그대로 쓰셔도 무방합니다.
'Environment' 카테고리의 다른 글
[Environment]아나콘다 가상환경 구성 및 주피터 노트북 커널 연결 (0) | 2022.12.30 |
---|---|
[Environment] Window11 딥러닝 환경 구축 (0) | 2022.12.29 |