安裝NVIDIA Container Toolkit以GPU配置Docker及K8S

Hachibye
7 min readOct 28, 2023

--

Install NVIDIA Container Toolkit to configure Docker and Kubernetes with GPU

基本上按照官方安裝步驟就能完成
主要是為了在Linux安裝NVIDIA Docker來提供GPU計算環境
也能支持Google的TensorFlow機器學習系統

系統:Ubuntu 22.04
顯卡:Nvidia RTX 3060

查看版本 cat /etc/lsb-release
查看顯卡訊息 lshw -c video

也可以安裝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

--

--

Hachibye
Hachibye

Written by Hachibye

字幕組退休勞工 ... DevOps/系統/雲端/資安

No responses yet