从云原生走向 AI 原生:一套面向未来的架构方法论 → 阅读《AI 原生基础设施》

常见问题

已发行

安装与部署

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

如何在离线环境部署?

  1. 提前拉取 HAMi 镜像并导入到离线仓库
  2. 使用 helm template 生成 YAML 清单
  3. 在离线环境中 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分散负载,单节点故障影响小
GPUaaSbinpack最大化 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。

如何在同一集群使用多种设备?

  1. 为不同设备节点打标签
  2. 通过 hami.io/gpu-type 注解指定设备类型
kubectl label nodes node-nvidia accelerator=nvidia
kubectl label nodes node-ascend accelerator=ascend

国产设备需要注意什么?

  • 确保驱动和容器运行时已正确安装
  • 不同设备的资源名可能不同(如 huawei.com/Ascend910B3 vs nvidia.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 故障:

  1. 设备插件检测到 GPU 不健康
  2. 自动将故障 GPU 从资源池中移除
  3. 已调度到故障 GPU 的 Pod 会被标记为异常
  4. 修复硬件后,设备插件自动重新注册

升级与迁移

如何升级 HAMi 版本?

helm repo update
helm upgrade hami hami-charts/hami -n hami-system -f values.yaml

升级期间正在运行的 Pod 不受影响。

从原生 K8s GPU 调度迁移到 HAMi?

  1. 卸载 NVIDIA 官方设备插件
  2. 安装 HAMi Helm Chart
  3. 将 Pod 的 nvidia.com/gpu 改为 nvidia.com/gpu + nvidia.com/gpumem
  4. 逐步迁移,两种方式可以暂时共存

其他

HAMi 与 K8s DRA 的关系?

DRA(Dynamic Resource Allocation)是 Kubernetes 1.26+ 引入的新设备管理机制。HAMi 目前使用 Scheduler Extender 模式,同时提供了可选的 DRA 支持(hami-dra 子 Chart)。两者可以互补。

是否支持 Windows 容器?

目前不支持。HAMi 的设备插件依赖 Linux 特定的设备路径和运行时。

如何参与社区贡献?

创建于 2026/06/04 更新于 2026/06/04 1541 字 阅读约 4 分钟