ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

GPU 显存共享实战:用 HAMi 把一张卡分给多个任务

GPU 显存共享实战:用 HAMi 把一张卡分给多个任务 GPU 显存共享实战用 HAMi 把一张卡分给多个任务【免费下载链接】HAMiHeterogeneous GPU Sharing on Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ha/HAMi你的训练任务只要 3GB 显存Pod 却必须申请整张卡剩下的显存只能闲置。如果你要管理这样的集群可以看看 HAMi一个 CNCF 孵化项目在 Kubernetes 上做 GPU 显存共享与异构计算调度让任务按需申请显存和算力应用侧不用改一行代码。 它帮你解决什么一句话把昂贵的加速器当成资源池按显存、算力、卡数切分再让调度器知道每张卡的状态。具体就三点按份共享申请 1 张物理卡的同时用nvidia.com/gpumem限定这张卡上最多能用多少 MB 显存用nvidia.com/gpucores限定算力百分比。像合租一间房一张卡能住多户。零应用改动沿用标准 Kubernetes 资源请求/限制写法应用代码对 HAMi 无感知。设备感知的调度提供 binpack、spread、拓扑感知、动态 MIG 等放置模式还能把不同厂商的设备放进同一套调度流程。知道它干什么之后接下来看怎么装。 三步把 HAMi 跑起来环境前置条件以 NVIDIA 卡为例驱动不低于 440Kubernetes 不低于 1.23Helm 大于 3.0容器运行时把 nvidia 配成默认。其他厂商的卡有不同的后端要求装之前先翻一下仓库里对应的 chart 说明。然后按顺序做三件事给节点打标签kubectl label nodes node-name gpuon安装核心组件helm install hami ./charts/hami -n kube-systemchart 就在仓库的charts/hami/目录clone 下来直接用验证并跑样例kubectl get pods -n kube-system确认hami-scheduler、hami-device-plugin都是 Running再kubectl apply -f examples/nvidia/default_use.yamlPod 跑起来、容器内能看到被限定的卡链路就算通了。样例文件在 examples/nvidia/default_use.yaml。⚙️ 核心机制怎么工作不必背组件清单记住一条流水线、一个关键参数就够了。流水线Pod 提交后先被 Mutating WebhookK8s 的准入控制器能在对象入库前改它标记接着 HAMi 调度器依次做 filter、score、bind 三步决定放在哪个节点、用哪张卡把分配结果写进 Pod 注解节点上的设备插件随后调用 Allocate() 往容器里注入对应的设备和环境变量最后监控组件开始采集用量。整条数据流如下图所示关键参数是显存怎么切。Pod 里这段配置resources: limits: nvidia.com/gpu: 1 # 需要 1 张物理卡 nvidia.com/gpumem: 3000 # 这张卡上最多用 3000MB 显存容器里的 CUDA 申请显存时不会越过这个上限。注意一个容易踩的点安装后节点注册的nvidia.com/gpu值默认是 vGPU虚拟卡数量Pod 申请时它指物理卡数。弄懂原理后看看它到底能把利用率拉高多少。 一张表看懂共享前后差多少经典场景用户 A 每张卡要 10G 显存、用 2 张用户 B 每张要 20G、也用 2 张。指标不用 HAMi用 HAMi占用的物理卡42利用率50%100%每张卡承载的任务12 个以上共享后两张卡被填满另外两张空出来留给新任务支持哪些设备官方文档列了 NVIDIA、华为昇腾、寒武纪、海光、天数智芯、昆仑芯、沐曦、摩尔线程等examples/目录里还有 AWS Neuron、壁仞、燧原、VastAI 的样例配置。不同厂商能力有差异有的只支持显存上限、不支持算力上限落地前建议对照 pkg/device/ 下的后端目录确认。类别示例GPUNVIDIA、AMD、摩尔线程、天数智芯、沐曦、壁仞NPU华为昇腾其他加速器寒武纪 MLU、海光 DCU、昆仑芯、燧原、AWS Neuron设备能用了下一步是挑一套适合自己的调度策略。 调度策略怎么选默认策略是 binpack也可以按 Pod 用注解覆盖。按场景挑你的情况建议卡池紧张希望集中放置保持默认 binpack把任务塞进尽量少的节点和卡留出整卡给大任务想分散放置、减少互相干扰节点级用 spreadhami.io/node-scheduler-policy: spread单节点多卡想控制选哪张卡卡级策略hami.io/gpu-scheduler-policy: binpack支持的 NVIDIA 卡要硬性分区动态 MIG由 HAMi 按需创建、复用和回收 MIG 实例两条注解合起来就是这样annotations: hami.io/node-scheduler-policy: spread hami.io/gpu-scheduler-policy: binpack策略实现都在 pkg/scheduler/policy/。要用动态 MIG 的话先读 docs/develop/dynamic-mig-lifecycle.md它要求 HAMi 是该卡上唯一创建/销毁 MIG 的控制器和别的 MIG 控制器并存是不支持的。策略选好了跑起来之后怎么用得上、查得到呢 看得见、查得动装完监控默认就开着。调度器暴露/metrics端点默认端口 31993接上 Prometheus 再配 Grafana 就能看项目还配套一个 WebUI用来浏览资源总览和设备分布。遇到不工作的情况先按这张表自查现象先查哪里hami-device-plugin起不来节点有没有gpuon标签、nvidia 默认运行时是否配好、Pod 事件日志Pod 一直 Pending调度器和 webhook 是否都 Running申请的显存是否超过单卡总量显存上限像没生效该设备后端是否支持显存限制用 metrics 端点核对实际用量工具链都齐了最后说说它到底适合什么人。 适合谁边界在哪HAMi 比较契合这三类场景共享型 AI 集群多租户的 Notebook、推理、轻训练混跑在同一个卡池里异构混合集群不同厂商的加速器走一套统一调度入口要可观测的平台分配了多少、用了多少都能查得到。两个边界要注意隔离能力取决于设备后端。部分厂商只有显存上限、没有算力上限效果因卡型和驱动版本而异动态 MIG 只覆盖受支持的 NVIDIA 卡且该卡上的 MIG 生命周期必须完全由 HAMi 接管。如果你的场景只是单机单卡跑一个大作业就没必要引入这套东西了。一句话收尾HAMi 把整卡独占变成显存级共享顺手把不同加速器的调度入口也统一了。想读源码或动手试git clone https://gitcode.com/GitHub_Trending/ha/HAMi。【免费下载链接】HAMiHeterogeneous GPU Sharing on Kubernetes项目地址: https://gitcode.com/GitHub_Trending/ha/HAMi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表