HAMi v2.9.0 发布:昇腾用户态切分、DRA 正式可用与调度生态扩展
HAMi 社区正式发布 HAMi v2.9.0。这是一个在异构设备虚拟化深度、调度器生态扩展与 Kubernetes 原生标准落地层面具有里程碑意义的版本。
v2.9.0 引入了昇腾 910C HAMi-core 模式、HAMi-DRA 正式可用、项目发布以及 Volcano vGPU 升级至 v0.19 等重磅特性,同时在可观测性、安全性、稳定性等方面进行了系统性增强,共有 19 位新贡献者首次参与。
本文将对 v2.9.0 的主要更新进行详细说明。
核心特性与能力更新
本节介绍 HAMi v2.9.0 的核心特性与能力更新,涵盖异构设备虚拟化、DRA 标准接口、调度器生态和上游组件对齐等方面。
昇腾 910C HAMi-core 虚拟化模式
HAMi v2.9.0 为华为昇腾(Ascend)设备引入了 HAMi-core 模式,实现了用户态虚拟化拦截,无需修改业务代码即可获得显存与算力的细粒度共享能力。
HAMi-core 通过纯软件方式在用户态拦截和管控 ACL(Ascend Computing Language)调用,实现了显存 MB 级别、算力百分比级别的细粒度切分。同一张昇腾 910C 可以同时服务多个不同规格的推理或训练任务,无需修改业务代码,也无需特定硬件支持。
相比传统的 SR-IOV 硬件切分方案,HAMi-core 在切分粒度和灵活性上有质的飞跃:
| 维度 | 独占模式 | SR-IOV | HAMi-core(v2.9) |
|---|---|---|---|
| 显存切分 | 不可切分 | 按 VF 固定分配 | MB 级别精确控制 |
| 算力切分 | 不可切分 | 按 VF 比例分配 | 百分比级别灵活配置 |
| 切分数量 | 1 Pod/卡 | 通常 2-4 VF/卡 | 10+ Pod/卡 |
| 是否需要硬件支持 | 否 | 是 | 否 |
| 是否需要修改业务代码 | 否 | 否 | 否 |
例如,一张 64GB 显存的昇腾 910C,可以按如下方式同时分配给多个任务:
# 任务 1:大模型推理,32GB 显存 + 50% 算力
resources:
limits:
hami.io/vnpu-core: "50"
hami.io/vnpu-core-memory: "32768"
# 任务 2:模型微调,16GB 显存 + 30% 算力
resources:
limits:
hami.io/vnpu-core: "30"
hami.io/vnpu-core-memory: "16384"
# 任务 3:轻量推理,8GB 显存 + 20% 算力
resources:
limits:
hami.io/vnpu-core: "20"
hami.io/vnpu-core-memory: "8192"
核心能力包括:
- Ascend 910C 超节点支持:针对 SuperPod 环境实现了 module-pair 级别的资源分配,充分发挥超节点在分布式训练中的硬件优势
- vNPU-Core 虚拟化:新增
hami-vnpu-core资源类型,支持基于注解的节点过滤与多设备请求,实现更灵活的算力切分策略 - 用户态拦截:以不侵入业务容器的方式实现显存与算力的软切分,显著提升单卡承载任务数
用户在部署 HAMi 时,将 values 中 ascend.hamiVnpuCore 设置成 true 即可开启本特性。也可以在 ascend-device-plugin 的节点配置中开启。支持一个集群中某些节点开启,某些节点关闭。
需要注意的是,在 2.9 版本,用户 Pod 需要在注解中 显式地声明 huawei.com/vnpu-mode: 'hami-core' 才能使用本特性。未被声明的 Pod 仍然会使用上个版本的按照模版的 vNPU 切分方式,若无可用节点,则会导致任务 pending。
该特性已在招商银行生产环境中得到验证。招商银行基于 HAMi-vNPU-Core 软切分方案,实现了昇腾 910C 算力资源 100% 入池与大模型高性能通信,显著提升了国产算力资源利用率。
感谢华为云加拿大实验室和招商银行 @ashergaga 对本功能的贡献。
本版本同时更新了 HAMi-core 性能基准测试数据,详细的 benchmark 流程请参考项目文档。
HAMi-DRA 解决方案:轻量版 HAMi
HAMi v2.9.0 中,HAMi-DRA 正式达到可用状态,已升级至 v0.2.0。HAMi-DRA 是基于 Kubernetes Dynamic Resource Assignment(DRA)标准的独立实现项目,定位为"轻量版 HAMi"。
DRA 可以作为 HAMi 与其它调度器的标准连接方案,可以在 volcano、kai-scheduler 等自定义调度器上即插即用,不再需要进行代码层面的改动。
DRA 是 Kubernetes 社区正在推进的下一代设备资源声明与分配机制。HAMi-DRA 的核心理念是:
- 不改变用户习惯:继续使用 Device Plugin 语法,底层自动转换为 DRA 资源模型
- 内部消化复杂性:Webhook、Driver、生命周期管理全部由系统处理
- 通过社区协作推动演进:来自不同公司的贡献者在真实生产环境中验证方案
当前 HAMi-DRA 已实现面向 NVIDIA / Ascend / Enflame 三大平台的方案落地。通过原生 Kubernetes 能力简化调度链路,统一调度层屏蔽底层硬件差异,实现异构算力统一管理。
HAMi-DRA 项目地址:https://github.com/Project-HAMi/HAMi-DRA
Volcano vGPU 版本升级至 v0.19 并支持 CDI
HAMi v2.9.0 将关联的 Volcano vGPU Device Plugin 同步升级至 v0.19 版本,保持与 Volcano 上游的一致性。同时新增对 Container Device Interface(CDI)模式的支持。
CDI 支持带来的优势:
- 使用更标准的设备注入方式,降低设备管理与容器运行时之间的耦合度
- 提供更清晰的设备声明与生命周期管理
- 修复了 MIG 在 CDI 模式下的分配问题,进一步提升 NVIDIA GPU 的灵活切分能力
Volcano vGPU Device Plugin 项目地址:https://github.com/Project-HAMi/volcano-vgpu-device-plugin
新增 Vastai(瀚博半导体)设备支持
瀚博半导体(Vastai Technologies)是国内领先的通用 GPU 芯片设计企业。v2.9.0 新增对其设备的管理支持,提供两种分配模式:
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 整卡模式(Full-Card) | 每个 Pod 独占一整张 GPU | 大模型训练、性能敏感型推理 |
| Die 模式 | 按芯片 Die 切分,调度器感知 AIC 拓扑结构,减少跨 Die 通信开销 | 多任务共享、资源利用率优化 |
使用示例:
# 节点需要先打标签:kubectl label node <node-name> vastai=on
# values.yaml 中配置:
# vastai:
# enabled: true
# customresources:
# - vastaitech.com/va
# 整卡模式
resources:
limits:
vastaitech.com/va: "1"
# Die 模式(带设备选择注解)
# annotations:
# vastaitech.com/use-va: "0"
# vastaitech.com/nouse-va: "1"
Vastai 设备支持的加入,使 HAMi 已覆盖 NVIDIA、华为昇腾、寒武纪、海光 DCU、壁仞、燧原、沐曦、昆仑芯、AMD、Iluvatar、Enflame、AWS Neuron、瀚博半导体 等十余种异构算力设备,是目前 Kubernetes 生态中覆盖最广泛的异构设备虚拟化与调度项目之一。
可观测性与安全增强
可观测性增强
v2.9.0 在可观测性方面进行了多项改进:
- vGPUmonitor 新增
--metrics-bind-address参数,支持自定义指标暴露地址 - Helm Chart 中新增 Prometheus ServiceMonitor,覆盖调度器和设备插件
- Prometheus 指标与标签命名对齐社区最佳实践
- 新增设备类型标签(device type label)在指标中的支持
- 优化日志级别控制,新增相关单元测试
安全与稳定性改进
安全与稳定性方面的重要改进包括:
- Scheduler 路由新增
io.LimitReader防止 DoS 攻击(#554) - Go 语言升级至 1.26.2,修复已知安全问题
- NodeLock 优化为指数退避策略,提升大规模集群下的可扩展性
- 修复 Leader 选举中的空指针问题,增强高可用部署的稳定性
- 修复调度器评分中的除零错误
- 修复多容器 Pod(含 init 容器)的设备分配问题
- 修复 Linux 内核 6.17 在 NVIDIA 健康检查中的握手边界问题
- 修复全局镜像标签覆盖组件级镜像标签的问题
- 修复设备过滤不生效的问题
- 修复 Device Plugin 与 Scheduler 注解不一致的问题
- 修复 stale Deleted handshake 导致节点调度中断的问题
更多重要更新
- Webhook 资源配额检查:在 Pod 提交阶段校验 GPU 资源请求是否超出配额限制,避免调度失败后再回退
- HAMi-skills 调试工具:新增 k8s-debug-gpu-pod skill 和 vGPU metrics summarizer skill,辅助 GPU 问题排查与运维
- vLLM 兼容性修复:修复了 vLLM > 0.18 中使用 tensor parallelism 时的初始化错误
- local-deploy 支持