Docker - Deepo 이미지로 딥러닝 컨테이너 만들기

Taehong Jang·2022년 4월 28일
0

딥러닝 서버

목록 보기
3/3

0. Deepo 란

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.

1. Docker 설치 확인 및 권한

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

2. nvidia-docker설치(=Nvidia container toolkit설치)

docker가 설치되어 있으므로 “**Setting up NVIDIA Container Toolkit”** 부터 시작

패키지 저장소와 GPG key 설정

(참고로 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

패키지 목록 업데이트 후 nvidia-docker2 패키지 설치

$ sudo apt-get update
$ sudo apt-get install -y nvidia-docker2

docker 서비스 재시작

$ sudo systemctl restart docker

Base CUDA를 이용하여 설치 확인

(혹시 안된다면 세션을 종료하고 다시 세션 접속한 후에 실행해보기.

현재 cuda 버전과 상관없이 아래처럼 11.0 버전으로 치면 된다.)

$ sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi

아래와 같은 결과가 나오면 nvdia-docker2는 잘 설치 된 것

3. Deepo GPU version 설치

docker와 nvidia-doker가 설치되어 있어야 한다.

docker hub에서 deepo이미지를 pull

$ docker pull ufoym/deepo

이미지를 잘 가져왔는지 확인

$ docker run --gpus all --rm ufoym/deepo nvidia-smi

컨테이너를 새로 만들고 실행

$ docker run --gpus all --name test1 -it ufoym/deepo bash
  • 옵션 설명 --gpus : 컨테이너에 GPU 장치 추가( --gpus all 은 모든 GPU들을 추가한단 얘기) --name : 컨테이너에 이름 부여

실행하면 아래와 같이 root@[container ID] 에 해당하는 bash 쉘 환경으로 진입

root@d2386de9df18:/#

이제 이 안에서 딥러닝 서버를 활용하면 된다!

해당 컨테이너에서 나가고 싶으면 exit 치면 됨.

추가적으로 알아야 할 docker 명령어

모든 컨테이너 목록 보기

# -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 

출처

  • Docker 권한 설정

https://technote.kr/369

  • nvidia-docker 설치

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker

  • Deepo 설치

https://github.com/ufoym/deepo#Installation

  • 추가 참고

https://sseongju1.tistory.com/16

https://velog.io/@boom109/Nvidia-docker

0개의 댓글