딥러닝 서버를 만들기 위한 도커 설정 과정

  1. Ubuntu server를 설치한다.
  2. Docker를 설치한다
  3. Nvidia driver를 설치한다
  4. Nvidia-container tooklit을 설치한다.

 

도커 설치에 참고한 공식문서 링크입니다. https://docs.docker.com/engine/install/ubuntu/

 

 

Docker 설치과정 설명

OS requirements

  • Ubuntu Lunar 23.04
  • Ubuntu Kinetic 22.10
  • Ubuntu Jammy 22.04 (LTS)
  • Ubuntu Focal 20.04 (LTS)

최신버전의 도커는 이와 같은 OS 버전을 요구합니다.

 

 

Docker 설치 전 준비 단계

충돌 일어날 패키지 미리 삭제

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

 

우분투 시스템 패키지 업데이트 및 apt가 HTTPS를 통해 레포지토리를 이용할 수 있도록 허용

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

위 명령어가 사용이 안된다면, 아래 명령어 사용.

sudo apt install apt-transport-https ca-certificates curl software-properties-common

 

 

도커 GPG Key 추가

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

gpg키는 도커에만 존재하는 것은 아니고, 리눅스 패키지 관리 툴이 이 프로그램 패키지가 유효한지 확인하기 위해 설치 전 gpg키로 검증하는 과정을 거친다고 한다. 그래서 curl로 gpg키를 다운받아 apt 키 리스트에 추가해야 한다.

 

 

 

레포지토리 설정

echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

 

 

apt 패키지 업데이트

sudo apt-get update

 

 

 

도커 설치

도커 최신버전 설치

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

설치 도중 해당 오류 발생.

Package docker-ce is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source

 

도커를 설치할 때, 위와 같은 에러가 발생한다면 다시 한 번 sudo apt-get update 시도.

sudo apt-get update

 

도커 엔진의 버전 지정 후 설치

도커 엔진 버전 확인

apt-cache madison docker-ce | awk '{ print $3 }'

 

도커 버전 지정 후 설치

sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
  • VERSION_STRING 자리에는 5.20:10.12~3~0~ubuntu-focal 이와 같은 형식으로 설정하면 된다.

 

여기까지가 도커 설치의 마무리입니다.

 

설치 확인

sudo systemctl status docker
sudo docker run hello-world

 

 

사용자 docker 그룹 추가하기

sudo usermod -aG docker "username"
  • username같에 입력할 때 쌍따옴표는 제거하고 입력.

 

 

사용자 docker 그룹 추가 후 docker 재시작

sudo service docker restart

 

 

유저에 도커 그룹 추가된 것 확인

id -a "username"

 

 

 


 

Nvidia-container-toolkit 설치

sudo apt-get update \
    && sudo apt-get install -y nvidia-container-toolkit-base

 

-> 에러 E: Unable to locate package nvidia-container-toolkit-base

-> 바로 설치가 안될 수 있음.

 

https://github.com/NVIDIA/nvidia-docker/issues/1238

 

"Unable to locate package nvidia-container-toolkit" on Debian x86_64 · Issue #1238 · NVIDIA/nvidia-docker

I followed the steps listed here: https://github.com/NVIDIA/nvidia-docker My OS is Debian, but I think the packages are missing in Debian 9 and 10 as well. See more info below. $ sudo apt-get insta...

github.com


해당 글을 참조하여 아래 명령어 입력 (그러나 이것 수행 권장하지 않음.)

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

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 -y nvidia-container-toolkit

sudo systemctl restart docker

 

 

해당 명령어 수행을 통해 설정을 권장

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

https://github.com/NVIDIA/nvidia-docker/issues/1626

 

이 떄문인데, nvidia-docker.list와 nvidia-container-toolkit.list가 있으니 충돌이 났었음. nvidia-container-toolkit.list만 사용하라고 하였는데, 바로 위의 명령어가 nvidia-container-toolkit.list 관련 명령어이다.

 

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
  • /etc/os-release 파일은 Linux 시스템의 OS 정보를 포함하고 있습니다. 이 파일을 source (.)하여 해당 환경 변수를 현재 쉘에 로드한다.
  • **echo ID VERSION_ID**를 사용하여 OS의 ID와 버전 정보를 가져옵니다. 예를 들면, Ubuntu 20.04의 경우 **ubuntu20.04**와 같은 값을 가져온다.
  • distribution 변수에 이 값을 저장한다.

 

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
  • **curl**을 사용하여 NVIDIA의 GPG 키를 다운로드한다.
  • 파이프 (|)를 통해 다운로드한 GPG 키를 gpg --dearmor 명령어에 전달하며, 이를 **/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
  • **curl**을 사용하여 해당 OS 및 버전에 맞는 NVIDIA 저장소 리스트 파일을 다운로드한다.
  • sed 명령어를 사용하여 다운로드한 저장소 정보에 GPG 키 경로를 추가한다.
  • sudo tee 명령어를 사용하여 이 정보를 /etc/apt/sources.list.d/nvidia-container-toolkit.list 파일에 저장한다.

 

 

 

모든 장치를 참조하는 CDI 사양을 생성하기 위해 다음 명령이 사용

sudo nvidia-ctk cdi generate --output=/etc/cdi/nvidia.yaml
grep "  name:" /etc/cdi/nvidia.yaml

장치 또는 CUDA 드라이버 구성이 변경된 경우 새 CDI 사양을 생성해야 한다. MIG 장치를 생성 또는 제거하거나 드라이버를 업그레이드할 때 구성이 변경될 수 있다.

 

 

 

NVIDIA 컨테이너 런타임을 인식하도록 도커 데몬을 구성

sudo nvidia-ctk runtime configure --runtime=docker

 

기본 런타임을 설정한 후 Docker 데몬을 다시 시작하여 설치를 완료한다.

sudo systemctl restart docker

 

 

이제 기본 CUDA 컨테이너를 실행하여 작동하는 설정을 테스트할 수 있다:

sudo docker run --rm --runtime=nvidia --gpus all nvidia/cuda:11.6.2-base-ubuntu20.04 nvidia-smi

 

 

 

 

 

 

추가 참고자료 출처

https://velog.io/@anrun/docker1