跳转到文档内容
版本:v2.8.0

验证 HAMi 部署与 vGPU 行为

部署 HAMi 之后,验证安装是否正常工作以及 vGPU 资源隔离是否符合预期至关重要。本指南将带你逐步完成验证流程,从检查原生 GPU 栈到确认容器内的 vGPU 行为。

适用范围与前提条件

本指南假设 HAMi 已经安装完成(例如,通过快速开始部分中的使用 Helm 部署 HAMi 指南)。

本文档的目标不是重复安装步骤,而是验证 HAMi 在真实的 Kubernetes 环境中是否正常工作,包括 GPU 访问和 vGPU 行为。

如果 HAMi 尚未安装,请先按照部署指南完成安装。

步骤 0:配置节点容器运行时(如果尚未配置)

HAMi 要求在所有 GPU 节点上安装 nvidia-container-toolkit,并将其设置为默认的低级别运行时。

1. 安装 nvidia-container-toolkit(以 Debian/Ubuntu 为例)

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list \
| sudo tee /etc/apt/sources.list.d/libnvidia-container.list
curl -s -L https://nvidia.github.io/libnvidia-container/gpgkey | sudo apt-key add -
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit

2. 配置运行时

  • 对于 containerd:编辑 /etc/containerd/config.toml,将默认运行时名称设置为 "nvidia",二进制文件名称设置为 "/usr/bin/nvidia-container-runtime"

    • 重启服务:

      sudo systemctl daemon-reload && sudo systemctl restart containerd
  • 对于 Docker:编辑 /etc/docker/daemon.json,设置 "default-runtime": "nvidia"

    • 重启服务:

      sudo systemctl daemon-reload && sudo systemctl restart docker

步骤 1:验证原生 GPU 栈(关键预检步骤)

在安装 HAMi 之前,必须证明 Kubernetes 能够原生访问 GPU。

此步骤独立于 HAMi 验证你的 GPU 栈。

1. 部署原生测试 Pod

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: cuda-test
spec:
restartPolicy: Never
containers:
- name: cuda
image: nvcr.io/nvidia/cuda:12.2.0-base-ubuntu22.04
command: ["nvidia-smi"]
resources:
limits:
nvidia.com/gpu: 1
EOF

预期结果:你应该能看到有效的 nvidia-smi 输出。如果失败,请勿继续操作。先修复 GPU 配置。

2. 验证执行结果

kubectl wait --for=condition=Succeeded pod/cuda-test --timeout=60s
kubectl logs cuda-test

注意:你必须看到标准的 nvidia-smi 输出。如果失败,请勿继续。

步骤 2:验证 HAMi 安装

确认基准验证通过后,确保 HAMi 已安装且其组件正常运行。

如果你已经部署了 HAMi,可以跳过安装命令,仅验证组件是否正常运行。

1. 为节点打标签

kubectl label nodes $(hostname) gpu=on --overwrite

2. 使用 Helm 部署

helm repo add hami-charts https://project-hami.github.io/HAMi/
helm install hami hami-charts/hami -n kube-system

3. 验证组件状态

kubectl get pods -n kube-system | grep hami

预期结果:hami-schedulervgpu-device-plugin Pod 均应处于 Running 状态。

步骤 3:启动并验证 vGPU 任务

让我们验证 HAMi 是否正确执行了分数级资源限制(vGPU)。

1. 提交 vGPU 演示任务

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
containers:
- name: ubuntu-container
image: ubuntu:18.04
command: ["bash", "-c", "sleep 86400"]
resources:
limits:
nvidia.com/gpu: 1
nvidia.com/gpumem: 10240
EOF

2. 验证容器内的资源控制

kubectl wait --for=condition=Ready pod/gpu-pod --timeout=60s
kubectl exec -it gpu-pod -- nvidia-smi

预期结果:你将看到 [HAMI-core Msg...] 初始化行,且 nvidia-smi 表格中 Total Memory 将精确显示为 10240MiB,证明 vGPU 隔离已生效。

故障排查顺序

如果遇到问题,请按以下顺序排查:

  1. 硬件/驱动:在主机上直接运行 nvidia-smi
  2. 容器运行时:确保在 K8s 之外 sudo ctr rundocker run 可以正常工作。
  3. 残留插件:移除冲突的插件:kubectl delete daemonset nvidia-device-plugin-daemonset -n kube-system --ignore-not-found
  4. 节点资源:验证 K8s 是否识别到 GPU:kubectl get nodes -o jsonpath='{.items[*].status.allocatable}' | grep -i nvidia
  5. 调度器层:检查 HAMi 日志:kubectl logs -n kube-system -l app=hami-scheduler

清理

kubectl delete pod cuda-test gpu-pod --ignore-not-found
CNCFHAMi 是 CNCF Sandbox 项目