大数跨境
0
0

用 HAMi 切分昇腾 910B 算力

用 HAMi 切分昇腾 910B 算力 k8s技术圈
2025-10-18
0

一分钟了解 HAMi项目

  1. HAMi是云原生计算基金会(CNCF)的SandBox项目,它是一个面向 Kubernetes 的异构设备管理中间件,可以管理不同类型的异构设备(如 GPU、NPU、MLU、DCU 等),实现异构AI设备在多个任务间的共享能力。
  2. HAMi 由以下组件组成:
  • HAMi MutatingWebhook
  • HAMi scheduler-extender
  • 设备插件 (HAMi-device-plugin)
  • 容器内资源控制 (HAMi-Core)
  1. HAMi核心功能 - 设备共享
  • 通过设置核心使用率(百分比),进行设备的部分分配
  • 通过设置显存(单位:MB),进行设备的部分分配
  • 对流式多处理器进行硬限制
  • 无需对现有程序进行任何修改
  • 支持动态MIG切片能力,样例
  1. HAMi支持的设备视图如下表所示

昇腾910B 中使用 vNPU

1. 本地集群环境

  • Kubernetes 集群版本 >=1.25.10
  • Ascend NPU Driver  25.2.0
  • ascend-docker-runtime v1.2.6-0

2. 安装 HAMi 相关组件


helm repo add hami-charts https://project-hami.github.io/HAMi/

helm install -n kube-system hami hami-charts/hami --set devices.ascend.enabled=true

kubectl apply -f https://raw.githubusercontent.com/Project-HAMi/ascend-device-plugin/refs/heads/main/ascend-device-plugin.yaml

HAMi 默认hami-device-plugin在没有 NVIDIA 显卡的情况下可以不用运行,如果集群只有昇腾卡则仅运行 hami-ascend-device-plugin 即可

3. vNPU切分模板

简单来说目前 HAMi 的 vNPU 实现还是依靠昇腾芯片的算力切分来实现的,具体芯片能切分成多少个小核心是固化在模板当中,可以通过下述命令来看

npu-smi info -t template-info

重要字段字段的解释:

  • name: 模板名称,目前支持如下算力模板名称:vir02vir04vir08vir16
  • AICORE: AICORE分配个数
  • MemoryGB: 内存(单位:GB)
  • AICPU: AICPU个数

HAMi 在向 Kubernetes注册节点 vNPU设备信息依靠配置文件hami-scheduler-device来确定昇腾芯片的切分模板,如下

也就是说,按照910B2 当前的算力切分模板,目前一张卡64G显存的910B2 可以切分成 4 张 vir06_1c_16g 或2张vir12_3c_32g核心的vNPU

4. 创建 vNPU实例

创建一个16G 显存的 vNPU 实例

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ascend-pod
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ascend-pod
  template:
    metadata:
      labels:
        app: ascend-pod
    spec:
      containers:
        - name: 测试
          image: registry.cn-hangzhou.aliyuncs.com/xiaoshiai/llama-factory-ascend:v0.9.3
          command: ["bash""-c""sleep 86400"]
          resources:
            limits:
              huawei.com/Ascend910B2: "1"
              huawei.com/Ascend910B2-memory: "16384"
            requests:
              huawei.com/Ascend910B2: "1"
              huawei.com/Ascend910B2-memory: "16384"

创建成功后,进入容器输入npu-smi info查询 vNPU 信息,如下

5. 验证 vNPU

llamafactory-cli运行一个 LLM 模型推理实例看看效果

USE_MODELSCOPE_HUB=1 llamafactory-cli chat  --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct

效果符合预期

6. 验证调度

hami-ascend-device-plugin向 Kubernetes 节点注册了 32 个 vNPU 核心(按照 16G显存切分 最大核心)

那直接将上面资源扩容到 32 个实例看下

kubectl scale deploy ascend-pod --replicas=32

可以看到 32pod 均已分配,可以用查询命令来看 vNPU 的分配情况

npu-smi info -t info-vnpu -i 1 -c 0

结束语

以上就是在昇腾910B上使用HAMi实现vNPU与调度 的完整过程。从安装组件、加载设备插件、模板切分到验证推理与调度,HAMi 展示了其在异构算力资源精细化管理上的强大能力。


【声明】内容源于网络
0
0
k8s技术圈
专注容器、专注 kubernetes 技术......
内容 1681
粉丝 0
k8s技术圈 专注容器、专注 kubernetes 技术......
总阅读705
粉丝0
内容1.7k