為了接下來的需求,要先教大家如何讓 Kubenetes 成功配置到 GPU ,
研究室碩一筆記
前置須知:
參考連結 :
K8s-Device-Plugin
https://github.com/NVIDIA/k8s-device-plugin
https://ithelp.ithome.com.tw/articles/10244493
在本次測試中
稍後可用於判斷是否配置成功用途
運行NVIDIA GPU Device Plugin 需要所有 Node 節點滿足以下條件
( 如果允許 Master 節點部署 Pod,那麼 Master 節點也需要滿足 )
# 實驗環境
# MasterNode
系統版本:Ubuntu 20.04.4 LTS
Kernel 版本:GNU/Linux 5.13.0-44-generic x86_64
Docker-CE 版本:Docker version 23.0.1, build a5ee5b1
Nvidia-Docker 版本:2.12.0
Kubernetes 版本:v1.22.17
NVIDIA/k8s-device-plugin版本:0.13.0
GPU : 2080ti * 1
# WorkerNode
系統版本:Ubuntu 20.04.4 LTS
Kernel 版本:GNU/Linux 5.13.0-44-generic x86_64
Docker-CE 版本:Docker version 23.0.1, build a5ee5b1
Nvidia-Docker 版本:2.12.0
Kubernetes 版本:v1.22.17
NVIDIA/k8s-device-plugin版本:0.13.0
GPU : 2080ti * 1
MasterNode Nvidia-SMI 相關資訊
WorkerNode Nvidia-SMI 相關資訊
如果沒有安裝 Nvidia 相關套件及 CUDA 請先看後面教學進行安裝,
確認有安裝 Nvidia 相關套件以及 CUDA 之後,
vim /etc/docker/daemon.json
ubuntu@10.0.0.129 的 daemon.json
ubuntu-PowerEdge-R740@10.0.0.128 的 daemon.json
原本 Defalut 的 runtime 不是上圖的模樣,
新增 "default-runtime": "nvidia" 鍵值之後,
再 systemctl restart docker 重啟 docker 。
# 安裝 Nvidia-Container-Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | sudo tee /etc/apt/sources.list.d/libnvidia-container.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
# 安装 NVIDIA GPU plugin
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.13.0/nvidia-device-plugin.yml
在 kubenetes 方面上面雖然下載完 plugin 但仍然需要建置 Nvidia plugin 的 daemonset,
kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.9.0/nvidia-device-plugin.yml
運行完指令之後會出現,
我們可以透過這個指令看是否有成功讓 Node 被配置 Nvidia/gpu ,
kubectl get nodes -o=json | jq '.items[] | {name: .metadata.name, gpu: .status.allocatable."nvidia.com/gpu"}'
原本剛建置好環境應該是下圖,
配置好 daemonset 之後就會變成,
用 Docker 小測試一下,
docker run --gpus all nvcr.io/nvidia/cuda:11.4.0-base nvidia-smi
結果應該要輸出,完工。