如何从零跑通 HAMi GPU 共享调度:K8s 安装配置实战指南
【免费下载链接】HAMiHeterogeneous GPU Sharing on Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ha/HAMi
HAMi(异构 AI 计算虚拟化中间件)解决 K8s 集群 GPU 无法共享、整卡占用的浪费问题。本文带你把 HAMi GPU 共享调度跑起来:环境自检、最小安装、运行时配置、验证闭环。
环境自检清单(装之前先排雷)
HAMi 的 GPU 虚拟化依赖容器运行时把设备文件注入容器,所以驱动和运行时工具链是地基。下面这张表我一般会先逐条确认,全部通过再往下走:
| 依赖项 | 最低版本 | 检查命令 | 预期输出 |
|---|---|---|---|
| NVIDIA 驱动 | >= 440 | nvidia-smi | Driver Version 不低于 440 |
| nvidia-container-runtime | > 2.0 | nvidia-ctk --version | 版本号 2.x 且可正常执行 |
| Kubernetes | >= 1.23 | kubectl version | Server Version v1.23+ |
| Helm(K8s 的包管理器) | > 3.0 | helm version | v3.x |
| glibc | >= 2.17 | ldd --version | 2.17 及以上 |
| Linux 内核 | >= 3.10 | uname -r | 3.10 及以上 |
任一不满足,后续步骤全部无效。
3 条命令跑通最小安装
先加 HAMi 的 chart 仓库(chart 就是一套打包好的部署清单):
helm repo add hami-charts https://project-hami.github.io/HAMi/这一步只是登记仓库地址,不会改动集群任何内容。
接着一条命令装完所有组件:
helm install hami hami-charts/hami -n kube-systemHAMi 会同时拉起两块核心组件:接管调度的 vGPU 调度器(通过 webhook 拦截 Pod 创建请求来改写设备分配),以及部署在每个 GPU 节点上的 Device Plugin(K8s 用来把硬件资源暴露给容器的插件机制,负责上报 GPU 容量)。
最后验证:
kubectl get pods -n kube-system看到hami-scheduler与hami-device-plugin均为Running,安装就算成功。
节点侧运行时配置(Docker 为例)
HAMi 的虚拟化需要容器运行时把 GPU 设备注入容器,所以每个 GPU 节点都要先装 NVIDIA Container Toolkit:
echo 'deb https://nvidia.github.io/libnvidia-container/stable $(lsb_release -cs) main' | sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit然后改 Docker 的 daemon.json,把默认运行时切到 nvidia,让容器里的进程默认就能摸到 GPU(改完systemctl restart docker生效):
{ "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } }如果你的节点跑的是 containerd,用nvidia-ctk runtime configure --runtime containerd生成配置并重启 containerd 即可,效果相同,不再展开。
打标节点 → 提交测试 Pod → 看调度结果
闭环验证分三步。先给节点打标,让调度器识别出 GPU 节点——这里有个小坑:漏了这一步 Pod 会一直 Pending 且不报明确原因:
kubectl label nodes <节点名> gpu=on再提交一个只占单卡 50% 显存的测试 Pod(gpumem-percentage就是共享的精髓,两个 Pod 可以塞进同一张卡):
apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: containers: - name: ubuntu-container image: ubuntu:22.04 command: ["bash", "-c", "sleep 86400"] resources: limits: nvidia.com/gpu: 1 nvidia.com/gpumem-percentage: 50 nvidia.com/gpucores: 30kubectl apply -f gpu-pod.yaml kubectl describe pod gpu-podPod 进入 Running 后,看下面这张对比图理解调度结果:没有 HAMi 时两个用户各占 2 张整卡、利用率 50%;有了 HAMi,两个负载被打包进 2 张卡且互相隔离,利用率直接拉满。
日常运维:升级回滚卸载
| 场景 | 操作 |
|---|---|
| 升级 | 刷新仓库后用 upgrade 覆盖部署,Pod 滚动重建:helm repo update && helm upgrade hami hami-charts/hami -n kube-system |
| 回滚 | 一条命令退回上一个 release 版本:helm rollback hami -n kube-system |
| 卸载 | 清掉调度器、Device Plugin 与监控资源:helm uninstall hami -n kube-system |
HAMi GPU 共享调度到此已跑通,更多共享策略(显存/算力配比、MIG、多厂商异构设备)的配置项见官方仓库 README 与 docs 目录。
【免费下载链接】HAMiHeterogeneous GPU Sharing on Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ha/HAMi
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考