글 작성자: 모두의 근삼이

본 내용은 2020년 5월 14일에 작성 됨
본 내용은 docker community에디션 19.03.5 버전을 기준으로 작성 됨


예전에 docker에서 gpu를 사용해야 할때, nvidia 그래픽 카드를 지원하는 nvidia-docker 명령어를 따로 설치하여 사용했었는데, docker 진영에서 업데이트를 통해 위의 내용을 흡수하여 반영한 듯 하다. docker 공식 docs의 내용을 확인하면, 이제 별도의 명령어를 설치하지 않고, nvidia-container-runtime 이라는 패키지를 설치하는 것으로 docker 자체 명령어를 사용하여 nvidia-gpu 자원을 컨테이너에서 사용할 수 있도록 지원하는 것으로 보인다.

요구사항

  • nvidia 그래픽카드가 장착 된 linux 서버
  • docker 19.03.5 버전 이상
    (본인의 테스트 환경에 설치된 도커버전이며, 최소 요구 버전은 아닐 수 있음. 더 낮은 버전에서도 지원이 된다면 알려주면 감사!)

docker 설치에 관한 내용은 공식 docs를 참고 바람

환경 설정

그래픽카드 드라이버 설치

NVIDIA 드라이버 페이지에서 본인의 그래픽카드에 맞는 드라이버를 다운로드 받는다.

필수 패키지 설치

# bash
yum update
yum -y install kernel-devel kernel-headers gcc make

nouveau 비활성화 및 재부팅

# bash
echo 'blacklist nouveau' >> /etc/modprobe.d/blacklist.conf
dracut /boot/initramfs-$(uname -r).img $(uname -r) --force
reboot

드라이버 설치 진행

설치를 진행하면 여러가지 물어보는 메시지들이 뜨는데, 모두 yes를 입력해주면 된다.

# bash
bash NVIDIA-Linux-x86_64-390.59.run

설치 확인

# bash
vidia-smi

아래와 같은 출력이 나오면 성공한 것이다.

#출력예시
[root@agent246 nvidea]# nvidia-smi
Thu May 14 11:48:33 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 435.21       Driver Version: 435.21       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce GTX 1050    Off  | 00000000:01:00.0 Off |                  N/A |
| 35%   36C    P8    N/A /  75W |      0MiB /  1999MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

NVIDIA-CONTAINER-RUNTIME 설치

패지키 repo 추가

본인의 배포판에 맞는 패키지 repository를 추가한다. 정확한 내용은 nvidia 깃허브에서 제공하는 내용을 확인한다. 아래 내용은 포스팅 작성일 기준의 repo 설정방법이다.

# bash
# Redhat계열

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.repo | \
  sudo tee /etc/yum.repos.d/nvidia-container-runtime.repo
# bash
# Debian 계열

curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update

패키지 설치

# bash
# Redhat계열

yum -y install nvidia-container-runtime
# bash
# Debian 계열

apt-get install -y nvidia-container-runtime

설치 확인

#bash
which nvidia-container-runtime-hook

여기까지 진행이 되었다면, docker 컨테이너에서 GPU자원을 사용할 수 있는 준비가 완료 된 것이다.

컨테이너 GPU 사용 확인

--gpus 플레그를 추가하여 컨테이너 시작시 GPU 리소스에 접근하도록 설정할 수 있다.

#bash
docker run -it --rm --gpus all ubuntu nvidia-smi

docker로 ubuntu 컨테이너가 실행되고, 내부에서 nvidia-smi 명령어가 동작하는 것을 확인 했다면 정상적으로 셋팅 된것이다.

반응형