前言
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 Device
和 CUDA Driver
。如果沒有檢測到 NVIDIA_VISIBLE_DEVICES
就會執行預設的 runc
。
設定 repository
和 GPG 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