nvidia-docker2를 사용해보십시오.
11814 단어 nvidia-docker도커rancher
2017년 연말에 가까운 11월 nvidia-docker2가 마침내 출시되었습니다.
설명 에 의하면, 요점이 3개가 있다고 생각한다.
1. docker에 nvidia-docker를 통합한, 별도의 데몬은 필요하지 않다.
2. 기존 버전과의 호환성.
3. 이미지는 CUDA 없어도, 컨테이너내에 GPU도 이용할 수 있습니다.
우선 설치의 흐름을 메모해, 덧붙여 신경이 쓰이는 기능을 시험해 봅시다.
시스템 배치
nvidia-docker2 도입
리포지토리 추가
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
nvidia-docker2 설치
nvidia-docker2는 현재 모든 docker 버전에서 지원되지 않으므로 nvidia-docker2를 설치하기 전에 먼저 docker 버전을 확인하고 필요한 경우 해당 버전으로 업데이트합니다.
docker 버전 확인
ishouyou@emerald:~$ docker --version
Docker version 1.12.5, build 7392c3b
서포트 버전 확인
ishouyou@emerald:~$ sudo apt-cache madison nvidia-docker2 nvidia-container-runtime
...
nvidia-docker2 | 2.0.1+docker1.12.6-1 | https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64 Packages
...
nvidia-container-runtime | 1.1.0+docker1.12.6-1 | https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/amd64 Packages
...
지원 docker 버전으로 업데이트
ishouyou@emerald:~$ sudo apt-cache madison docker-engine
ishouyou@emerald:~$ sudo apt-get install docker-engine=1.12.6-0~ubuntu-xenial
ishouyou@emerald:~$ sudo pkill -SIGHUP dockerd
호스트에 nvidia-docker v1.0이 설치되어 있거나 nvidia-docker daemon으로 추가 된 컨테이너가있는 경우 해당 컨테이너를 지우고 nvidai-docker 1.0을 제거하십시오.
nvidai-docker 제거
ishouyou@emerald:~$ docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
ishouyou@emerald:~$ sudo apt-get purge nvidia-docker
nvidia-docker2 및 nvidia-container-runtime 설치
ishouyou@emerald:~$ sudo apt-get install -y nvidia-docker2=2.0.1+docker1.12.6-1 nvidia-container-runtime=1.1.0+docker1.12.6-1
ishouyou@emerald:~$ sudo pkill -SIGHUP dockerd
이제 nvidia-docker2 설치가 완료되었습니다.
nvidia-docker2를 사용하는 방법
사용법은 바뀌지 만 호환성은 확실하기 때문에 v1.0에 익숙한 사람에게 동일한 사용 방법도 통합니다.
기존 nvidia-docker 사용 예
NV_GPU='0' nvidia-docker run --rm nvidia/cuda nvidia-smi
nvidia-docker2는 위의 코멘드를 자동 전환하여 아래와 같이 됩니다.
nvidia-docker2 사용 예
docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=0 --rm nvidia/cuda:8.0-cudnn6-devel-ubuntu16.04 nvidia-smi
CUDA가없는 이미지에서도 사용할 수 있습니다.
호스트에 설치된 CUDA 버전을 컨테이너에 액세스할 수 있습니다.
GPU 사용 가능한 컨테이너 작성 예
docker run --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=0 --rm busybox:latest nvidia-smi
nvidia-docker2와 rancher의 조합
도커 데몬 설치
docker daemon 디버그 모드로 시도
docker 디버그 모드 활성화
sudo systemctl stop docker
sudo dockerd -D --default-runtime=nvidia
dockerd
...
DEBU[0004] attach: stdout: end
DEBU[0004] attach: stderr: end
DEBU[0004] Calling POST /v1.22/containers/91af6039e0ab33376fb04a16a5743f75957
66ff2e06a923f0d4454c954032328/wait
DEBU[0004] Calling GET /v1.22/containers/91af6039e0ab33376fb04a16a5743f759576
6ff2e06a923f0d4454c954032328/json
DEBU[0004] Calling DELETE /v1.22/containers/91af6039e0ab33376fb04a16a5743f759
5766ff2e06a923f0d4454c954032328?v=1
DEBU[0004] Calling GET /v1.22/containers/rancher-agent/json
DEBU[0006] Calling GET /v1.22/info
DEBU[0006] Calling GET /v1.22/version
DEBU[0006] Calling GET /v1.22/info
DEBU[0006] Calling GET /v1.22/containers/json?all=1&filters=%7B%22status%22%3
A%7B%22paused%22%3Atrue%2C%22running%22%3Atrue%7D%7D&limit=0
DEBU[0006] Calling GET /v1.22/events
DEBU[0007] Calling GET /v1.22/containers/json?all=1&limit=0
DEBU[0013] Calling GET /v1.22/containers/json?all=1&limit=0
DEBU[0013] Calling GET /v1.22/containers/a108a5f2c630df4ec6644d4eeae10834612c
15a6a2780b6c9cc7513955eee905/json
DEBU[0013] Calling GET /v1.22/containers/json?all=1&limit=0
DEBU[0013] Calling POST /v1.22/containers/a108a5f2c630df4ec6644d4eeae10834612
c15a6a2780b6c9cc7513955eee905/start
...
컨테이너 추가
Rancher Web UI에서 보면 호스트 배치는 거의 원형입니다. (IP 주소 부분은 숨깁니다.)
호스트측에서
ishouyou@ubuntu:~$ nvidia-smi
Thu Dec 7 18:54:30 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.66 Driver Version: 384.66 |
|-------------------------------+----------------------+----------------------+
| 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 P4 Off | 00000000:04:00.0 Off | 0 |
| N/A 28C P0 23W / 75W | 0MiB / 7606MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
| 1 Tesla P4 Off | 00000000:83:00.0 Off | 0 |
| N/A 30C P0 23W / 75W | 0MiB / 7606MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
웹 UI에서 컨테이너를 추가하는 것은 이런 느낌입니다.
특히 주의해야 할 것은 그 변수입니다. NVIDIA_VISIBLE_DEVICES는 GPU를 설치하는 nvidia-docker2의 변수입니다.
NVIDIA_VISIBLE_DEVICES의 변수에, 값의 부분은 0이 쓰고 있는 것은 GPU 0을 이용한다. 만약 전부의 GPU가 사용하고 싶을 때, all에 기입합니다.
작성 버튼을 눌러 GPU 사용 가능한 컨테이너를 작성하기 시작합니다.
컨테이너 작성 완료 후 콘솔에서 확인.
컨테이너 안으로 들어가다
ishouyou@ubuntu:~$ docker exec -it r-hoge_gpu_0-7e8ff0a0 bash
root@c3a336340dad:/# nvidia-smi
Thu Dec 7 19:01:25 2017
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 384.66 Driver Version: 384.66 |
|-------------------------------+----------------------+----------------------+
| 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 P4 Off | 00000000:04:00.0 Off | 0 |
| N/A 28C P0 23W / 75W | 0MiB / 7606MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
docker 디버그 모드에서 시도가 끝나면 디버그 모드를 종료하고 docker daemon 설정에 씁니다.
도커 데몬에 설치
daemon.json
{
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
},
"default-runtime": "nvidia"
}
dockerd 재부팅
sudo pkill -SIGHUP dockerd
Reference
이 문제에 관하여(nvidia-docker2를 사용해보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ishouyou/items/3c280144a14fe8bb082b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)