常见问题
已发行
安装与部署
HAMi 最低 Kubernetes 版本要求是什么?
Kubernetes >= 1.18。HAMi 通过标准的 Scheduler Extender 和 Device Plugin API 与 Kubernetes 集成,不需要修改 Kubernetes 源码。
是否需要卸载 NVIDIA 官方设备插件?
是的。 HAMi 使用自研设备插件,与 NVIDIA 官方设备插件不兼容。安装 HAMi 前需要先卸载 nvidia-device-plugin:
kubectl delete daemonset nvidia-device-plugin-daemonset -n kube-system如何验证安装是否成功?
# 检查所有组件状态
kubectl get pods -n hami-system
# 检查 GPU 节点是否注册设备
kubectl describe node <gpu-node> | grep hami
# 运行测试 Pod
kubectl run gpu-test --image=nvidia/cuda:12.0.0-base-ubuntu22.04 \
--restart=Never --command -- nvidia-smi \
--limits=nvidia.com/gpu=1,nvidia.com/gpumem=2000如何在离线环境部署?
- 提前拉取 HAMi 镜像并导入到离线仓库
- 使用
helm template生成 YAML 清单 - 在离线环境中
kubectl apply清单文件
# 生成清单
helm template hami hami-charts/hami -n hami-system -f values.yaml > hami.yaml
# 在离线环境应用
kubectl apply -f hami.yaml资源配置
nvidia.com/gpu 和 nvidia.com/gpumem 的含义?
nvidia.com/gpu:GPU 设备数量。值 N 表示使用 N 个 GPU 设备,每个设备分配nvidia.com/gpumem指定的显存nvidia.com/gpumem:显存大小,单位 MB。如4000表示 4GB
如何按百分比分配显存?
使用 nvidia.com/gpumem-percentage 替代 nvidia.com/gpumem:
resources:
limits:
nvidia.com/gpu: 1 # 使用 1 个 GPU
nvidia.com/gpumem-percentage: 40 # 该 GPU 的 40% 显存资源超卖如何配置?
在 Helm values.yaml 中设置超卖系数:
scheduler:
overcommit:
enabled: true
deviceMemoryScaling: 1.5 # 显存超卖 1.5 倍
deviceCoreScaling: 1.2 # 算力超卖 1.2 倍超卖增加资源争用风险,建议只在推理场景使用并配合监控。
一个 GPU 最多分配给多少个 Pod?
由 splitCount 配置决定:
devicePlugin:
nvidia:
splitCount: 10 # 最多 10 个 Pod 共享 1 张 GPU实际限制取决于 GPU 显存大小和每个 Pod 的显存请求。
调度策略
binpack 和 spread 如何选择?
| 场景 | 推荐策略 | 原因 |
|---|---|---|
| 成本优化 | binpack | 集中使用 GPU,减少空闲资源 |
| 高可用 | spread | 分散负载,单节点故障影响小 |
| GPUaaS | binpack | 最大化 GPU 密度 |
| 训练集群 | spread + topology | 分散 + 拓扑优化 |
拓扑感知策略需要什么条件?
- NVIDIA GPU
- 已安装 NVML 库
- 多卡节点有 NVLink/PCIe 拓扑信息
- 工作负载需要多卡协作(如分布式训练)
如何指定调度策略?
通过 Pod 注解:
metadata:
annotations:
hami.io/node-scheduler-policy: "binpack"
hami.io/gpu-scheduler-policy: "spread"或在 Helm values.yaml 中设置全局默认策略。
调度失败如何排查?
# 查看 Pod 事件
kubectl describe pod <pod-name>
# 查看调度器日志(v5 显示设备细节)
kubectl logs -n hami-system deployment/hami-scheduler | grep <pod-name>多厂商设备
支持哪些厂商的设备?
当前官方文档列出的设备包括 NVIDIA GPU、华为昇腾 NPU、寒武纪 MLU、海光 DCU、天数智芯 GPU、摩尔线程 GPU、沐曦 GPU、燧原 GCU、昆仑芯 XPU、瀚博半导体 GPU,以及适配中的 Teco DPU。
如何在同一集群使用多种设备?
- 为不同设备节点打标签
- 通过
hami.io/gpu-type注解指定设备类型
kubectl label nodes node-nvidia accelerator=nvidia
kubectl label nodes node-ascend accelerator=ascend国产设备需要注意什么?
- 确保驱动和容器运行时已正确安装
- 不同设备的资源名可能不同(如
huawei.com/Ascend910B3vsnvidia.com/gpu) - 部分设备的多卡支持可能尚未启用
- 参考各厂商的 HAMi 适配文档
性能与稳定性
GPU 共享对性能有影响吗?
有影响,但取决于场景:
- 推理场景影响通常很小(<10%),因为推理主要是显存占用,计算时间短
- 训练场景不建议共享,训练对算力和带宽要求高
- 关键因素:共享的 Pod 数量和算力/显存分配比例
如何评估性能影响?
# 1. 独占 GPU 运行基准测试
# 2. 共享 GPU 运行相同测试
# 3. 对比吞吐量和延迟
# 使用 nvidia-smi 监控 GPU 利用率
watch -n 1 nvidia-smi生产环境推荐配置?
- 调度器 2-3 副本 + 反亲和性
- 设备插件 DaemonSet
- Webhook 2 副本
- 启用 Prometheus 监控
- 配置资源限制和优先级
如何处理 GPU 故障?
HAMi 通过健康检查自动检测 GPU 故障:
- 设备插件检测到 GPU 不健康
- 自动将故障 GPU 从资源池中移除
- 已调度到故障 GPU 的 Pod 会被标记为异常
- 修复硬件后,设备插件自动重新注册
升级与迁移
如何升级 HAMi 版本?
helm repo update
helm upgrade hami hami-charts/hami -n hami-system -f values.yaml升级期间正在运行的 Pod 不受影响。
从原生 K8s GPU 调度迁移到 HAMi?
- 卸载 NVIDIA 官方设备插件
- 安装 HAMi Helm Chart
- 将 Pod 的
nvidia.com/gpu改为nvidia.com/gpu+nvidia.com/gpumem - 逐步迁移,两种方式可以暂时共存
其他
HAMi 与 K8s DRA 的关系?
DRA(Dynamic Resource Allocation)是 Kubernetes 1.26+ 引入的新设备管理机制。HAMi 目前使用 Scheduler Extender 模式,同时提供了可选的 DRA 支持(hami-dra 子 Chart)。两者可以互补。
是否支持 Windows 容器?
目前不支持。HAMi 的设备插件依赖 Linux 特定的设备路径和运行时。