몰입과 소통

Ubuntu 18.04에서 Nvidia Driver, Nvidia Docker 구축하기 본문

개발

Ubuntu 18.04에서 Nvidia Driver, Nvidia Docker 구축하기

Dev Teddy 2024. 3. 1. 08:00

이번 포스트는 Nvidia Driver, Nvidia  Docker를 설치하는 방법입니다.

이 포스트는 다음 포스트인 Minikube, Kubeflow 구축하기와 이어집니다.

설치 순서는 다음과 같습니다.

  1. Nvidia Driver 설치
  2. Docker 설치 + Nvidia Docker 설치

 

설치한 버전은 다음과 같습니다.

  • Ubuntu : 18.04 LTS
  • Nvidia Driver : GPU 호환 맞추어 알아서(여기선 nvidia-driver-470 사용)
  • Docker : 23.0.1

설치 시작하겠습니다.


1. Nvidia Driver 설치

먼저 스왑 메모리 할당을 해제합니다.

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
sudo reboot

 

Nvidia Driver 설치를 시작합니다.

자신에게 맞는 Nvidia Driver를 설치해주세요. 저는 nvidia-driver-470을 사용하였습니다.
설치 가능한 드라이버를 보고싶으시다면, nvidia-driver까지만 타이핑 후 Tab 버튼을 누르시면 사용 가능한 드라이버가 출력될 것입니다.

sudo apt-get purge nvidia-*
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update

# 자신에게 맞는 Nvidia Driver를 설치해주세요.
# 저는 nvidia-driver-470을 사용하였습니다.
# 설치 가능한 드라이버를 보고싶으시다면, nvidia-driver까지만 타이핑 후 
# Tab 버튼을 누르시면 사용 가능한 드라이버가 출력될 것입니다.
sudo apt-get install nvidia-driver-470

sudo reboot

# 실행시 gpu 확인 가능
nvidia-smi

 

Nvidia Driver 설치 후 nvidia-smi 출력시 아래와 비슷한 창이 출력된다면 설치 성공입니다.

# 출력 예시
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.73.01    Driver Version: 460.73.01    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce RTX 3090    Off  | 00000000:01:00.0  On |                  N/A |
| 48%   44C    P8    36W / 370W |    671MiB / 24267MiB |      4%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

 

2. Docker 설치

Docker는 애플리케이션을 컨테이너 내에서 실행할 수 있게 해주는 오픈 소스 소프트웨어 플랫폼입니다. 
컨테이너는 애플리케이션이 실행되는 환경(예: 코드, 런타임, 시스템 도구, 시스템 라이브러리 등)을 패키지로 묶어주어, 애플리케이션이 다양한 컴퓨팅 환경에서도 일관된 방식으로 실행될 수 있도록 합니다. 

 

Docker 설치는 공식 Docs를 바탕으로 정리하였습니다.

막히는 부분이 있으시다면, 공식 Docs를 참고하시면 좋을것 같습니다. 

 

apt 패키지 인덱스를 업데이트하고 apt가 HTTPS를 통해 저장소를 사용할 수 있도록 패키지를 설치

sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

 

Docker의 공식 GPG 키 추가하기

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

 

명령어를 사용하여 저장소 설정

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

 

Docker 엔진, containerd, 그리고 Docker Compose 설치하기

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

 

권한 변경하기

권한 변경시 일반 계정에서도 Docker 사용이 가능합니다.

sudo usermod -aG docker $USER && newgrp docker

 

Docker Engine 설치가 성공적인지 `hello-world` 이미지를 실행하여 확인

sudo docker run hello-world

 

hello-world 이미지 실행 후 아래와 비슷한 창이 출력된다면 설치 성공입니다.

# 출력 예시
Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

 

3. Nvidia Docker 설치

이제 Nvidia Docker 설치만 남았습니다.

Nvidia Docker는 Nvidia GPU를 사용하는 컨테이너 내의 애플리케이션에 대해 GPU 사용을 가능하게 해주는 도구입니다. 
Docker는 컨테이너화된 환경을 제공하지만, GPU와 같은 하드웨어 자원을 직접적으로 활용하는 것은 지원하지 않습니다.
Nvidia Docker는 Docker 컨테이너가 호스트 시스템의 Nvidia GPU에 접근하고, CUDA와 같은 라이브러리를 활용할 수 있도록 해줍니다.

 

컨테이너 내부에서 GPU 자원 사용이 불필요하시다면, 해당 단계를 넘어가셔도 무관합니다.

최근 Nvidia Docker에 대한 지원이 중단되었고, NVIDIA Container Toolkit으로 대체되었습니다.

현재 설치는 가능하지만, 추후 지원이 완전히 종료될 수 있습니다. 참고 바랍니다.

Nvidia Docker 저장소 GPG 키를 설정합니다.

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

 

Nvidia Docker를 설치합니다.

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit nvidia-container-runtime
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker

 

Docker Runtime을 수정합니다.

daemon.json에 "default-runtime": "nvidia" Key, Value를 추가합니다.

daemon.json 수정 후 Docker를 재시작을 하면 설정은 끝이 납니다.

sudo nano /etc/docker/daemon.json

{
  "default-runtime": "nvidia",
  "runtimes": {
      "nvidia": {
          "path": "nvidia-container-runtime",
          "runtimeArgs": []
   }
  }
}

sudo systemctl restart docker

 

--gpus all 옵션을 붙인 후 우분투 이미지를 실행했을 때 아래와 비슷한 창이 출력된다면 설치 성공입니다.

docker run --rm --gpus all ubuntu:18.04 nvidia-smi
# 출력 예시
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 460.73.01    Driver Version: 460.73.01    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  GeForce RTX 3090    Off  | 00000000:01:00.0  On |                  N/A |
| 48%   44C    P8    36W / 370W |    671MiB / 24267MiB |      4%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

 

설치가 잘 끝나셨나요? 이번 포스트를 통해 Nvidia Driver와 Nvidia Docker의 설치 과정을 알아보았습니다.

독자분들도 이 강력한 도구들을 사용하여 컨테이너 기반의 애플리케이션을 더욱 효율적으로 개발하고 배포할 수 있게 되었을 것입니다. 

 

궁금한 점이 있으시면 댓글이나 이메일로 문의해 주세요. 확인하는 대로 답변드리겠습니다.