KServe + HAMi:一张 GPU 如何运行多个推理服务

KServe + HAMi:一张 GPU 如何运行多个推理服务

💡 原文中文,约10100字,阅读约需24分钟。
📝

内容提要

本文介绍如何通过KServe与HAMi实现GPU共享,使多个推理服务共用一张GPU。文章详细说明了安装GPU Operator、cert-manager和HAMi-DRA的步骤,并展示了创建共享GPU推理服务的配置方法。通过ResourceClaimTemplate声明GPU资源,每个Pod获得独立配额,验证了两个副本能同时共享同一张Tesla T4 GPU,各分配3Gi显存和20%算力,有效避免小模型独占整卡,提升GPU利用率。

🔎

延伸解读

为什么需要关闭原生 Device Plugin

安装 GPU Operator 时,必须设置 devicePlugin.enabled=false,否则原生 NVIDIA Device Plugin 和 HAMi-DRA 会同时管理同一 GPU 设备,导致资源冲突和调度异常。这一步骤是集成 HAMi 的关键前提,确保 GPU 资源完全由 HAMi-DRA 接管。

ResourceClaimTemplate 与独立配额

KServe 0.18 支持原生 DRA,通过 ResourceClaimTemplate 声明 GPU 资源,每个 Predictor Pod 会生成独立的 ResourceClaim,从而获得各自的显存和算力配额。这避免了多个副本共享同一份固定 Claim 导致的资源争抢,确保每个副本都能获得稳定的性能。

GPU 共享的实际效果

验证显示,两个副本可以同时调度到同一张 Tesla T4 GPU,各自看到 3072 MiB 显存,并能正常处理推理请求。这表明 HAMi 能够有效隔离显存和算力,让多个小模型共享一张 GPU,提升资源利用率,减少浪费。

Q&A

KServe 如何与 HAMi 集成以实现 GPU 共享?

KServe 0.18 版本原生支持 DRA,通过 ResourceClaimTemplate 和 resources.claims 直接使用 HAMi DRA 模式,无需额外适配。在 InferenceService 的 Predictor 中引用 ResourceClaimTemplate,并在容器级 resources.claims 中声明 GPU 资源即可。

安装 GPU Operator 时为什么要关闭原生 NVIDIA Device Plugin?

为了避免原生 Device Plugin 和 HAMi-DRA 同时管理同一设备,导致冲突。因此需要设置 devicePlugin.enabled=false。

如何创建共享 GPU 的推理服务?

首先创建 ResourceClaimTemplate 声明 GPU 资源(如 3Gi 显存和 20% 算力),然后在 InferenceService 的 Predictor 中通过 resourceClaims 引用该模板,并在容器级 resources.claims 中声明使用。

为什么每个 Predictor Pod 需要独立的 ResourceClaim?

因为如果多个副本直接引用同一份固定 ResourceClaim,它们不会获得各自独立的 GPU 配额。每个 Pod 生成独立的 ResourceClaim,才能确保每个副本获得独立的显存和算力限制。

如何验证两个副本共享同一张 GPU?

通过查看 Pod 和 ResourceClaim 的状态,确认两个 Pod 都调度到同一节点,并且各自的 ResourceClaim 都分配到了同一设备(如 hami-gpu-0),且每个容器内 nvidia-smi 显示显存为 3072 MiB。

使用 HAMi 共享 GPU 后,推理服务还能正常工作吗?

可以。通过 Gateway 发起推理请求,API 能正常返回,说明服务在 GPU 共享后依然正常运行。

HAMi 共享 GPU 有什么好处?

一张 GPU 可以同时承载多个推理服务,避免小模型独占整卡,提升 GPU 利用率,让空闲的显存和算力得到更充分的利用。

🏷️

标签

➡️

继续阅读