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

异构设备支持

已发行

AI 基础设施不会永远只有 NVIDIA。HAMi 通过统一设备抽象层,将多种异构加速器纳入 Kubernetes 的统一调度与管理。

为什么需要统一资源层?

异构 AI 集群面临的核心挑战:

  • 各厂商独立的 Device Plugin:每个厂商有自己的资源模型和调度语义
  • 缺乏统一调度视图:无法在多厂商集群中实现一致的调度策略
  • 运维复杂度高:不同设备需要不同的管理工具和运维流程
  • 迁移成本大:从 NVIDIA 迁移到其他加速器需要大量适配工作

HAMi 通过可插拔的设备抽象层,为多厂商异构加速器提供统一的调度与资源分配体验:一套流程、多厂商支持

支持的设备一览

根据 HAMi 官方最新文档,当前支持 11 类设备,其中 Teco DPU 仍处于适配验证阶段。

厂商设备类型资源名示例内存隔离核心隔离多卡状态
NVIDIAGPUnvidia.com/gpu生产可用
华为 AscendNPUhuawei.com/Ascend910B3生产可用
寒武纪MLUcambricon.com/vmlu生产可用
海光DCUhygon.com/dcunum生产可用
天数智芯GPUiluvatar.ai/BI-V100-vgpu生产可用
摩尔线程GPUmthreads.com/vgpu生产可用
沐曦GPUmetax-tech.com/gpu生产可用
燧原GCUenflame.com/gcu生产可用
昆仑芯XPUkunlunxin.com/vxpu生产可用
瀚博半导体GPUvastaitech.com/va生产可用
TecoDPU待官方公布进行中进行中适配中

说明:不同厂商的资源 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: 2000

VNPU 软切分

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 开关
IluvatarGPUiluvatar.ai/BI-V100-vgpuiluvatar.ai/BI-V100.vMemdevicePlugin.iluvatar.enabled
MthreadsGPUmthreads.com/vgpumthreads.com/sgpu-memorydevicePlugin.mthreads.enabled
MetaXGPUmetax-tech.com/gpudevicePlugin.metax.enabled
燧原GCUenflame.com/gcudevicePlugin.enflame.enabled
昆仑芯XPUkunlunxin.com/vxpukunlunxin.com/vxpu-memorydevicePlugin.kunlun.enabled
Vast.aiGPUvastaitech.com/vadevicePlugin.vastai.enabled
TecoDPU待官方公布适配中

这些设备同样复用 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 的设备抽象层采用插件式设计,新增设备后端只需:

  1. 实现 Devices 接口
  2. 在调度器配置中注册初始化函数
  3. 编写对应的设备插件
// 设备接口(需实现的方法)
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
  • 异构混合部署:同一集群多种设备,统一调度
  • 可扩展架构:新增设备只需实现统一接口

参考资料

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