Rancher (RKE2) 上部署 Nvidia GPU Operator¶
本教程將探討在 Kubernetes 集群上使用基於 containerd 容器 runtime 而不是 Docker 引擎的 GPU 主機安裝 NVIDIA GPU Operator 的步驟。
與 Upstream Kubernetes 發行版上的安裝相比,RKE2/K3S 上的安裝步驟略有不同。關鍵區別在於 RKE2/K3S 帶有嵌入式 containerd
,因此不需要獨立安裝 containerd
的容器 runtime。
步驟 01 - 環境安裝¶
在典型的基於 GPU 的 Kubernetes 安裝中,每個節點都需要設定正確版本的 Nvidia 顯卡驅動程式、CUDA runtime 和 cuDNN 函式庫,然後是容器 runtime,例如 Docker Engine、containerd、podman 或 CRI-O。
然後,部署 Nvidia Container Toolkit 以提供對容器化應用程式的 GPU 訪問。最後,安裝 Kubernetes,它將與選定的容器 runtime 交互以管理工作負載的生命週期。
Nvidia GPU Operator 顯著簡化了相關的設定與安裝流程,無需安裝驅動程式、CUDA runtime、cuDNN 函式庫或 Container Toolkit。它可以安裝在任何滿足特定硬體和軟體要求的 Kubernetes 集群上。
以下是安裝 Rancher (RKE2/K3S) 和 Nvidia GPU Operator 的步驟。在安裝結束後,我們將通過在 pod 中運行 Vector 運算來測試與驗證了 GPU 的訪問。
先決條件 (一台配備著 Nvidia GPU 的機器):
- Operating system:
Ubuntu 20.04 LTS
- GPU:
Nvidia GeForce MX150
(Nvidia GPU 顯卡)
Step 1: 安裝 nvidia drivers¶
Tip
根據 Nvidia GPU Operator 的內容,operator 應該可自動幫每一個 Kubernetes 節點自動設定 GPU 的 Driver。
然而在驗證的過程會發現 Ubuntu 的機器會在安裝完 Nvidia GPU Operator 之後一直重覆 reboot。
排查之後的結果因該是 GPU Operator 在自動安裝 GPU Driver 後所發生的現象,查找相關 Githut 與 Google 之後尚未找出根因,因此在本教程中是先手動安裝 Nvidia GPU Driver 與 Nvidia Container Toolkit 在 Ubuntu 的機器上。
我們可以先使用 apt
搜索可用的 Nvidia GPU 卡的驅動程式:
由於許多深度學習開發工具會與 Nvidia CUDA 函式庫有相依性,在安裝 Nvidia Driver 時需要根據實際的情況來決定要安裝的 Driver 版本。
下面列出 CUDA 版本對應到 Driver 版本的兼容性:
CUDA Toolkit | Linux x86_64 Minimum Required Driver Version | Windows Minimum Required Driver Version |
---|---|---|
CUDA 12.x | >=525.60.13 | >=527.41 |
CUDA 11.x | >= 450.80.02* | >=452.39* |
CUDA 10.2 | >= 440.33 | >=441.22 |
CUDA 10.1 | >= 418.39 | >=418.96 |
CUDA 10.0 | >= 410.48 | >=411.31 |
在撰寫本文時,CUDA 11.x 是主流的版本,因此在本教程會選擇相搭配的驅動程式版本 515
,所以讓我們安裝這個版本:
重新啟動 Ubuntu 的機器:
驗證 nvidia driver 的安裝:
結果:
Sat Jan 28 00:13:13 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 515.86.01 Driver Version: 515.86.01 CUDA Version: 11.7 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... Off | 00000000:02:00.0 Off | N/A |
| N/A 57C P0 N/A / N/A | 469MiB / 2048MiB | 100% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| 0 N/A N/A 937 G /usr/lib/xorg/Xorg 4MiB |
| 0 N/A N/A 102783 C /usr/bin/dcgmproftester11 463MiB |
+-----------------------------------------------------------------------------+
Step 2: 安裝 nvidia container toolkit¶
首先,設置包存儲庫和 GPG 密鑰:
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/nvidia-container-toolkit.list
現在,安裝 NVIDIA Container Toolkit:
Step 3: 安裝 kubernetes¶
創建 RKE2 設定文件 /etc/rancher/rke2/config.yaml
:
sudo mkdir /etc/rancher/rke2 -p
cat <<EOF | sudo tee /etc/rancher/rke2/config.yaml
write-kubeconfig-mode: "0644"
write-kubeconfig: "/root/.kube/config"
cni: "calico"
tls-san:
- dxlab-nb-00
- 192.168.50.195
EOF
下載並運行 RKE2 的安裝腳本:
sudo apt install curl -y
curl -sfL https://get.rke2.io --output install.sh
chmod +x install.sh
sudo ./install.sh
啟用 rke2-server
服務:
# Enable and activate RKE2 server
sudo systemctl enable rke2-server.service
sudo systemctl start rke2-server.service
檢查 rke2-server
運行時的狀態。
結果:
● rke2-server.service - Rancher Kubernetes Engine v2 (server)
Loaded: loaded (/usr/local/lib/systemd/system/rke2-server.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-01-24 23:25:42 EST; 4min 35s ago
Docs: https://github.com/rancher/rke2#readme
Process: 2725 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exited, status=0/SUCCESS)
Process: 2727 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
Process: 2730 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 2731 (rke2)
Tasks: 212
Memory: 4.4G
CGroup: /system.slice/rke2-server.service
├─2731 /usr/local/bin/rke2 server
├─2754 containerd -c /var/lib/rancher/rke2/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock --state /run/k3s/containerd --root /var/lib/ran>
├─2782 kubelet --volume-plugin-dir=/var/lib/kubelet/volumeplugins --file-check-frequency=5s --sync-frequency=30s --address=0.0.0.0 --alsologtostderr=false --anony>
├─2883 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id fc3a59fb6a2e65cad40e89916a5e0ba26e4442f57f994801d3>
├─2965 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5746595b1334a8e2fee3ce71c7ef08d59b0b087be9dc04695c>
├─3064 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5b6dcc2cc00203125e95676907517f9210d1934fb5f72b23e6>
├─3076 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id cd274b023bcf42ed557167394ca4874c9fd3f160b4354d8cf7>
├─3233 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id 23bcd47f24e4b855d454364b771c183ca0d482c424c18b082b>
├─3365 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id 93e97168004715c832dca86bdc709d35f8ec94168d3e52cfd8>
├─4374 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id 043f7e79539f560d8bd38cfc3edbb1f028683bc00b4ef4984c>
├─4729 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id fe869fd79959b303a8ff5494c471d7c443b31358bb43482ce1>
├─5738 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id 2ae41a5a0c107f3591c2378c2d2b3ddba9052a39169edd4268>
├─6940 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id 72a759cf32ba0c922fd55fbb2e414a2bff7f438a58d74acc99>
├─6976 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id 5a8b1a0f32b2bcbb70631289b0c2a6c23b5b6628a8c6b9b1fd>
├─7448 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id 22599e38a6bdbc2b669f53dc51ae225ac4085d4f022b398b8d>
├─7618 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id 78da35606323653a02e191983e51d7c4185b656b2f08e2b733>
└─8980 /var/lib/rancher/rke2/data/v1.24.9-rke2r2-154c18a3ccf5/bin/containerd-shim-runc-v2 -namespace k8s.io -id 0f5b1009c45e04c530cf8a422caa6e0106c212a60eae09b621>
將包含 Kubernetes 二進製文件的目錄添加到路徑中,然後運行 kubectl
命令來檢查服務器的狀態。
# copy RKE2 kubeconfig file to the default location
mkdir ~/.kube
sudo cp /etc/rancher/rke2/rke2.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
chmod 600 ~/.kube/config
# add RKE2 binaries to path
export PATH=$PATH:/var/lib/rancher/rke2/bin
echo "export PATH=$PATH:/var/lib/rancher/rke2/bin" >> ~/.bashrc
export KUBECONFIG=$HOME/.kube/config
echo "export KUBECONFIG=$HOME/.kube/config" | tee -a ~/.bashrc
請運行以下命令並檢查節點的狀態是否 Ready
:
結果:
檢查 containerd
的設定:
version = 2
[plugins."io.containerd.internal.v1.opt"]
path = "/var/lib/rancher/rke2/agent/containerd"
[plugins."io.containerd.grpc.v1.cri"]
stream_server_address = "127.0.0.1"
stream_server_port = "10010"
enable_selinux = false
enable_unprivileged_ports = true
enable_unprivileged_icmp = true
sandbox_image = "index.docker.io/rancher/pause:3.6"
[plugins."io.containerd.grpc.v1.cri".containerd]
snapshotter = "overlayfs"
disable_snapshot_annotations = true
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes."nvidia"]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes."nvidia".options]
BinaryName = "/usr/bin/nvidia-container-runtime"
Tip
在安裝 RKE2 之前若先安裝好 Nvidia Driver 與 Nvidia Container Toolkit 的話, RKE2 會自動將 nvidia
的容器 runtime 加入到 containerd
的設定檔中。
參考: https://docs.k3s.io/quick-start
K3s 提供了一個安裝腳本,可以方便地將其作為服務安裝在基於 systemd 或 openrc 的系統上。該腳本可在 https://get.k3s.io 獲得。要使用這種方法安裝 K3s,只需運行:
運行此安裝後:
- K3s 服務將設定為在節點重啟後或進程崩潰或被終止時自動重啟
- 將安裝其他實用程式,包括
kubectl
、crictl
、ctr
、k3s-killall.sh
和k3s-uninstall.sh
- 一個
kubeconfig
文件會寫入/etc/rancher/k3s/k3s.yaml
,K3s安裝的kubectl
會自動使用它
單節點服務器安裝是一個功能齊全的 Kubernetes 集群,包括託管工作負載 pod 所需的所有數據存儲、控制平面、kubelet 和容器運行時組件。沒有必要添加額外的服務器或代理節點,但您可能希望這樣做以向集群添加額外的容量或冗餘。
檢察 k3s 服務:
結果:
● k3s.service - Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-01-25 02:02:35 EST; 2min 22s ago
Docs: https://k3s.io
Process: 2722 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exited, status=0/>
Process: 2724 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
Process: 2727 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 2728 (k3s-server)
Tasks: 113
Memory: 1.2G
CGroup: /system.slice/k3s.service
├─2728 /usr/local/bin/k3s server
├─2756 containerd -c /var/lib/rancher/k3s/agent/etc/containerd/config.toml -a /run/k3s/containerd/containerd.sock -->
├─3535 /var/lib/rancher/k3s/data/84e02c125ef7644128a11b4ba4ebf72630b91abe0433e60a19586a247542e75b/bin/containerd-shi>
├─3582 /var/lib/rancher/k3s/data/84e02c125ef7644128a11b4ba4ebf72630b91abe0433e60a19586a247542e75b/bin/containerd-shi>
├─3620 /var/lib/rancher/k3s/data/84e02c125ef7644128a11b4ba4ebf72630b91abe0433e60a19586a247542e75b/bin/containerd-shi>
├─4467 /var/lib/rancher/k3s/data/84e02c125ef7644128a11b4ba4ebf72630b91abe0433e60a19586a247542e75b/bin/containerd-shi>
└─4546 /var/lib/rancher/k3s/data/84e02c125ef7644128a11b4ba4ebf72630b91abe0433e60a19586a247542e75b/bin/containerd-shi>
將上下文複製到您的 ~/.kube/config
並將此設定設置為默認設定。
# copy K3S kubeconfig file to the default location
mkdir ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
chmod 600 ~/.kube/config
export KUBECONFIG=$HOME/.kube/config
echo "export KUBECONFIG=$HOME/.kube/config" | tee -a ~/.bashrc
請運行以下命令並檢查節點的狀態是否 Ready
:
結果:
檢查 containerd
的設定:
結果:
version = 2
[plugins."io.containerd.internal.v1.opt"]
path = "/var/lib/rancher/k3s/agent/containerd"
[plugins."io.containerd.grpc.v1.cri"]
stream_server_address = "127.0.0.1"
stream_server_port = "10010"
enable_selinux = false
enable_unprivileged_ports = true
enable_unprivileged_icmp = true
sandbox_image = "rancher/mirrored-pause:3.6"
[plugins."io.containerd.grpc.v1.cri".containerd]
snapshotter = "overlayfs"
disable_snapshot_annotations = true
[plugins."io.containerd.grpc.v1.cri".cni]
bin_dir = "/var/lib/rancher/k3s/data/84e02c125ef7644128a11b4ba4ebf72630b91abe0433e60a19586a247542e75b/bin"
conf_dir = "/var/lib/rancher/k3s/agent/etc/cni/net.d"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
Tip
在安裝 K3S 之前若先安裝好 Nvidia Driver 與 Nvidia Container Toolkit 的話, K3S 會自動將 nvidia
的容器 runtime 加入到 containerd
的設定檔中。
Step 4: 安裝 gpu operator¶
詳細的 Nvidia GPU Operator 說明請見: Nvidia GPU Operator 官網
首先安裝 Helm3 的二進製文件。
sudo apt install git -y
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 700 get_helm.sh
sudo ./get_helm.sh
添加 Nvidia Helm 存儲庫。
由於我們使用的是 containerd
容器 runtime,因此我們將其設置為默認值並且宣告不自動安裝 Nvidia Driver。
helm upgrade --install gpu-operator \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--set operator.defaultRuntime=containerd \
--set driver.enabled=false \
--set toolkit.enabled=false
幾分鐘後,您應該會看到 gpu-operator
命名空間中的 pod 正在運行, 檢查是否有運行錯誤或異常的的 pod。
結果:
NAME READY STATUS RESTARTS AGE
gpu-feature-discovery-7kcmc 1/1 Running 0 2m24s
gpu-operator-95b545d6f-vv5kz 1/1 Running 0 2m46s
gpu-operator-node-feature-discovery-master-84c7c7c6cf-lcsrx 1/1 Running 0 2m46s
gpu-operator-node-feature-discovery-worker-wz58s 1/1 Running 0 2m46s
nvidia-cuda-validator-pl2mh 0/1 Completed 0 2m9s
nvidia-dcgm-exporter-r7gkw 1/1 Running 0 2m24s
nvidia-device-plugin-daemonset-qwjhn 1/1 Running 0 2m24s
nvidia-device-plugin-validator-xn9mr 0/1 Completed 0 108s
nvidia-operator-validator-4md82 1/1 Running 0 2m24s
使用 Nvidia GPU Operator 運行的 state-machine diagram 可了解它運作的順序。
步驟 02 - GPU 設定功能驗證¶
是時候測試 Pod 的 GPU 訪問了。運行以下命令以啟動測試 pod。
kubectl apply -f -<<EOF
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
restartPolicy: Never
runtimeClassName: nvidia
containers:
- name: cuda-container
image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2
resources:
limits:
nvidia.com/gpu: 1
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
EOF
Tip
由於在 Kubernetes 中包含了多個 container runtime, 因此要使用 runtimeClassName: nvidia
來指定特別的 container runtime。
檢查 pod 運行的日誌:
結果:
[Vector addition of 50000 elements]
Copy input data from the host memory to the CUDA device
CUDA kernel launch with 196 blocks of 256 threads
Copy output data from the CUDA device to the host memory
Test PASSED
Done
設置 GPU 監控解決方案¶
NVIDIA GPU Operator 包含了 dcgm-exporter
組件。DCGM Exporter 的核心功能是用來收集 Kubernetes 節點上 GPU 信息(比如 GPU 卡的利用率、溫度、顯存使用情況等)的工具,若結合 Prometheus 和 Grafana 則可以提供豐富的 dashboard 來對 GPU 進行監控。
接著我們使用 Prometheus Operator 來部署 Prometheus 與 Grafana 儀表板。然後利用 dcgmproftester
的 utitliy 來驗證 GPU 的效能與指標的訊息。
安裝 Prometheus Operator:
添加 Prometheus-Community helm 存儲庫並更新本地緩存:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
創建要配置的 vlaues 檔案:
grafana:
# change timezone setting base on browser
defaultDashboardsTimezone: browser
grafana.ini:
users:
viewers_can_edit: true
auth:
disable_login_form: false
disable_signout_menu: false
auth.anonymous:
enabled: true
org_role: Viewer
sidecar:
datasources:
logLevel: "DEBUG"
enabled: true
searchNamespace: "ALL"
dashboards:
logLevel: "DEBUG"
# enable the cluster wide search for dashbaords and adds/updates/deletes them in grafana
enabled: true
searchNamespace: "ALL"
label: grafana_dashboard
labelValue: "1"
prometheus:
prometheusSpec:
# enable the cluster wide search for ServiceMonitor CRD
serviceMonitorSelectorNilUsesHelmValues: false
# enable the cluster wide search for PodMonitor CRD
podMonitorSelectorNilUsesHelmValues: false
# enable the cluster wide search for PrometheusRule CRD
ruleSelectorNilUsesHelmValues: false
probeSelectorNilUsesHelmValues: false
使用 Helm 在命名空間監控中部署 kube-stack-prometheus
chart:
helm upgrade --install --wait --create-namespace --namespace monitoring \
kube-stack-prometheus prometheus-community/kube-prometheus-stack \
--values kube-stack-prometheus-values.yaml
修改 gpu-operator 佈署的參數來啟動對 ServiceMonitor
的設定:
helm upgrade --install gpu-operator \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--set operator.defaultRuntime=containerd \
--set driver.enabled=false \
--set toolkit.enabled=false \
--set dcgmExporter.serviceMonitor.enabled=true
檢查:
結果:
連接到 Grafana:
Grafana Web UI 可通過以下命令通過端口轉發訪問:
kubectl port-forward --namespace monitoring \
svc/kube-stack-prometheus-grafana \
3000:80 --address="0.0.0.0"
打開瀏覽器並轉到 http://localhost:3000 並填寫前一個命令所取得的用戶名/密碼。預設的帳號是:
username
: adminpassword
: prom-operator
到 Grafana Dashboard 網站取得 DCGM Exporter 的 Dashboard ID:
在 Grafana 的側 Menu bar 上點擊 "Dashboards >> Import":
輸入 Dashboard 編號 "12239" 後點擊 "Load":
在 "Prometheus" 的下接選單中點選 "Prometheus" 後再點擊 "Import":
產生 GPU 負載:
要生成 GPU 負載,我們直接運行 dcgmproftester
的容器。此容器在 NVIDIA DockerHub 存儲庫中可用。
通過指定 -t 1004
並運行 -d 300
(300 秒)測試,使用 Tensor Core 觸發 FP16 矩陣乘法。您可以通過修改 -t
參數嘗試運行其他工作負載。
cat << EOF | kubectl create -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: dcgmproftester
labels:
app: dcgmproftester
spec:
replicas: 1
selector:
matchLabels:
app: dcgmproftester
template:
metadata:
labels:
app: dcgmproftester
spec:
tolerations:
- key: nvidia.com/gpu
operator: Exists
effect: NoSchedule
runtimeClassName: nvidia
containers:
- name: dcgmproftester11
image: nvidia/samples:dcgmproftester-2.1.7-cuda11.2.2-ubuntu20.04
command: ["/bin/sh", "-c"]
args:
- while true; do /usr/bin/dcgmproftester11 --no-dcgm-validation -t 1004 -d 300; sleep 30; done
resources:
limits:
nvidia.com/gpu: 1
securityContext:
capabilities:
add: ["SYS_ADMIN"]
EOF
檢查:
結果:
您可以看到 dcgmproftester pod 正在運行,隨後是 Grafana 儀表板上顯示的指標。 GPU 利用率 (GrActive) 達到了 98% 的峰值。您可能還會發現其他有趣的指標,例如功率或 GPU 內存。
恭喜!在短短的時間裡,我們設定了一個基於 GPU 驅動的 RKE2
/K3S
的 Kubernetes 集群。
總結¶
在本教程裡我們展示了 Rancher RKE2/K3S 和 NVIDIA GPU Operator 相關安裝與設定的步驟。在安裝結束後,我們通過在 pod 中運行 Vector 運算來測試與驗證了 GPU 的訪問。
參考: