九月下旬 HAMI 2.4.0 版本正式发布,新版本在异构、监控、设备管理等方面带来了更多的新能力,同时持续在易用性上做了提升。
背景
HAMi,全称 Heterogeneous AI Computing Virtualization Middleware,是由第四范式和 DaoCloud 联合发起的高效异构 AI 设备管理工具。目前,它已成为 CNCF(云原生计算基金会) 的 sandbox 项目,展示了其在云原生生态中的发展潜力。
HAMi 支持多种异构设备的管理和调度,包括昇腾、寒武纪、天数、海光等,旨在为用户提供统一的管理、调度和监控解决方案,提升 AI 芯片的使用效率。通过设备的共享与资源隔离,以及先进的设备虚拟化功能,HAMi 能够有效地优化资源利用。结合优先级调度、Spread 和 Binpack 等高级调度策略,HAMi 进一步提升了 AI 算力资源的利用率,成为异构 AI 芯片场景下的重要工具。
为了更好地了解大家的使用场景、实际操作中的问题与不足,以及对未来功能的期待和社区发展的建议,HAMi maintainer 团队特别发起了一次问卷调查,诚挚邀请大家积极参与,分享宝贵反馈,助力 HAMi 的持续进步与成长。
参与问卷调查:
新特性总览
正式支持华为 Ascend 910b:华为的 Ascend 910b NPU 设备已被完全支持,拓宽了 HAMi 在异构设备管理上的广度,使其在 NPU 虚拟化场景中更加灵活和高效。
Ascend NPU 自定义配置支持:用户现在可以根据需要自定义 Ascend NPU 的虚拟化配置文件,提升了灵活性。
按 UUID 或索引过滤设备:在节点注册时,可以根据 UUID 或索引进行设备过滤,提高了资源调度的精细化管理。
新增调度事件信息:新增了更详细的调度事件信息,方便用户在发生调度异常时快速定位问题并排除故障。
新增 HAMi UI 界面:可视化呈现设备状态与使用情况,实时监控一目了然,让调度与管理更加直观高效。
新特性简介
正式支持华为 Ascend 910b
新版本将正式支持华为 Ascend 910b 以及 Ascend310P 设备,提供了动态 NPU 虚拟化能力,可通过用户的需求,动态的切分 VNPU 设备并且进行挂载,使用方式大致如下:
Ascend910B
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
containers:
- name: ubuntu-container
image: ascendhub.huawei.com/public-ascendhub/ascend-mindspore:23.0.RC3-centos7
command: ["bash", "-c", "sleep 86400"]
resources:
limits:
huawei.com/Ascend910B: 1 # requesting 1 Ascend
huawei.com/Ascend910B-memory: 2000 # requesting 2000m device memor
Ascend310P
apiVersion: v1
kind: Pod
metadata:
name: gpu-pod
spec:
containers:
- name: ubuntu-container
image: ascendhub.huawei.com/public-ascendhub/ascend-mindspore:23.0.RC3-centos7
command: ["bash", "-c", "sleep 86400"]
resources:
limits:
huawei.com/Ascend310P: 1 # requesting 1 Ascend
huawei.com/Ascend310P-memory: 1024 # requesting 1024m device memory
目前 Ascend 910b 仅支持 1/4 和 1/2 两种分片策略。Ascend 310p 支持 3 种分片策略,1/7,2/7,4/7。pod 的显存请求将自动与最接近的分片策略保持一致。
模板详情请参考昇腾官方文档:https://www.hiascend.com/document/detail/zh/computepoweralloca/30rc2/cpaug/cpaug_0005.html
按 UUID 或索引过滤设备
在故障隔离的场景中,有时我们需要将某一个出现故障的 GPU 设备进行隔离,不让任务调度到故障设备上,而在新版本中,HAMI 能够支持使用 UUID 或者 GPU 索引的方式去过滤注册到 K8s 中的 GPU 设备,从而达到不允许任务调度到故障设备上的目的。其使用方式如下:
修改 HAMI 的 Configmap
{
"nodeconfig": [
{
"name": "m5-cloudinfra-online02", //节点名称
"devicememoryscaling": 1.8,
"devicesplitcount": 10,
"migstrategy":"none",
"filterdevices": {
"uuid": ["GPU-54ea13f7-27d8-c1e4-4b86-9411e1283dff"],
"index": []
}
}
]
}
这个案例中,成功修改 Configmap 后,需要手动重启 Hami-device-plugin 组件使其生效,k8s 不会再将 GPU 应用调度到此 GPU 设备上。
新增调度事件信息
在之前的版本中 ,如果 Pod 调度失败,那么将会很难排查,因为 HAMI 没有注册调度相关的事件信息,这为排障带来了很大阻碍。在新版本中,HAMI 对调度事件这部分进行了优化,新增了更多的调度事件信息,依赖这些信息能够更加方便的进行排障,示例如下:
调度成功:
(base) ➜ scheduler git:(master) ✗ kubectl describe po nginx-deployment-7bd89f854c-5p2xv
Name: nginx-deployment-7bd89f854c-5p2xv
Namespace: default
Priority: 0
Service Account: default
...
...
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 6s hami-scheduler Successfully assigned default/nginx-deployment-67f97f4d9d-wtzzd to controller-node-1
Normal FilteringSucceed 7s hami-scheduler Successfully filtered to following nodes: [controller-node-1] for default/nginx-deployment-67f97f4d9d-wtzzd
Normal BindingSucceed 7s hami-scheduler Successfully binding node [controller-node-1] to default/nginx-deployment-67f97f4d9d-wtzzd
Normal Pulling 6s kubelet Pulling image "docker.m.daocloud.io/nginx:latest"
Normal Pulled 5s kubelet Successfully pulled image "docker.m.daocloud.io/nginx:latest" in 1.075344559s (1.075360343s including waiting)
Normal Created 5s kubelet Created container nginx
Normal Started 5s kubelet Started container nginx
调度失败:
(base) ➜ scheduler git:(master) ✗ kubectl describe po nginx-deployment-8dc9c4774-txbzf
Name: nginx-deployment-8dc9c4774-txbzf
Namespace: default
Priority: 0
...
...
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 8s hami-scheduler 0/2 nodes are available: 1 node(s) had untolerated taint {node.kubernetes.io/unreachable: }. preemption: 0/2 nodes are available: 1 No preemption victims found for incoming pod, 1 Preemption is not helpful for scheduling.
Warning FilteringFailed 9s hami-scheduler no available node, all node scores do not meet
新增 HAMi UI 界面
在新版本中,HAMI 同步上线了 Web UI 组件,为用户提供了资源管理、节点管理、显卡管理以及任务管理等视图,用户能够在 UI 中清晰地了解集群中 GPU 资源使用的情况,使团队能够更有效监控资源消耗。
更多详情请参考:https://github.com/Project-HAMi/HAMi-WebUI
DaoCloud 贡献
在 HAMI 2.4.0 版本发布的周期中,DaoCloud 在其中也参与了不少研发与 Bug 修复工作,以下是部分 PR:
[1] 新增调度事件信息
https://github.com/Project-HAMi/HAMi/pull/417
[2] 按 UUID 或索引过滤设备
https://github.com/Project-HAMi/HAMi/pull/495
https://github.com/Project-HAMi/HAMi/issues/491
[3] Ascend NPU 自定义配置支持
https://github.com/Project-HAMi/HAMi/pull/510
[4] HAMI 基础镜像优化
https://github.com/Project-HAMi/HAMi/pull/508
[5] HAMI CI 相关优化
https://github.com/Project-HAMi/HAMi/pull/501
https://github.com/Project-HAMi/HAMi/pull/473
https://github.com/Project-HAMi/HAMi/pull/499
https://github.com/Project-HAMi/HAMi/pull/520
[6] 新增容器维度的 GPU 利用率指标
https://github.com/Project-HAMi/HAMi/pull/258
https://github.com/Project-HAMi/HAMi-core/pull/4
https://github.com/Project-HAMi/HAMi/pull/280
[7] 优化调度逻辑
https://github.com/Project-HAMi/HAMi/pull/451
https://github.com/Project-HAMi/HAMi/pull/336
[8] 修复多容器设备分配错误
https://github.com/Project-HAMi/HAMi/pull/217
本文作者
「DaoCloud 道客」云原生研发工程师
热门推荐
访问以下网址,或点击文末【阅读原文】立即体验
DaoCloud 公司简介
网址:www.daocloud.io
邮件:info@daocloud.io
电话:400 002 6898