NVIDIA GPU 上的 HAMi

当 NVIDIA 工作负载需要 HAMi 调度、整卡 GPU 分配、内存或计算共享,或由 HAMi 管理的动态 MIG 时,请使用此场景。如果需要不使用 HAMi 的直接 NVIDIA GPU 分配,请改用 NVIDIA GPU 文档

在创建工作负载之前

请确认:

  • 已安装 Alauda Build of HAMi,并且已启用 启用 NVIDIA
  • 目标节点已通过 HAMi NVIDIA 节点标签进行选择,通常为 gpu=on
  • HAMi 是该节点池中物理 GPU 的唯一 Device Plugin 所有者;
  • 节点报告了已安装包提供的 HAMi NVIDIA 资源键。

运行以下检查:

kubectl get ds -A -o wide \
  | grep -E 'hami-device-plugin|nvidia-device-plugin'
kubectl get node <node-name> \
  -o jsonpath='{.status.allocatable}'

目标节点必须报告 nvidia.com/gpualloc,以及工作负载所需的可选内存或计算键。如果同一节点还通过另一个 NVIDIA Device Plugin 暴露了直接分配资源,请先解决 Device Plugin 所有权冲突,然后再继续。

了解资源请求

下面的示例使用 nvidia.com/gpuallocnvidia.com/gpucoresnvidia.com/gpumem。有关它们的含义、单位以及基于百分比的备用内存键,请参见 资源键。不要在同一个容器中同时使用绝对值和基于百分比的内存键。

运行共享 GPU 工作负载

下面的 Pod 清单请求以 1 个物理 GPU 作为分配基础、4096 MiB 的 GPU 内存以及 50% 的计算能力。请将镜像替换为包含 nvidia-smi 和您的测试应用程序的 CUDA 镜像。

apiVersion: v1
kind: Pod
metadata:
  name: hami-nvidia-share
spec:
  schedulerName: hami-scheduler
  restartPolicy: Never
  containers:
    - name: cuda-workload
      image: <your-cuda-image>
      command: ["/bin/sh", "-c"]
      args:
        - |
          env | grep -E 'CUDA_DEVICE_MEMORY_LIMIT|CUDA_DEVICE_SM_LIMIT'
          grep -F libvgpu.so /etc/ld.so.preload
          nvidia-smi
          sleep 3600
      resources:
        requests:
          nvidia.com/gpualloc: "1"
          nvidia.com/gpucores: "50"
          nvidia.com/gpumem: "4096"
        limits:
          nvidia.com/gpualloc: "1"
          nvidia.com/gpucores: "50"
          nvidia.com/gpumem: "4096"

创建并检查 Pod:

kubectl apply -f hami-nvidia-share.yaml
kubectl get pod hami-nvidia-share -o wide
kubectl get pod hami-nvidia-share \
  -o go-template='scheduler={{ .spec.schedulerName }}{{ "\n" }}allocation={{ index .metadata.annotations "hami.io/vgpu-devices-allocated" }}{{ "\n" }}'
kubectl exec hami-nvidia-share -- /bin/sh -c '
  test "$CUDA_DEVICE_MEMORY_LIMIT_0" = 4096m &&
  test "$CUDA_DEVICE_SM_LIMIT" = 50 &&
  grep -F libvgpu.so /etc/ld.so.preload &&
  nvidia-smi
'

结果解释如下:

  • scheduler=hami-scheduler 表示该工作负载使用了 HAMi 调度器。
  • 非空的 hami.io/vgpu-devices-allocated 注解表示 HAMi 已为容器分配了物理 GPU 和共享配额。
  • CUDA_DEVICE_MEMORY_LIMIT_0=4096mCUDA_DEVICE_SM_LIMIT=50 以及 libvgpu.so 预加载条目表示已注入 HAMi-Core 共享运行时。
  • nvidia-smi 表示基本设备可见性,但它本身并不能证明强制执行生效。请运行 CUDA 内存分配或计算工作负载,以进行端到端配额验证。

如果仅请求 nvidia.com/gpualloc,HAMi 会通过相同的 HAMi 管理路径分配整块 GPU。对于由 HAMi 管理的动态 MIG,请继续阅读 配置动态 MIG

下一步