内容提要
本文介绍如何通过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 利用率,让空闲的显存和算力得到更充分的利用。