Install NVIDIA Container Toolkit to configure Docker and Kubernetes with GPU
基本上按照官方安裝步驟就能完成
主要是為了在Linux安裝NVIDIA Docker來提供GPU計算環境
也能支持Google的TensorFlow機器學習系統
系統:Ubuntu 22.04
顯卡:Nvidia RTX 3060
也可以安裝CPU-X查看整體的系統訊息
sudo apt-get install cpu-x
前置作業:
#禁用nouveau驅動
sudo apt-get install initramfs-tools
#編輯文件,在文件最末尾加入指令禁用
sudo nano /etc/modprobe.d/blacklist.conf
#加入這行!不是執行! blacklist nouveau options nouveau modeset=0
保存退出之後要讓配置生效
sudo update-initramfs -u
有安裝圖形介面的話:
可以直接到Nvidia下載驅動程式回來安裝
#搜尋指定顯示卡(不要下載官方的下載器)
#路線一:執行剛才下載的驅動程式
sudo cd home/下載
sudo chmod +x NVIDIA-Linux-x86_64–410.78.run
sudo ./NVIDIA-Linux-x86_64–410.78.run
#路線二:剛才查到的版本,用指令下載安裝
sudo apt update
#版本範例535,請按照網頁上搜尋出來的版本號為主
sudo apt install nvidia-utils-535
sudo apt install nvidia-driver-535
#查看是否已經安裝驅動
ubuntu-drivers devices
#查看驅動版本
nvidia-smi
再來終於要安裝nvidia-docker本體了!
#設定來源映像檔倉庫
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 apt-get update
#安裝NVIDIA Container Toolkit套件
sudo apt-get install -y nvidia-container-toolkit
#設定runtime為Docker(等於cri-docker)
sudo nvidia-ctk runtime configure --runtime=docker
查看 /etc/docker/daemon.json 是否已經寫入nvidia的runtime配置
cat /etc/docker/daemon.json
#重啟docker
sudo systemctl restart docker
如上步驟!記得要重啟docker!重啟之後即可執行測試程式
#執行測試程式
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
再來要測試K8S的版本,一樣檢查下
是否已經有nvidia的runtime
cat /etc/docker/daemon.json
檢查K8S是否已經安裝cri-dockerd並啟動程序
systemctl status cri-docker.socket
*地雷:
若採用不同的runtime需要進行不同的配置
本文是用docker的cri-docker作為runtime
若用的是containerd或其他runtime需參考官方文件進行配置
runtime在kubeadm init時有宣告
#查看節點使用的runtime
kubectl get nodes -o wide
確定指向正確的runtime之後就能執行測試
#套用配置
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.1/nvidia-device-plugin.yml
#啟用測試Pod
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
restartPolicy: Never
containers:
- name: cuda-container
image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2
resources:
limits:
nvidia.com/gpu: 1 # requesting 1 GPU
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
EOF
跑完之後查看下log,出現下面的通過畫面就完成了!
kubectl logs gpu-pod
相關配置文件位置
cat /etc/nvidia-container-runtime/config.toml
參考官方文件: