도커는 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트이다. 도커 웹 페이지의 기능을 인용하면 다음과 같다: 도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다.
nvidia-docker는 docker에서 GPU를 사용할 수 있게 만든 도커라고 생각하면 된다.
사실 nvidia-docker를 설치하게 되면 docker 명령어도 사용이 되고 nvidia-docker 명령어도 사용된다.
nvidia-docker 설치 후 docker 명령어에서도 nvidia gpu를 사용할 방법은 있어서 다른 점을 정확히는 모르겠다.
다른 블로그의 글을 보아하니 docker 구버전일때와 docker 19.03 이상일 때 실행 방법이 다른 것 같다!!!
docker image file은 dockerfile로 작성이 되고 그 이미지를 실행시키게 되면 contairner가 생성이 됩니다.
같은 image를 여려명의 유저가 계속해서 실행시키고 끄고 하게 되면 복수의 container가 생성됨.
root@ubuntu:~# nvidia-smi
Tue Jun 23 03:25:33 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.104 Driver Version: 410.104 CUDA Version: 10.0 |
|-------------------------------+----------------------+----------------------+
| 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 RTX 208... Off | 00000000:86:00.0 Off | N/A |
| 29% 38C P0 1W / 250W | 0MiB / 10989MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
기본적으로 nvidia-driver가 설치 된 상태에서 nvidia-docker를 설치 진행해 보겠다.
기존의 사용하던 오래된 docker가 있다면 삭제 후 설치
# apt-get remove docker docker-engine docker.io
패키지 저장소를 추가해주고 간단하게 설치하면 된다.
기본적으로 ubuntu16.04 나 ubuntu18.04 모두 아래와 같은 방법으로 설치하면 된다.
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install nvidia-docker2
저장소 추가 후 nvidia-docker2를 설치하게 되면 dependency에 물려 있는 패키지들도 알아서 샤샤샥~
root@ubuntu:~# apt-get install nvidia-docker2
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
bridge-utils cgroupfs-mount containerd docker.io libnvidia-container-tools libnvidia-container1 libseccomp2 nvidia-container-runtime nvidia-container-toolkit pigz runc ubuntu-fan
Suggested packages:
ifupdown aufs-tools debootstrap docker-doc rinse zfs-fuse | zfsutils
The following NEW packages will be installed:
bridge-utils cgroupfs-mount containerd docker.io libnvidia-container-tools libnvidia-container1 nvidia-container-runtime nvidia-container-toolkit nvidia-docker2 pigz runc ubuntu-fan
The following packages will be upgraded:
libseccomp2
1 upgraded, 12 newly installed, 0 to remove and 238 not upgraded.
Need to get 65.2 MB of archives.
After this operation, 324 MB of additional disk space will be used.
Do you want to continue? [Y/n]
여기까지 하면 설치가 완료 됐다. 확인해보자~!
root@ubuntu:~# docker version
Client:
Version: 19.03.6
API version: 1.40
Go version: go1.12.17
Git commit: 369ce74a3c
Built: Fri Feb 28 23:45:43 2020
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 19.03.6
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: 369ce74a3c
Built: Wed Feb 19 01:06:16 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.3-0ubuntu1~18.04.2
GitCommit:
runc:
Version: spec: 1.0.1-dev
GitCommit:
docker-init:
Version: 0.18.0
GitCommit:
root@ubuntu:~# nvidia-docker version
NVIDIA Docker: 2.3.0
Client:
Version: 19.03.6
API version: 1.40
Go version: go1.12.17
Git commit: 369ce74a3c
Built: Fri Feb 28 23:45:43 2020
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 19.03.6
API version: 1.40 (minimum version 1.12)
Go version: go1.12.17
Git commit: 369ce74a3c
Built: Wed Feb 19 01:06:16 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.3-0ubuntu1~18.04.2
GitCommit:
runc:
Version: spec: 1.0.1-dev
GitCommit:
docker-init:
Version: 0.18.0
GitCommit:
docker가 정상적으로 설치되어 사용되는지 마지막으로 아래와 같이 확인해 보면 기본적인 설치가 끝난 것이다.
root@ubuntu:~# docker run --runtime=nvidia --rm nvidia/cuda:10.0-base nvidia-smi
Unable to find image 'nvidia/cuda:10.0-base' locally
10.0-base: Pulling from nvidia/cuda
7ddbc47eeb70: Pull complete
c1bbdc448b72: Pull complete
8c3b70e39044: Pull complete
45d437916d57: Pull complete
d8f1569ddae6: Pull complete
de5a2c57c41d: Pull complete
ea6f04a00543: Pull complete
Digest: sha256:e6e1001f286d084f8a3aea991afbcfe92cd389ad1f4883491d43631f152f175e
Status: Downloaded newer image for nvidia/cuda:10.0-base
Tue Jun 23 07:43:47 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.104 Driver Version: 410.104 CUDA Version: 10.0 |
|-------------------------------+----------------------+----------------------+
| 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 RTX 208... Off | 00000000:86:00.0 Off | N/A |
| 29% 38C P0 1W / 250W | 0MiB / 10989MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
docker의 기본 명령어
docker run [OPTIONS] IMAGE[:TAG|DIGEST] [COMMAND] [ARG...]
옵션 | 설명 |
-d | detached mode 백그라운 모드 |
-p | 호스트와 컨테이너의 포트를 연결 (포워딩) |
-v | 호스트와 컨테이너의 디렉토리 연결 (mount) |
-e | 컨테이너 내에서 사용할 환경변수 설정 |
-name | 컨테이너 이름 설정 |
-rm | 프로세스 종료시 사용중이던 컨테이너 제거 |
-it | 터미널 입력을 위한 옵션 |
-link | 컨테이너 연결 [컨테이너명:별칭] |
root@ubuntu:~# NV_GPU=0 nvidia-docker run -it xxxx/tf1.13.1:1.0
root@cf928cdae859:~# nvidia-smi
Tue Jun 23 08:56:00 2020
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.59 Driver Version: 440.59 CUDA Version: 10.2 |
|-------------------------------+----------------------+----------------------+
| 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 RTX 208... Off | 00000000:86:00.0 Off | N/A |
| 29% 37C P0 21W / 250W | 0MiB / 11019MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
NV_GPU를 통해 GPU number로 gpu 할당하여 사용하면 된다.
위에 이미지는 dockerbuild로 허접하게 test용으로 만든 image라 xxxx로 계정을 가렸다..ㅎㅎ
linux (centos, ubuntu) 모니터링 도구 - gpu 편 (2) | 2020.06.25 |
---|---|
linux (centos, ubuntu) 모니터링 도구 (0) | 2020.06.24 |
하드웨어 정보 확인 dmidecode 활용법 (0) | 2020.06.22 |
ubuntu 18.04.1 server 설치 (0) | 2020.06.17 |
SNMP (Simple Network Management Protocol) (0) | 2020.06.13 |