Deepo의 공식 github의 내용을 가져왔다.
Deepo is an open framework to assemble specialized docker images for deep learning research without pain. It provides a “lego set” of dozens of standard components for preparing deep learning tools and a framework for assembling them into custom docker images.
docker 이미 설치된 상태이므로 docker의 설치를 확인
$ docker version
하단을 보면 permission denied ~ 하는 내용이 나온다.
해당 문제는 사용자가 /var/run/docker.sock을 접근하려고 하였지만 권한이 없어 발생하는 문제로 사용자가 root:docker 권한을 가지고 있어야 한다.
root 권한을 가지고 실행하는 것은 권장되지 않으므로, 사용자를 docker group에 포함시키면 된다.
($USER 환경 변수는 현재 로그인한 사용자 아이디를 나타내므로 그대로 입력하면 된다.)
$ sudo usermod -a -G docker $USER
세션을 종료하고 다시 재구동 한 후에 반영되므로 ssh 재접속
아까 version 확인 명령을 다시 쳐보면 권한 거부 메세지가 뜨지 않는다.
또한 id 라는 명령어를 치는 것으로도 확인이 가능한데
docker에 대한 권한이 생긴 것을 확인 가능
ted@gpusystem:~$ id
uid=1002(ted) gid=1002(ted) groups=1002(ted),27(sudo),998(docker)
Client: Docker Engine - Community
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
Git commit: e91ed57
Built: Mon Dec 13 11:45:27 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.12
API version: 1.41 (minimum version 1.12)
Go version: go1.16.12
Git commit: 459d0df
Built: Mon Dec 13 11:43:36 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.12
GitCommit:
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
docker가 설치되어 있으므로 “**Setting up NVIDIA Container Toolkit”** 부터 시작
(참고로 GPG는 RSA계열의 암호화 방식) 다음 명령어를 실행
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
Release Candidate(출시 후보) 에 접근할 수 있도록 저장소의 experimental이란 분기를 만드는 것
(이것은 필수적인 것은 아니지만, 해당 명령어 실행했음)
$ curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
1.6.0 버전 이전의 Nvidia Container Toolkit을 설치하려면, 위에 libnvidia-container 저장소 대신에 nvidia-docker 로 저장소를 설정해야함. 하지만 우리는 이 후 버전을 설치 할 것이라 상관 x
$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2
$ sudo systemctl restart docker
(혹시 안된다면 세션을 종료하고 다시 세션 접속한 후에 실행해보기.
현재 cuda 버전과 상관없이 아래처럼 11.0 버전으로 치면 된다.)
$ sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
아래와 같은 결과가 나오면 nvdia-docker2는 잘 설치 된 것
docker와 nvidia-doker가 설치되어 있어야 한다.
$ docker pull ufoym/deepo
$ docker run --gpus all --rm ufoym/deepo nvidia-smi
$ docker run --gpus all --name test1 -it ufoym/deepo bash
실행하면 아래와 같이 root@[container ID] 에 해당하는 bash 쉘 환경으로 진입
root@d2386de9df18:/#
이제 이 안에서 딥러닝 서버를 활용하면 된다!
해당 컨테이너에서 나가고 싶으면 exit 치면 됨.
# -a 옵션 없으면 구동중인 컨테이너만 보임
$ docker ps -a
# 형식 : docker exec -it [컨테이너 이름] [사용할 명령어체계?]
$ docker exec -it test1 bash
주의! exec 명령어는 해당 컨테이너가 구동 중일 때만 가능하다. 구동/정지 관련 내용은 아래
exec 은 원래 본 용도는 컨테이너 외부에서 컨테이너 내부에 명령을 수행하고자 할 때 사용
ex)
# test1 컨테이너의 디렉토리 확인
$ docker exec test1 ls
# 구동
$ docker start test1
# 정지
$ docker stop test1
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
https://github.com/ufoym/deepo#Installation