docker 컨테이너에서 GPU 사용
본 내용은 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 명령어가 동작하는 것을 확인 했다면 정상적으로 셋팅 된것이다.