개요
회사에서 nvidia-docker를 장비에 설치할 일이 있어 찾아보고 정리해둔다. centos에서의 설치법은 링크를 참고한다. (개인적인 의견이지만 tensorflow를 동작시킬 것이면 우분투로 진행하는게 검증된 레퍼런스가 많으니 좋지 않을까 한다.)
사전설치
nvidia-docker 설치전 아래의 사항들이 설치되어 있어야 한다.
설치방법
아래 패키지 설치방법은 편의상 nvidia-docker github의 내용을 발췌한것으로 시간이 지남에 따라 변동될 수 있으니 항상 원본을 참고하자.
# nvidia-docker 1.0을 설치한 적이 있으면 아래 스크립트를 실행해준다.
docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
sudo apt-get purge -y nvidia-docker
# 레파지토리 추가
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
# 패키지 설치
sudo apt-get install -y nvidia-docker2
# docker 데몬 내림
sudo pkill -SIGHUP dockerd
daemon.json 설정
nvidia-docker를 쓸 때 /etc/docker/daemon.json를 설정해 두어야 한다. nvidia-docker 설치 시 overwrite할 것인지 물어보는데 기존에 따로 설정해둔 내역이 daemon.json에 있다면 기존 설정파일에 아래의 내용을 추가하면 된다.
예를 들어 필자는 아래와 같은 구성을 사용하고 있다.
{
"allow-nondistributable-artifacts": ["docker-registry.kwangsiklee.com:5000"],
"registry-mirrors": ["http://docker-registry.kwangsiklee.com:5555"],
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
검증하기
아래와 같은 방법으로 정상적으로 nvidia-docker가 설치되었는지 확인해보자.
# Test nvidia-smi with the latest official CUDA image
docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
아래와 같은 화면이 나오면 정상적으로 동작하는 것이다.
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 387.26 Driver Version: 387.26 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla V100-PCIE... Off | 00000000:04:00.0 Off | 0 |
| N/A 41C P0 38W / 250W | 0MiB / 16152MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla V100-PCIE... Off | 00000000:06:00.0 Off | 0 |
| N/A 42C P0 38W / 250W | 0MiB / 16152MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 2 Tesla V100-PCIE... Off | 00000000:07:00.0 Off | 0 |
| N/A 44C P0 37W / 250W | 0MiB / 16152MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 3 Tesla V100-PCIE... Off | 00000000:08:00.0 Off | 0 |
| N/A 42C P0 35W / 250W | 0MiB / 16152MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
GPU 제한하기
아래와 같은 명령으로 복수의 GPU 환경에서 docker 내의 GPU를 제한 시킬 수 있다.
텐서플로우 실행
nvidia-docker를 이용해서 텐서플로우를 아래와 같이 실행 할 수 있다.