当前位置: 首页 > news >正文

HAMi 正式接入 Kubernetes DRA:下一代 GPU 资源模型实践指南


原文作者:意琦行
本文转载自:HAMi 正式接入 Kubernetes DRA:下一代 GPU 资源模型实践指南

HAMi 是目前 Kubernetes 上最活跃的开源 vGPU 方案,能够将一块物理 GPU 按显存和算力细粒度地切分为多个虚拟 GPU,供不同 Pod 共享。

本文聚焦 HAMi DRA 模式的部署与使用:安装 HAMi DRA 驱动后,分别用原生模式和兼容模式提交 Pod,验证 GPU 切分是否生效。


Kubernetes 在 1.34 中正式 GA 了 DRA(Dynamic Resource Allocation,动态资源分配)。DRA 的核心改进是让调度器参与资源分配,在 Pod 调度阶段就精确匹配设备属性,避免了 DevicePlugin “调度到节点后才发现资源不够” 的问题。

HAMi 最近的版本已经正式接入了 DRA,用户既可以使用原生 DRA 模式,也可以用 DevicePlugin 兼容模式无缝迁移。

什么是 HAMi

HAMi(异构 AI 计算虚拟化中间件)是一个用于管理 Kubernetes 集群中异构 AI 计算设备的开源平台。前身为 k8s-vGPU-scheduler,HAMi 可在多个容器和工作负载之间实现设备共享。

HAMi 是云原生计算基金会(CNCF)的 Sandbox 项目,并被收录于 CNCF 技术全景图和 CNAI 技术全景图。

核心特性

设备共享

  • 多设备支持:兼容多种异构 AI 计算设备(GPU、NPU 等)
  • 共享访问:多个容器可同时共享设备,提高资源利用率

内存管理

  • 硬限制:在容器内强制执行严格的内存限制,防止资源冲突
  • 动态分配:根据工作负载需求按需分配设备内存
  • 灵活单位:支持按 MB 或占总设备内存百分比的方式指定内存分配

设备规格

  • 类型选择:可请求特定类型的异构 AI 计算设备
  • UUID 定向:使用设备 UUID 精确指定特定设备

易用性

  • 对工作负载透明:容器内无需修改代码
  • 简单部署:使用 Helm 轻松安装和卸载,配置简单

开放治理

  • 社区驱动:由互联网、金融、制造业、云服务等多个领域的组织联合发起
  • 中立发展:作为开源项目由 CNCF 管理

HAMi 安装

前提条件:

  • K8s 1.34 及以上版本,同时开启 DRAConsumableCapacity Feature Gate
    • 1.34-1.35 DRAConsumableCapacity 默认未开启,需要手动配置
  • Container Runtime 必须开启 CDI
  • NVIDIA GPU 驱动 440 及以上版本

特别是第一条,DRAConsumableCapacity 在 1.36 才默认开启,1.34、1.35 需手动配置。

GPU Operator 安装

安装 GPU Operator 时需要关闭 DevicePlugin:

helm repoaddnvidia https://helm.ngc.nvidia.com/nvidia&&helm repo update helm upgrade--install--waitgpu-operator\-ngpu-operator --create-namespace\nvidia/gpu-operator\--version=v26.3.1\--setdriver.enabled=true\--setdevicePlugin.enabled=false

--set devicePlugin.enabled=false:关闭 DevicePlugin,避免与后续安装的 DRA Driver 冲突。

安装 Cert-manager

HAMi DRA Webhook 需要 TLS 证书,因此需要提前安装 cert-manager 用于自动签发。

helm repoaddcert-manager https://charts.jetstack.io helm repo update helminstallcert-manager cert-manager/cert-manager\-ncert-manager --create-namespace\--setcrds.enabled=true

Helm 安装 HAMi

为节点打上gpu=on标签,未标记的节点不会被 HAMi 接管。

#kubectl label nodes {nodeid} gpu=onkubectl label nodes ecs-a10-shgpu=on

使用以下命令添加 HAMi 图表仓库:

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

用以下命令进行安装:

# 核心是通过 --set dra.enabled=true 开启 DRA 模式helm-nhami-systeminstallhami hami-charts/hami--setdra.enabled=true --create-namespace

注意:DRA 模式与传统模式不兼容,请勿同时启用。

另外如果 GPU 驱动是主机预装,非 GPU Operator 安装,则安装时需额外指定:

--sethami-dra.drivers.nvidia.containerDriver=false

验证

正常情况下,会在 hami-system 下启动以下 Pod

root@ECS-A10-SH:/data/nfs/shared-skills-cicd# k -n hami-system get poNAME READY STATUS RESTARTS AGE hami-dra-driver-kubelet-plugin-hflbh1/1 Running02m49s hami-hami-dra-monitor-7b484d5f95-rlkcg1/1 Running022m hami-hami-dra-webhook-64bfdc6b86-d4nlr1/1 Running022m

使用

查看 ResourceSlice

查看 dra-driver 是否正常发布 resourceslice:

root@ECS-A10-SH:/data/nfs/shared-skills-cicd# kubectl get resourcesliceNAME NODE DRIVER POOL AGE ecs-a10-sh-hami-core-gpu.project-hami.io-hnn6d ecs-a10-sh hami-core-gpu.project-hami.io ecs-a10-sh 119s

详情如下:

root@ECS-A10-SH:/data/nfs/shared-skills-cicd# kubectl get resourceslice ecs-a10-sh-hami-core-gpu.project-hami.io-hnn6d -oyamlapiVersion: resource.k8s.io/v1 kind: ResourceSlice metadata: creationTimestamp:"2026-05-13T09:28:56Z"generateName: ecs-a10-sh-hami-core-gpu.project-hami.io- generation:1name: ecs-a10-sh-hami-core-gpu.project-hami.io-hnn6d ownerReferences: - apiVersion: v1 controller:truekind: Node name: ecs-a10-sh uid: 76c7db94-fe0b-44ea-9b07-8bdb6132888b resourceVersion:"61417761"uid: 46d46b45-108e-45e3-98f2-000a091571d3 spec: devices: - attributes: architecture: string: Ampere brand: string: Nvidia cudaComputeCapability: version:8.6.0 cudaDriverVersion: version:12.4.0 driverVersion: version:550.144.3 minor: int:0pcieBusID: string: 0000:65:01.0 productName: string: NVIDIA A10 resource.kubernetes.io/pcieRoot: string: pci0000:64 type: string: hami-gpu uuid: string: GPU-f1c7d08c-ae21-13e7-0de0-9eb14ff71eaf capacity: cores: value:"100"memory: value: 23028Mi name: hami-gpu-0 driver: hami-core-gpu.project-hami.io nodeName: ecs-a10-sh pool: generation:1name: ecs-a10-sh resourceSliceCount:1

可以看到,ResourceSlice 记录了 GPU 的架构、型号、显存等信息。

提交任务:DRA 原生模式

DRA 原生使用流程是先创建 ResourceClaim,然后创建 Pod 使用该 ResourceClaim。

提交任务

ResourceClaim 以及对应 Pod 完整 yaml 如下:

# DRA 原生模式 - 手动创建 ResourceClaim# 申请 10G 显存 + 50 cores 的 A10 GPUapiVersion:resource.k8s.io/v1kind:ResourceClaimmetadata:name:gpu-half-claimspec:devices:requests:-name:gpuexactly:deviceClassName:hami-core-gpu.project-hami.ioallocationMode:ExactCountcount:1capacity:requests:cores:50memory:"10Gi"---apiVersion:v1kind:Podmetadata:name:gpu-test-dra-nativespec:containers:-name:cudaimage:172.31.0.2:5000/nvidia/cuda:13.0.1-base-ubi9command:["sleep","3600"]resources:claims:-name:gpuresourceClaims:-name:gpuresourceClaimName:gpu-half-claimrestartPolicy:Never
查看调度情况

通过 ResourceClaim 可以看到资源分配情况:

root@ECS-A10-SH:~/lixd/deploy/gpu/hami/examples# k get poNAME READY STATUS RESTARTS AGE gpu-test-dra-native1/1 Running088s root@ECS-A10-SH:~/lixd/deploy/gpu/hami/examples# k get resourceclaimNAME STATE AGE gpu-half-claim allocated,reserved 21s root@ECS-A10-SH:~/lixd/deploy/gpu/hami/examples# k get resourceclaim gpu-half-claim -oyamlapiVersion: resource.k8s.io/v1 kind: ResourceClaim metadata: name: gpu-half-claim namespace: default spec: devices: requests: - exactly: allocationMode: ExactCount capacity: requests: cores:"50"memory: 10Gi count:1deviceClassName: hami-core-gpu.project-hami.io name: gpu status: allocation: devices: results: - consumedCapacity: cores:"50"memory: 10Gi device: hami-gpu-0 driver: hami-core-gpu.project-hami.io pool: ecs-a10-sh request: gpu shareID: 6108e68f-a7ec-4a30-9782-634885c0c728 nodeSelector: nodeSelectorTerms: - matchFields: - key: metadata.name operator: In values: - ecs-a10-sh reservedFor: - name: gpu-test-dra-native resource: pods uid: d99dc6df-092c-4f3a-ac55-cfb88c017af7
效果

Pod 中执行 nvidia-smi 看到显存是我们申请的 10G,说明 HAMi 生效了。

[HAMI-core Msg(51:140707774973760:libvgpu.c:870)]: Initializing..... Wed May1310:58:202026+-----------------------------------------------------------------------------------------+|NVIDIA-SMI550.144.03 Driver Version:550.144.03 CUDA Version:13.0||-----------------------------------------+------------------------+----------------------+|GPU Name Persistence-M|Bus-Id Disp.A|Volatile Uncorr. ECC||Fan Temp Perf Pwr:Usage/Cap|Memory-Usage|GPU-Util Compute M.||||MIG M.||=========================================+========================+======================||0NVIDIA A10 On|00000000:65:01.0 Off|0||0% 32C P8 22W / 150W|0MiB / 10240MiB|0% Default||||N/A|+-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+|Processes:||GPU GI CI PID Type Process name GPU Memory||ID ID Usage||=========================================================================================||No running processes found|+-----------------------------------------------------------------------------------------+[HAMI-core Msg(51:140707774973760:multiprocess_memory_limit.c:703)]: Cleanup onexitforPID51[HAMI-core Msg(51:140707774973760:multiprocess_memory_limit.c:739)]: Exit cleanup completeforPID51

提交任务:DevicePlugin 兼容模式

原生 DRA 模式需要手动创建 ResourceClaim,对存量业务不够友好。

为了便于大家迁移,HAMi 提供了兼容模式:用户仍然像 DevicePlugin 那样申请资源,由 HAMi DRA Webhook自动拦截并转换为 ResourceClaim,调度器分配后再挂载到 Pod。

提交任务

和使用 DevicePlugin 一样,正常在 resources 中申请资源即可:

# 兼容模式 - 按传统方式申请 GPU,HAMi webhook 自动转换为 ResourceClaim# 申请 1 块 GPU,10Gi 显存 + 50% 算力apiVersion:v1kind:Podmetadata:name:gpu-test-compatiblespec:containers:-name:cudaimage:172.31.0.2:5000/nvidia/cuda:13.0.1-base-ubi9command:["sleep","3600"]resources:limits:nvidia.com/gpu:1nvidia.com/gpumem:10240nvidia.com/gpucores:50restartPolicy:Never
查看调度情况

HAMi 会根据nvidia.com/gpumemnvidia.com/gpucores自动生成 ResourceClaim,并绑定到 Pod。

对应的 ResourceClaim 如下:

root@ECS-A10-SH:~/lixd/deploy/gpu/hami/examples# k get resourceclaimNAME STATE AGE default-gpu-test-compatible-cuda allocated,reserved 2m47s root@ECS-A10-SH:~/lixd/deploy/gpu/hami/examples# k get resourceclaim default-gpu-test-compatible-cuda -oyamlapiVersion:resource.k8s.io/v1kind:ResourceClaimmetadata:creationTimestamp:"2026-05-13T11:14:06Z"finalizers:-resource.kubernetes.io/delete-protectionname:default-gpu-test-compatible-cudanamespace:defaultresourceVersion:"61451167"uid:8212ef37-f71c-45ca-ac4a-f94ead923eefspec:devices:requests:-exactly:allocationMode:ExactCountcapacity:requests:cores:"50"memory:"10737418240"count:1deviceClassName:hami-core-gpu.project-hami.ioselectors:-cel:expression:device.attributes["hami-core-gpu.project-hami.io"].type == "hami-gpu"name:gpustatus:allocation:devices:results:-consumedCapacity:cores:"50"memory:10Gidevice:hami-gpu-0driver:hami-core-gpu.project-hami.iopool:ecs-a10-shrequest:gpushareID:a8dba99f-7841-41ad-9f07-5ec39ddee543nodeSelector:nodeSelectorTerms:-matchFields:-key:metadata.nameoperator:Invalues:-ecs-a10-shreservedFor:-name:gpu-test-compatibleresource:podsuid:173a6d7f-665b-4b2d-961c-f550d70f7484

核心配置:

spec:devices:requests:-exactly:allocationMode:ExactCountcapacity:requests:cores:"50"memory:"10737418240"count:1

对比原始 Pod 的资源申请:

resources:limits:nvidia.com/gpu:1nvidia.com/gpumem:10240nvidia.com/gpucores:50

Webhook 转换映射关系:

原始资源申请ResourceClaim 字段
nvidia.com/gpu: 1requests.count: 1
nvidia.com/gpumem: 10240requests.capacity.memory
nvidia.com/gpucores: 50requests.capacity.cores
效果

同样的,显存为 10240M,说明 HAMi 也生效了。

root@ECS-A10-SH:~/lixd/deploy/gpu/hami/examples# k exec -it gpu-test-compatible -- nvidia-smi[HAMI-core Msg(57:139707024262976:libvgpu.c:870)]: Initializing..... Wed May1311:21:392026+-----------------------------------------------------------------------------------------+|NVIDIA-SMI550.144.03 Driver Version:550.144.03 CUDA Version:13.0||-----------------------------------------+------------------------+----------------------+|GPU Name Persistence-M|Bus-Id Disp.A|Volatile Uncorr. ECC||Fan Temp Perf Pwr:Usage/Cap|Memory-Usage|GPU-Util Compute M.||||MIG M.||=========================================+========================+======================||0NVIDIA A10 On|00000000:65:01.0 Off|0||0% 32C P8 22W / 150W|0MiB / 10240MiB|0% Default||||N/A|+-----------------------------------------+------------------------+----------------------+ +-----------------------------------------------------------------------------------------+|Processes:||GPU GI CI PID Type Process name GPU Memory||ID ID Usage||=========================================================================================||No running processes found|+-----------------------------------------------------------------------------------------+[HAMI-core Msg(57:139707024262976:multiprocess_memory_limit.c:703)]: Cleanup onexitforPID57[HAMI-core Msg(57:139707024262976:multiprocess_memory_limit.c:739)]: Exit cleanup completeforPID57

小结

本文围绕 HAMi DRA 模式完成了从安装到验证的完整实践:

  1. 部署 HAMi DRA:关闭 DevicePlugin 后通过 Helm 安装 HAMi,开启dra.enabled=true
  2. DRA 原生模式:手动创建 ResourceClaim 声明显存与算力,Pod 通过 resourceClaim 引用
  3. DevicePlugin 兼容模式:沿用传统nvidia.com/gpu等资源申请,HAMi DRA Webhook 自动转换为 ResourceClaim,存量业务零改造即可迁移

两种模式的核心差异在于 ResourceClaim 的创建方式——原生模式手动管理、兼容模式自动生成,底层调度与切分逻辑一致。

「密瓜智能(Dynamia) 」专注 GPU 虚拟化与异构算力调度,发起并主导 CNCF 开源项目 HAMi;同时基于 HAMi 提供商业发行版、企业产品与服务,帮助用户在真实业务中规模化使用相关能力

官网:dynamia.ai

邮箱:info@dynamia.ai

HAMi 项目地址:https://github.com/project-hami/hami

本文作者「Dynamia密瓜智能」
————————————————
版权声明:本文为CSDN博主「密瓜智能」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://www.lixueduan.com/posts/kubernetes/56-hami-dra-quickstart/

http://www.jsqmd.com/news/867822/

相关文章:

  • 免费图片去水印工具有哪些?2026 在线去水印软件实测盘点
  • 【ChatGPT一键生成专业PPT终极指南】:20年IT架构师亲测的7大高转化率提示词模板与避坑清单
  • 天禧AI 4.0发布,实现从“+AI”到“AI+”关键跃升,联想股价暴涨!
  • 【STM32】遥控伸缩门禁改NFC刷卡
  • CANN ONNX 模型生态兼容实战:从模型导入、算子映射到常见报错排查的全流程指南
  • J-Link GD32F303CC 连接与速度测试报告
  • 实测taotoken在不同时段api调用的响应延迟与稳定性表现
  • python校园篮球场地管理系统
  • 【c++面向对象编程】第43篇:可变参数模板(C++11):优雅处理不定长参数
  • 工业云脑:序章:数据飞向云端,工厂拥有了“新大脑”
  • Joy-Con Toolkit:解锁任天堂手柄终极自定义的3大核心技术方案
  • 【从0到1:一个篮球迷的“全栈执念”】后端+小程序全开源,跑起来就是完整社区
  • 在AWS中国区实现EKS跨VPC跨区域实现节点加入集群的实践
  • python游泳用品专卖店系统
  • ElevenLabs江苏话语音模型训练全链路拆解:从200小时带标注吴语语料清洗,到MOS得分达4.13的关键超参组合
  • 题解:Atcoder Regular Contest++ 220 D - Long Trail
  • 英伟达再创历史新高:AI浪潮下的芯片、存储与智能体新时代
  • 2026年国内AI+HR SaaS 口碑榜:谁在领跑中国人力资源数智化?
  • 弦理论,能从少数假设中自然浮现吗?
  • AI Agent替代房产顾问?实测对比报告:12城27个项目的人效、客诉率与成交周期数据全公开
  • 思源黑体TTF构建指南:免费商用多语言字体的终极解决方案
  • 【芯片测试】:Driver、Comparator、PMU 与 Active Load
  • 如何快速构建稳定测试环境:Chrome for Testing 实战指南
  • 电商平台SQL数据层设计实战指南
  • 2026年5月无锡DLP服务商深度解析:如何选择专业数据防泄漏方案 - 2026年企业推荐榜
  • 【ChatGPT代码生成能力极限测试】:20年架构师亲测17类编程场景,92.6%生成代码需人工重写?
  • 前端开发者最后的护城河:Lovable思维训练营(仅开放300个名额|含20年沉淀的17个诊断矩阵)
  • 曝OpenAI日亏超5亿,但Anthropic快盈利了
  • c++我的世界
  • Linux grep 文本过滤与正则实战——日志筛选、文本匹配神器