딥러닝 서버를 만들기 위한 도커 설정 과정
- Ubuntu server를 설치한다.
- Docker를 설치한다
- Nvidia driver를 설치한다
- 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 설치
- cuda, cudnn은 호스트 서버에 설치하지 않는다.
- 도커 컨테이너에서 GPU를 사용하기 위해 설치 필요.
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
해당 글을 참조하여 아래 명령어 입력 (그러나 이것 수행 권장하지 않음.)
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
'Docker' 카테고리의 다른 글
[Docker] volume (0) | 2024.06.10 |
---|---|
[Docker, WSL2] 로컬 컴퓨터의 컨테이너 VScode로 접속 (1) | 2023.10.31 |
[Docker, WSL2] docker: Error response from daemon: failed to create task for container: failed to create shim task: (0) | 2023.10.31 |
[Docker] 컨테이너에 ssh로 접속하기 (0) | 2023.09.26 |