본문 바로가기
열정/연구 일지

Ubuntu에 Docker 및 NVIDIA 도구 설치 및 사용 방법

by lime9 2024. 7. 5.

아무리 생각해도  docker가 아니면 연구를 진행할 수 없다고 판단했다...

 

Docker 설치 방법

1. 필요한 패키지 설치:

sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

 

2. GPG 키 추가:

필요한 디렉토리를 생성하고, GPG 키를 추가한다.

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

 

3. Docker 리포지토리 설정:

Docker의 공식 리포지토리를 설정한다.

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

 

4. Docker 엔진 설치:

Docker 패키지를 설치한다.

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

 

5. Docker 서비스 시작 및 활성화:

Docker 서비스를 시작하고 부팅 시 자동으로 시작되도록 설정한다.

sudo systemctl start docker
sudo systemctl enable docker

 

6. Docker 설치 확인:

Docker  올바르게 설치되었는지 확인한다. 정상적으로 수행했다면 아래 명령어를 통해 Docker의 버전이 출력 되어야 한다.

sudo docker --version

 

이로써 Docker 설치가 완료되었다. 'sudo'를 사용하지 않고 Docker 명령어를 실행하려면 현재 사용자를 'docker' 그룹에 추가해야 한다.

 

사용자 'docker' 그룹에 추가

1. 현재 사용자를 'docker' 그룹에 추가:

$USER 부분에 나의 계정 이름을 적어주면 된다.

sudo usermod -aG docker $USER

 

2. 변경 사항 적용:

로그아웃했다가 다시 로그인하여 변경 사항을 적용한다. 또는 터미널을 다시 시작하거나 다음 명령어를 실행하여 현재 세션에 적용할 수 있다.

newgrp docker

 

 

요약

1. 필요한 패키지 설치

2. GPG 키 추가

3. Docker 리포지토리 설정

4. Docker 엔진 설치

5. Docker 서비스 시작 및 활성화

6. Docker 설치 확인

7. 사용자를 'docker' 그룹에 추가

 

 

다음으로 NVIDIA CUDA 사용을 위한 도구 설치를 진행한다.

NVIDIA 도구 설치 방법

1. NVIDIA GPG 키 다운로드 및 설정

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /etc/apt/keyrings/nvidia-container-toolkit-keyring.gpg

 

2. 소스 목록 추가

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list <<EOF
deb [signed-by=/etc/apt/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/stable/ubuntu$distribution/amd64/ /
deb [signed-by=/etc/apt/keyrings/nvidia-container-toolkit-keyring.gpg] https://nvidia.github.io/libnvidia-container/experimental/ubuntu$distribution/amd64/ /
EOF

 

3. 패키지 업데이트 및 NVIDIA 컨테이너 도구 설치

sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

 

4. NVIDIA Docker 설정

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

 

5. 설치 확인

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

 

 

이 과정을 통해 Docker 및 NVIDIA 도구 설치를 완료하였다.

 

 

Image pull 및 사용해보기

그럼 본격적으로 Docker를 통해 이미지를 가져와서 환경을 구성해보자. 먼저 docker hub 페이지에서 원하는 이미지를 검색해야 한다.

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

hub.docker.com

 

내가 원하는 환경 구성은 다음과 같다:

  • PyTorch 0.4.1
  • CUDA 9.0
  • cuDNN 7.0 (CUDA 9.0과 호환되는 것으로)
  • Ubuntu 16.04 또는 17.04 (CUDA 9.0과 호환되기 위해서)

현재 내가 사용하는 base Ubuntu 환경이 22.04 (최신 버전...)이므로 CUDA 9.0 설치가 안되었다. 따라서 코드를 실행하면 CUDA runtime 에러가 발생하였다. 이런 이유로 Docker image 사용을 생각해보았다.

그럼 검색창에서 PyTorch를 검색해보자.

 

맨 위의 pytorch/pytorch를 클릭하여 들어간다. Tags를 누르고 원하는 PyTorch 버전을 입력하여 검색해보자. 그럼 그에 호환되는 cuda와 cudnn으로 구성된 image가 있을 것이다. 나는 0.4.1-cuda9-cudnn7-devel을 사용하고자 했다. 옆의 명령어를 copy하고 터미널에 붙여넣는다 (runtime은 cuda, cudnn 버전 확인이 안된다).

명령어를 터미널에 붙여넣고 실행하면 Docker pull이 수행되며 이미지를 가져올 것이다.

다음 명령어를 통해 내가 pull 해 온 이미지가 무엇이 있는지 확인해보자.

docker images

방금 pull해온 0.4.1 이미지가 잘 확인된다. 그럼 docker image를 실행해보자!

docker run -it --gpus all --name pytorch041 -v /home/:/home/ pytorch/pytorch:0.4.1-cuda9-cudnn7-devel

workspace로 들어온 것을 확인할 수 있다. 즉, docker 안으로 들어온 상태이다. 한 번 나의 환경과 구성이 맞는지 확인해보도록 하자.

cuda 버전 확인은 다음 명령어로 수행한다.

nvcc -V

 

아래의 명령어는 python을 시작하여 torch의 버전을 확인하고, 가지고 있는 GPU의 이름을 출력하는 과정이다.

python
import torch
torch.__version__
torch.cuda.get_device_name(0)

cuDNN 버전 확인은 다음의 명령어로 수행한다.

cat /usr/include/x86_64-linux-gnu/cudnn_v*.h | grep CUDNN_MAJOR -A 2

 

Docker container에서 나가기 위해서는 exit 명령어를 사용한다.

exit

 

다음 명령어를 통해 현재 실행 중인 container를 확인할 수 있다.

docker ps

 

다시 생성했던 container에 접속하기 위해서는 다음을 실행한다. 먼저 container를 시작하고, attach를 통해 container에 접속한다.

docker start pytorch041
docker ps
docker attach pytorch041

 

 

이렇게 환경 구성을 쉽게 구성했다!