本文介紹如何在 Ubuntu Linux 系統上安裝 NVIDIA 驅動程式與 Docker 容器環境,並進行相關設定,讓 Docker 容器內可以使用 NVIDIA GPU 進行運算。

本文的測試環境為 Ubuntu Linux 24.04.4 LTS。

準備基本 Ubuntu Linux 環境

在安裝好基本的 Ubuntu Linux 系統之後,將所有套件更新至最新版。

# 更新系統套件
sudo apt update

# 更新所有套件
sudo apt dist-upgrade

安裝 NVIDIA 驅動程式

使用 Ubuntu 內建的套件管理工具安裝預設的 NVIDIA 驅動程式。

# 安裝 Ubuntu 驅動程式管理工具
sudo apt install ubuntu-drivers-common

# 安裝預設驅動程式(包涵 NVIDIA 驅動程式)
sudo ubuntu-drivers install

安裝完成驅動程式並重新開機後,確認 NVIDIA 驅動程式有正常運作:

# 確認 NVIDIA 驅動程式有正常運作
nvidia-smi

安裝 Docker 環境

參考 Docker 官方文件,安裝 Docker 容器環境。

先移除舊版 Docker 套件:

# 移除舊版 Docker 套件
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc docker-buildx podman-docker containerd runc | cut -f1)

加入 Docker 官方 GPG 金鑰:

# 加入 Docker 官方 GPG 金鑰
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

加入 Docker 官方套件庫:

# 加入 Docker 官方套件庫
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

安裝 Docker 環境:

# 安裝 Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

確認 Docker 系統服務有正常啟動:

# 顯示 Docker 系統服務狀態
sudo systemctl status docker

安裝完成後,參考 Docker 官方文件,將自己加入 docker 群組,這樣才能正常使用 Docker:

# 設定一般使用者之 Docker 使用權限
sudo usermod -aG docker $USER

重新登入之後,測試一下 Docker 是否可以正常使用:

# 測試 Docker 使用權限
docker ps

若沒有出現錯誤訊息,就表示沒問題。最後實際跑一個 Docker 容器:

# 執行 Docker 測試容器
docker run --rm hello-world

測試完之後,清除 Docker 測試容器影像檔:

# 清除 Docker 測試容器影像檔
docker image rm hello-world

安裝 NVIDIA Container Toolkit

參考 NVIDIA 官方文件,安裝 NVIDIA Container Toolkit,讓 NVIDIA 的 GPU 可以正常在 Docker 容器內運行。

先設定 NVIDIA 的套件庫:

# 安裝必要套件
sudo apt-get update && sudo apt-get install -y --no-install-recommends \
   ca-certificates curl gnupg2

# 設定套件庫
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/stable/deb/nvidia-container-toolkit.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

# 使用實驗性套件(選擇性)
sudo sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list

更新套件庫後,安裝 NVIDIA Container Toolkit:

# 更新套件庫
sudo apt-get update

# 安裝 NVIDIA Container Toolkit
export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.20.0-1
  sudo apt-get install -y \
      nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}

接著更新 Docker 設定,讓 GPU 可以在 Docker 容器內正常運行:

# 更新 Docker 設定
sudo nvidia-ctk runtime configure --runtime=docker

# 重新啟動 Docker 服務
sudo systemctl restart docker

確認 Docker 可以正常使用 NVIDIA GPU:

# 確認 Docker 可以正常使用 NVIDIA GPU
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

執行之後,若有正常顯示 NVIDIA GPU 的資訊,就表示完成了。

最後移除測試用的 Docker 影像檔:

# 移除 Docker 影像檔
docker image rm ubuntu