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

