从云原生走向 AI 原生:一套面向未来的架构方法论 → 阅读《AI 原生基础设施》

自服务 GPU 平台:从组件到 GPU-as-a-Service

草稿

平台的价值不在组件清单,而在用户能不能自助拿到算力:不需要懂 Kubernetes,也不需要找管理员开权限。

组合架构回答了“集群怎么治”,六种组合把共享、隔离与队列拼成了可评审的方案。但从“集群治理良好”到“用户用得起来”之间还有最后一公里:用户要的是一个入口,填个表单就能拿到 GPU 训练作业,或一个 OpenAI 兼容的模型端点。本章讲这一层的组装公式:

GPU 共享 + 模型服务 + 队列 + 自服务门户 = GPU-as-a-Service

内容来源
本章的产品化框架源自 Alinahid 的博客文章 Maximise GPU utilisation and self serve GPU as a Service,其参考实现基于 Red Hat OpenShift AI(RHOAI 3.4+)。本章按本书的组件体系独立改写:公式中的每一块都对应本书已有章节,Red Hat 技术栈作为具体案例出现,等价的上游组件一并给出。

为什么“整卡独占”养不起平台

两个叠加的经济事实:

  1. 重复部署。没有共享模型服务时,每个团队各自部署一套推理实例“以备不时之需”,平台上散布着大量重复的同款模型副本,每个副本都整卡独占。
  2. 负载形态与卡的错配。轻量模型、低批量推理的算术强度很低(见Roofline 模型),独占一张卡时物理上就有大量算力闲置,原文给出的量级是“高达 90% 的晶体管空闲”。

出于严谨,必须同时说明:“利用率低”本身不是充分的行动信号。解码型负载受带宽屋顶线约束,5% 的算力占用可能已是物理最优(见GPU 指标语义)。平台要消灭的不是“低利用率数字”,而是**“保留但空闲”(reserved but idle)**:资源被某个租户占着,却没在产出。这正是共享与队列要联手解决的问题。

四层组件:砖你已经有了

本章不重复组件内部机制(它们各自有专章),这里只确认每一层在产品中的角色:

组件在产品中的角色深入阅读
数据平面MIG / 时间片 / HAMi把一块卡变成多个可分配单位,消灭“整卡独占”数据平面
工作负载vLLM / KServe把模型变成 OpenAI 兼容端点,多租户共享一个实例vLLM
控制面Kueue决定“谁现在拿到 GPU”:配额、准入、抢占、到期释放Kueue
体验层Backstage 门户让用户不写 YAML、不要集群权限就能申请算力本章
表 1: GPU-as-a-Service 的四层组件

前两层把资源的“粒度”与“形态”做对,第三层把“秩序”立起来(没有队列的共享平台会退回到“谁先抢到算谁的”,作业要么 Pending 到天荒地老,要么被 OOM 杀掉)。剩下的体验层,是本章的新内容。

自服务门户:用户不需要学 Kubernetes

门户层的选型在开源世界已有事实标准:Backstage(CNCF 项目,Red Hat Developer Hub 即其企业发行版)。关键机制是 Scaffolder 软件模板:平台团队把 Kueue Job、InferenceService 等 YAML 做成带参数的模板。用户在表单里填 GPU 数量、镜像、队列名,门户渲染出 YAML 并经 GitOps 提交到目标集群。

门户层解决的是平台的三类“软成本”:

  1. 权限收敛。用户不需要任何集群权限:模板由平台团队评审维护,提交走 Git 仓库,天然形成审批边界;原文实现中用户连 cluster-admin 的概念都不需要知道。
  2. 模板治理。最佳实践(资源请求、镜像规范、标签约定)固化在模板里,而不是指望每个用户都记得住。
  3. 审计与归因。每一次申请都是一次 Git 提交,谁在什么时候要了多少 GPU,都可按队列/项目出账,直接对接可观测与计量

多集群场景(平台服务于一个集群舰队)用 hub-spoke 模式:门户在管理集群,GitOps(如 Argo CD)把渲染出的工作负载放置到合适的成员集群。

推理网关:在线负载的“队列”

Kueue 管的是离线作业(训练、批处理)的准入;在线推理的共享则需要另一个对偶机制:网关的认证与限流

共享模型服务的价值在于合并部署:一个共享实例替代 N 个团队的重复副本,显存与算力按需复用。但共享立刻带来公平性问题:任何一个消费者都可以打满并发,把其他租户的尾延迟打爆。解法是在端点前加一层:

  • 认证:每个消费方独立的凭据(原文实现中是 Red Hat Connectivity Link,上游等价物是 Istio/Envoy 网关);
  • 限流:按消费方设 RPM/并发上限,超限者排队或拒绝。这就是推理多租户的“队列”,与 Kueue 的训练队列构成一内一外的对偶。

于是完整的治理图景是:训练与批处理负载由 Kueue 准入,在线推理负载由网关限流,两者背后是同一批被共享的 GPU。两种机制任缺其一,平台都会在某一类负载上失去公平性。

验收:怎么知道“平台”成立了

沿用能力模型的语言,自服务平台对外是一个可验收的能力单元。落地后按这张清单核对:

  • 用户从提交表单到作业拿到 GPU 的时间可度量、有基线(“时间到第一块 GPU”)
  • 用户全程不需要 Kubernetes 权限,也没有人需要手工改 YAML
  • “保留但空闲”的 GPU 占比趋零(队列到期释放 + 抢占生效)
  • 训练类申请全部经过队列准入(Kueue 配额覆盖),无人能绕过
  • 推理端点全部经过网关(认证 + 按消费方限流)
  • 每份 GPU 消耗都能归因到队列/项目,可出账(对接可观测与计量
  • 模板变更有评审记录(Git PR),平台团队之外无人能改模板

基础设施不是终点

原文的结论值得原样保留:平台能力本身不产生 ROI,真实的工作负载才产生。推理服务、Agent、训练任务、合成数据生成,只有这些负载真实地跑在平台上,共享与队列带来的利用率提升才能兑现为业务价值。否则一个空转的平台只是把“GPU 空闲”换了个记账科目。这也是容量经济反复强调的:算力的分母永远是业务产出,不是平台本身。

总结

GPU-as-a-Service 不是新产品,而是把本书各部分已经讲透的组件按一个产品公式组装:数据平面出资源单位,推理服务出共享端点,Kueue 出秩序,门户出体验,网关限流补上在线负载的公平性。判断组装是否成功,不看组件清单,看验收清单:时间到第一块 GPU、保留但空闲归零、每一份算力可归因。下一章能力模型把这套“可交付、可验收”的思路抽象成通用的平台能力语言。

参考资料

创建于 2026/09/15 更新于 2026/09/15 2282 字 阅读约 5 分钟