异构设备支持
已发行
AI 基础设施不会永远只有 NVIDIA。HAMi 通过统一设备抽象层,将多种异构加速器纳入 Kubernetes 的统一调度与管理。
为什么需要统一资源层?
异构 AI 集群面临的核心挑战:
- 各厂商独立的 Device Plugin:每个厂商有自己的资源模型和调度语义
- 缺乏统一调度视图:无法在多厂商集群中实现一致的调度策略
- 运维复杂度高:不同设备需要不同的管理工具和运维流程
- 迁移成本大:从 NVIDIA 迁移到其他加速器需要大量适配工作
HAMi 通过可插拔的设备抽象层,为多厂商异构加速器提供统一的调度与资源分配体验:一套流程、多厂商支持。
支持的设备一览
根据 HAMi 官方最新文档,当前支持 11 类设备,其中 Teco DPU 仍处于适配验证阶段。
| 厂商 | 设备类型 | 资源名示例 | 内存隔离 | 核心隔离 | 多卡 | 状态 |
|---|---|---|---|---|---|---|
| NVIDIA | GPU | nvidia.com/gpu | ✅ | ✅ | ✅ | 生产可用 |
| 华为 Ascend | NPU | huawei.com/Ascend910B3 | ✅ | ✅ | — | 生产可用 |
| 寒武纪 | MLU | cambricon.com/vmlu | ✅ | ✅ | — | 生产可用 |
| 海光 | DCU | hygon.com/dcunum | ✅ | ✅ | — | 生产可用 |
| 天数智芯 | GPU | iluvatar.ai/BI-V100-vgpu | ✅ | ✅ | — | 生产可用 |
| 摩尔线程 | GPU | mthreads.com/vgpu | ✅ | ✅ | — | 生产可用 |
| 沐曦 | GPU | metax-tech.com/gpu | ✅ | ✅ | — | 生产可用 |
| 燧原 | GCU | enflame.com/gcu | ✅ | ✅ | — | 生产可用 |
| 昆仑芯 | XPU | kunlunxin.com/vxpu | ✅ | ✅ | — | 生产可用 |
| 瀚博半导体 | GPU | vastaitech.com/va | ✅ | ✅ | — | 生产可用 |
| Teco | DPU | 待官方公布 | 进行中 | 进行中 | — | 适配中 |
说明:不同厂商的资源 key 并不统一,部分设备还会把型号编码直接放进资源名中,因此生产环境应以对应厂商示例 YAML 为准。
NVIDIA GPU 支持
NVIDIA GPU 是 HAMi 支持最完整的设备后端,功能覆盖所有调度和隔离能力。
配置
# values.yaml
devicePlugin:
nvidia:
enabled: true
splitCount: 10
memory:
scaling: 1.0
migStrategy: "none"使用示例
apiVersion: v1
kind: Pod
metadata:
name: nvidia-inference
spec:
containers:
- name: serving
image: vllm:latest
resources:
limits:
nvidia.com/gpu: 3
nvidia.com/gpumem: 4000特殊能力
- MIG:支持 single/mixed 模式
- 拓扑感知调度:NVLink/NVSwitch 拓扑优化
- CDI:支持 Container Device Interface 规范
- 完整监控:通过 NVML 采集详细指标
华为昇腾 NPU 支持
华为 Ascend NPU 是国产 AI 加速器的重要选项,HAMi 提供完整的调度和 VNPU 软切分支持。
配置
# values.yaml
devicePlugin:
ascend:
enabled: true
vnpu:
enabled: true
coreResourceName: "huawei.com/Ascend910B3-core"使用示例
apiVersion: v1
kind: Pod
metadata:
name: ascend-inference
spec:
containers:
- name: serving
image: ascend-inference:latest
resources:
limits:
huawei.com/Ascend910B3: 1
huawei.com/Ascend910B3-memory: 2000VNPU 软切分
Ascend NPU 支持基于 libvnpu.so 的软切分,实现显存与算力的细粒度共享:
- 显存配额(
NPU_MEM_QUOTA)环境变量注入 - 算力配额(
NPU_PRIORITY)环境变量注入 - 通过 limiter 进程实现资源限制
- 与 HAMi 调度器无缝集成
支持的芯片型号
- Ascend 910B、910B3、310P 等
寒武纪 MLU 支持
配置
devicePlugin:
cambricon:
enabled: true使用示例
apiVersion: v1
kind: Pod
metadata:
name: mlu-inference
spec:
containers:
- name: serving
image: cambricon-inference:latest
resources:
limits:
cambricon.com/vmlu: 1
cambricon.com/mlu370.smlu.vmemory: 20
cambricon.com/mlu370.smlu.vcore: 10海光 DCU 支持
配置
devicePlugin:
hygon:
enabled: true使用示例
apiVersion: v1
kind: Pod
metadata:
name: dcu-inference
spec:
containers:
- name: serving
image: hygon-inference:latest
resources:
limits:
hygon.com/dcunum: 1
hygon.com/dcucores: 60
hygon.com/dcumem: 2000其他已支持设备
除 NVIDIA、Ascend、MLU、DCU 外,HAMi 还支持以下设备后端:
| 厂商 | 设备类型 | 资源名示例 | Helm 开关 |
|---|---|---|---|
| Iluvatar | GPU | iluvatar.ai/BI-V100-vgpu、iluvatar.ai/BI-V100.vMem | devicePlugin.iluvatar.enabled |
| Mthreads | GPU | mthreads.com/vgpu、mthreads.com/sgpu-memory | devicePlugin.mthreads.enabled |
| MetaX | GPU | metax-tech.com/gpu | devicePlugin.metax.enabled |
| 燧原 | GCU | enflame.com/gcu | devicePlugin.enflame.enabled |
| 昆仑芯 | XPU | kunlunxin.com/vxpu、kunlunxin.com/vxpu-memory | devicePlugin.kunlun.enabled |
| Vast.ai | GPU | vastaitech.com/va | devicePlugin.vastai.enabled |
| Teco | DPU | 待官方公布 | 适配中 |
这些设备同样复用 HAMi 的统一调度链路,只是具体资源 key、注解和值域由厂商插件定义。
异构混合部署
在同一集群中使用多种厂商的设备:
# NVIDIA 节点
kubectl label nodes node-nvidia-01 accelerator=nvidia
# Ascend 节点
kubectl label nodes node-ascend-01 accelerator=ascend
# MLU 节点
kubectl label nodes node-mlu-01 accelerator=cambricon设备类型过滤
通过注解指定 Pod 使用的设备类型:
# 使用 NVIDIA GPU
metadata:
annotations:
hami.io/gpu-type: "nvidia"
---
# 使用昇腾 NPU
metadata:
annotations:
hami.io/gpu-type: "Ascend910B3"
---
# 使用寒武纪 MLU
metadata:
annotations:
hami.io/gpu-type: "cambricon"统一监控
不同厂商的设备指标通过 HAMi Monitor 统一暴露:
# 查看所有设备的资源使用
kubectl get nodes -o wide
# 查看特定节点的设备注解
kubectl get node <node-name> -o jsonpath='{.metadata.annotations}' | jq .新增设备后端
HAMi 的设备抽象层采用插件式设计,新增设备后端只需:
- 实现
Devices接口 - 在调度器配置中注册初始化函数
- 编写对应的设备插件
// 设备接口(需实现的方法)
type Devices interface {
CommonWord() string
GetResourceNames() ResourceNames
GetNodeDevices(node) ([]*DeviceInfo, error)
Fit(devices, request, pod, nodeInfo, allocated) (bool, map[string]ContainerDevices, string)
ScoreNode(node, podDevices, previous, policy) float32
// ...
}小结
本章介绍了 HAMi 的异构设备支持:
- 统一设备抽象层:一套调度流程,多厂商支持
- 11 类设备支持:NVIDIA、Ascend、Cambricon、Hygon、Iluvatar、Mthreads、MetaX、Enflame、Kunlunxin、Vast.ai,以及适配中的 Teco DPU
- 异构混合部署:同一集群多种设备,统一调度
- 可扩展架构:新增设备只需实现统一接口