Containerd 配置使用 Nvidia container runtime

牛奔發表於2024-04-25

前言

Kubernetes 叢集中 Docker 如何使用 GPU,請看這一篇

docker配置Nvidia環境,使用GPU

本文著重講 Containerd 如何作為容器執行時來使用 GPU

nvidia-container-runtime

nvidia-container-runtime 是在 runc 基礎上多實現了 nvidia-container-runime-hook (現在叫 nvidia-container-toolkit),該 hook 是在容器啟動後(Namespace 已建立完成),容器自定義命令( Entrypoint )啟動前執行。當檢測到 NVIDIA_VISIBLE_DEVICES 環境變數時,會呼叫 libnvidia-container 掛載 GPU DeviceCUDA Driver。如果沒有檢測到 NVIDIA_VISIBLE_DEVICES 就會執行預設的 runc

設定 repositoryGPG key

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

curl -s -L https://nvidia.github.io/nvidia-container-runtime/$(. /etc/os-release;echo $ID$VERSION_ID)/nvidia-container-runtime.list | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list

開始安裝 nvidia-container-runtime

apt install nvidia-container-runtime -y

配置 Containerd 使用 Nvidia container runtime

如果 /etc/containerd 目錄不存在,就先建立它:

mkdir /etc/containerd

生成預設配置:

containerd config default > /etc/containerd/config.toml

Kubernetes 使用裝置外掛(Device Plugins) 來允許 Pod 訪問類似 GPU 這類特殊的硬體功能特性,但前提是預設的 OCI runtime 必須改成 nvidia-container-runtime,需要修改的內容如下:

[plugins."io.containerd.grpc.v1.cri"]
  [plugins."io.containerd.grpc.v1.cri".containerd]
    default_runtime_name = "nvidia-container-runtime" # 修改為nvidia-container-runtime
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
    runtime_type = "io.containerd.runc.v2" # 修改為io.containerd.runc.v2
  # 新增以下
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia-container-runtime]
    runtime_type = "io.containerd.runtime.v1.linux"
    runtime_engine = "/usr/bin/nvidia-container-runtime"

重啟 containerd 服務:

systemctl restart containerd
systemctl status containerd

確定 containerd 狀態沒有問題,配置成功

接下來部署 NVIDIA GPU 裝置外掛,nvidia-device-plugin

相關文章