nvidia nvswitch install - 설치 과정 오류 해결
요즘 나오는 고가의 GPU 서버에는 nvswitch가 장착이 되어있습니다. 예를 들면 DGX-2 혹은 Supermicro 제품에는 9029GP-TNVRT 16 GPU 제품과 4124GO-NART 제품이 이에 해당됩니다. 기본 적으로 nvidia driver 및 cuda, nvidia-docker를 설치하였을 때 설치까지는 문제가 되지 않습니다.
하지만 docker gpu를 할당하여 진입할 경우 nvswitch가 설치 되어 있지 않다면 오류가 발생하게 되는데요. nvidia nvswitch install - 설치 과정 오류 해결 방법에 대해 알아보도록 하겠습니다.
목차
1. Nvidia Driver 설치
2. Docker 설치
3. Nvidia docker 설치
4. nvswitch 설치
5. nvidia-docker 실행
6. Troubleshooting
1. Nvidia Driver 설치
# add-apt-repository ppa:graphics-drivers/ppa
enter
# apt-get update
# apt-get install nvidia-driver-450-server
nvidia driver 설치 방법에는 크게 2가지 정도로 나눠 볼 수 있습니다.
- nvidia 홈페이지 run 파일 다운로드 후 설치
- repository를 등록하여 apt-get을 통한 설치
이 2가지 방법에 장단점은 존재하는데요.
첫번째 방법은 설치가 간단합니다. run파일만 실행시키면 되지만 Desktop이 설치되어 있을 경우 blacklist를 통해 nouveau를 제거해 준 후 설치해야 합니다.
또한 kernel update 및 nvidia 파일의 변경이 있을 시 드라이버가 깨지는 경우, ubuntu 하위 버전에서는 무한루프 등 여러가지 경우가 발생합니다.
두 번째 방법은 더욱 간단합니다. repository를 추가하여 apt를 통한 설치 방법입니다. 의존성 패키지까지 같이 설치해 주기 때문에 신경 쓸 일이 없습니다.
또한 커널이 올라간다 하여도 드라이버가 Fail 나는 경우도 거의 없습니다. 하지만 설치 시간이 매우 길고 또한 네트워크가 외부로 나가야 하는 상황이 필요합니다.
위에 nvidia driver 설치는 repository를 추가하여 450 server 버전을 설치 진행한 것이며, 455 및 460으로 설치 진행하게 되면 현재 21.01.13일 기준으로 nvswitch = fabric-manager와 version이 missmatch가 나기 때문에 이를 방지하기 위한 방법이며, 물론 missmatch가 나와도 운영에는 문제가 없었습니다.
2. Docker 설치
Docker 설치를 모르시는 분들은 위에 글부터 확인 후 진행하시면 되며, 간단한 쉘 스크립트로 설치가 가능합니다. nvidia-docker 또한 docker 가 기본적으로 설치된 후에 설치가 가능합니다.
3. Nvidia-docker 설치
nvidia docker 설치 또한 위에서 확인이 가능하며, 중복된 글을 올리고 싶지 않아 이전 포스팅을 올리는 점 양해 바랍니다.
A100부터는 설치 시 # apt-get update 및 # apt-get install nvidia-docker2를 진행하시기 전에 repository 하나를 더 추가하여야 A100의 MIG기능을 사용할 수 있습니다.
curl -s -L https://nvidia.github.io/\
nvidia-container-runtime/experimental/\
$distribution/nvidia-container-runtime.list\
| sudo tee /etc/apt/sources.list.d/\
nvidia-container-runtime.list
4. nvswitch 설치
# apt-get install cuda-drivers-fabricmanager-450
위에 설치한 nvidia driver와 fabricmanager 버전을 맞춰줘야 miss match error가 발생하지 않으므로 450 버전으로 맞춰서 설치하면 됩니다.
# systemctl enable nvidia-fabricmagager
# systemctl start nvidia-fabricmanager
마지막으로 fabricmanager의 상태 체크를 해야 nvswitch가 정상 작동 중인지 확인이 가능합니다.
5. nvidia-docker 실행
# docker run -it --runtime=nvidia\
nvcr.io/nvidia/tensorflow:20.12-tf1-py3
위와 같이 Docker container에 진입이 잘 되었다면 잘 동작하는지 두 가지의 Test를 하여야 합니다.
1. # nvidia-smi
2. # python
> import tensorflow as tf
> tf.__version__
> tf.test.is_gpu_available()
이 두 가지 Test에서 nvidia-smi에서 해당 GPU가 잘 Load 되는지 확인하며, Python test에서 마지막에 false가 아니 true가 나오면 정상적으로 nvswitch까지 설치되어 올바르게 동작하고 있는 것입니다.
6. TroubleShooting
- dpkg error
- Docker OCI runtime create failed
- python -> gpu available - false
6-1. dpkg error
root@ubuntu:~# sudo apt-get install -y nvidia-docker2
Reading package lists... Done
Building dependency tree
Reading state information... Done
nvidia-docker2 is already the newest version (2.5.0-1).
You might want to run 'apt --fix-broken install' to correct these.
The following packages have unmet dependencies:
cuda-drivers-450 : Depends: libnvidia-common-450 (>= 450.80.02) but it is not going to be installed
libnvidia-gl-450 : Depends: libnvidia-common-450 but it is not going to be installed
E: Unmet dependencies. Try 'apt --fix-broken install' with no packages (or specify a solution).
root@ubuntu:~# apt-get install -f
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
libatomic1:i386 libbsd0:i386 libdrm-amdgpu1:i386 libdrm-intel1:i386 libdrm-nouveau2:i386 libdrm-radeon1:i386 libdrm2:i386 libedit2:i386 libelf1:i386 libexpat1:i386 libffi6:i386 libgl1:i386
libgl1-mesa-dri:i386 libglapi-mesa:i386 libglvnd0:i386 libglx-mesa0:i386 libglx0:i386 libllvm10:i386 libnvidia-common-450-server libpciaccess0:i386 libsensors4:i386 libstdc++6:i386 libx11-6:i386
libx11-xcb1:i386 libxau6:i386 libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-glx0:i386 libxcb-present0:i386 libxcb-sync1:i386 libxcb1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3:i386
libxshmfence1:i386 libxxf86vm1:i386
Use 'apt autoremove' to remove them.
The following additional packages will be installed:
libnvidia-common-450
The following NEW packages will be installed:
libnvidia-common-450
0 upgraded, 1 newly installed, 0 to remove and 115 not upgraded.
22 not fully installed or removed.
Need to get 0 B/10.1 kB of archives.
After this operation, 34.8 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
(Reading database ... 88813 files and directories currently installed.)
Preparing to unpack .../libnvidia-common-450_450.80.02-0ubuntu1_all.deb ...
Unpacking libnvidia-common-450 (450.80.02-0ubuntu1) ...
dpkg: error processing archive /var/cache/apt/archives/libnvidia-common-450_450.80.02-0ubuntu1_all.deb (--unpack):
trying to overwrite '/usr/share/nvidia/nvidia-application-profiles-450.80.02-key-documentation', which is also in package libnvidia-common-450-server 450.80.02-0ubuntu0.18.04.3
Errors were encountered while processing:
/var/cache/apt/archives/libnvidia-common-450_450.80.02-0ubuntu1_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
사진 확대가 되지 않는 것 같아 코드 블록으로 error를 옮겨보았는데요. 위에 보면 어느 순간부터 apt-get install이 되지 않고 -f --fix-broken 옵션을 사용해도 실패하고 있는 것을 확인할 수 있습니다.
저 상태에선 apt-get autoremove로 진행하여도 비슷한 error 메시지만 계속하여 발생하는데요.
dpkg: error processing archive /var/cache/apt/archives/libnvidia-common-450_450.80.02-0 ubuntu1_all.deb (--unpack) trying to overwrite '/usr/share/nvidia/nvidia-application-profiles-450.80.02-key-documentation',
코드 블록 상에 마지막에 있는 위 메시지 해결 방법은 마지막에 overwrite부분을 확인하신 후 해결할 수 있습니다.
root@ubuntu:~# dpkg -i --force-overwrite\
/var/cache/apt/archives/\
libnvidia-common-450_450.80.02-0ubuntu1_all.deb
위와 같은 커맨드로 해결이 가능하며, 이후에 apt-get autoremove를 진행하시면 하단의 사진과 같이 불필요한 파일은 삭제하고, 설치 중 Dependency등에 걸려 설치되지 않았던 파일은 설치합니다.
또한 nvidia driver를 다시 Load 하게 됩니다.
6-2. Docker OCI create failed
여러 환경에서 Docker OCI error를 많이 볼 수 있는데요. 여러 가지 이유가 있지만, 이 포스팅을 보던 중 같은 error가 발생한다면 docker container를 모두 삭제 후 docker rm [container], 해당 docker image를 삭제합니다. docker rmi [image] 마지막으로 기존 image를 다시 pull 하여 실행하여 해결이 안 될 경우 아래 진행을 따라 해 보세요.
6-3. python -> gpu available - false
nvidia docker image에 진입 후 nvidia-smi 혹은 python -> import tensorflow -> gpu available() 체크 시 false가 발생하게 되면 해당되면 커널 문제 일 가능성이 가장 높습니다. true가 나와야 정상입니다.
# apt-get install linux-image-generic-hwe-18.04 \
linux-headers-5.4.0-52-generic
커널을 설치 후 reboot을 후 테스트하면 정상적인 nvidia-docker를 사용할 수 있습니다.
'linux' 카테고리의 다른 글
Ubuntu 20.04 + Nvidia 460.39 Hang issue (298) | 2021.03.16 |
---|---|
cuda 11.0 및 cudnn 설치 방법 - 리눅스(ubuntu18.04) (382) | 2021.02.17 |
Raid 구성 알아보기 R0, R1, R5 등 (465) | 2021.01.10 |
linux 하드웨어 정보 확인 방법 (CPU, MEM, DISK 등) (468) | 2021.01.05 |
nvidia-docker GPU 할당하여 사용 하는 방법 3가지 (7891) | 2021.01.04 |
최근댓글