在线推理服务为什么需要按需拉起加速卡
在线推理服务要实现请求到来时才拉起加速卡,核心思路是把GPU从“常驻物理设备”变成“可动态调度的云资源”用Kubernetes做编排,配合容器镜像、模型存储和调度策略,让加速卡在请求真正到达时才被分配和挂载。这套逻辑从底层改变了传统推理服务的资源使用方式,是当前推理服务降本增效实践中最受关注的方向之一,尤其适合业务流量有明显波峰波谷、或者模型数量多但单个模型调用频率不高的场景。
传统推理服务为什么浪费资源
大多数在线推理服务,尤其是基于TensorFlow Serving、Triton Inference Server或vLLM搭建的服务,启动时就直接申请整张GPU卡,进程常驻,显存全占,哪怕五分钟才来一个请求,加速卡也得空转着等,据统计,相当一部分AI业务团队的GPU利用率长期徘徊在较低水平,但这块资源却按整卡计费,成本压力不小。
- 业务波谷时段,GPU空转,电费和机位成本照付
- 多个模型各自占一张卡,模型越多浪费越严重
- 大模型部署后可能几天没人调用,资源锁死无法释放
这种“包月”式的资源使用方式,在流量稳定的场景下问题不大,但一旦业务形态变成碎片化调用,资源账就算不过来了。
按需拉起解决的核心矛盾:显存占用与请求频率不匹配
请求到来时才拉起加速卡,本质上是将GPU资源的使用粒度从“进程级常驻”改为“请求级弹性”,实现容器化GPU资源动态调度,当请求进入网关时,系统判断当前是否已有实例在运行,如果没有,就立刻创建一个Pod,挂载GPU设备,从远端存储拉取模型权重,完成推理,然后根据策略在空闲后自动缩容,整个过程由调度器自动完成,不需要人工介入。
这套机制能不能落地,关键是解决两个问题:一是“拉起要多快”,二是“拉起后怎么不浪费”,前者靠镜像优化和模型缓存,后者靠弹性伸缩和空闲回收。
容器化GPU资源动态调度怎么落地
按需拉起加速卡在工程上依赖一套完整的调度链路,最主流的技术栈是Kubernetes加GPU虚拟化插件,配合自定义调度策略。
核心组件与工作流程
一个标准的按需拉起推理平台,通常由以下几个组件组成:
- Kubernetes集群:承载Pod调度、扩缩容和资源管理
- GPU Device Plugin:将物理GPU资源上报给K8s,让Pod可以声明gpu数量
- GPU虚拟化层:比如vGPU方案或NVIDIA MIG,将一张物理卡切分成多个逻辑卡,细粒度分配显存
- 弹性伸缩控制器

:基于请求量或队列深度触发扩容,空闲时缩容,常用HPA或KEDA
- 模型存储与缓存:模型权重放在对象存储或分布式文件系统中,Pod启动时快速挂载加载
举个例子,你部署了一个基于vLLM的Llama-3-8B推理服务,镜像打到3GB以内,模型存储在内网的MinIO上,一个请求进来,网关发现当前没有活跃Pod,于是触发HPA扩容,K8s调度器找到一个带有GPU标签的节点,分配1张vGPU(20GB显存),挂载模型文件,vLLM进程启动,加载权重到显存,然后开始推理,整个过程如果优化到位,从请求到首次生成token的延迟可以控制在一两秒内。
GPU调度策略选型:共享切分优先于整卡独占
要让“按需拉起”在成本上真正划算,整卡分配往往太奢侈,行业内的做法是用GPU共享调度,一张A100按显存配比切成2~4个vGPU单元,分别给不同推理任务使用,或者用MIG做物理隔离。
在Kubernetes环境下,NVIDIA的Device Plugin支持按整卡分配,而vGPU(比如简米云的cGPU方案、NVIDIA的Time-Slicing)能把一张卡按显存切成多份,选型时要注意几个差异点:
| 维度 | 整卡独占 | vGPU时间片共享 | MIG物理切分 |
|---|---|---|---|
| 显存隔离 | 完全隔离 | 逻辑隔离,可能互相挤占 | 硬件级隔离 |
| 单卡并发任务数 | 1 | 多 | 最多7个实例(A100/H100) |
| 性能隔离性 | 强 | 弱,大任务可能影响同卡其他任务 | 较强 |
| 适用场景 | 大模型训练/高QPS服务 | 中小模型按需拉起 | 混合负载隔离要求高的场景 |
业界专家指出,对于请求到来时才拉起加速卡的场景,vGPU方案因为灵活度更高而更受青睐,MIG适合显存分配固定、隔离要求严格的场景,比如多租户SaaS化推理平台。
请求到来时才拉起加速卡的完整链路
从一次用户请求出发,整个执行链路可用下面的步骤理解:
第一步:流量入口识别与调度决策
请求先到API网关(如Kong、APISIX或自研网关),网关根据路径前缀或模型名称把请求路由到对应的推理服务Service,如果Service背后没有可用的Pod,就需要等待扩容完成。
这里有个技术细节:普通的Service只能把请求转发给已有Pod,如果Pod不存在,请求会直接报错,所以按需拉起架构中,网关层通常要接一层代理,例如使用Knative的Activator组件或KServe的InferenceService,把“没有Pod时的请求”暂存起来,等Pod就绪后再转发,这个暂存和等待的过程,是冷启动延迟的主要来源。

第二步:弹性伸缩器触发扩容
当请求被暂存后,KEDA或自定义控制器检测到“排队请求数大于0”,触发ScaleFromZero操作,创建新的Pod,这块的可操作优化空间很大:
- KEDA的ScaledObject:配置触发器为prometheus指标,指标为“等待中的请求数”
- HPA的behavior配置:设置扩容立即执行,缩容等待稳定窗口期
- 自定义控制器:直接监听网关的请求缓冲队列,队列非空便创建Pod
第三步:Pod创建与GPU设备分配
Pod的yaml里声明nvidia.com/gpu: 1,Device Plugin在节点上找到可用的vGPU空闲切片,通过环境变量注入到容器中,这一步通常在几百毫秒内完成。
第四步:模型权重挂载与加载
模型存放路径通过PVC挂载到容器中,vLLM或Triton启动时读取权重,为了加速这步,可以给节点挂载本地SSD缓存,将常用模型的权重提前预热到节点磁盘上,这样Pod启动时从本地读,而不是从远端拉取。
第五步:推理与缩容回收
请求处理完后,Pod继续存活一段时间,默认配置通常在3到10分钟内无请求便自动缩容,释放GPU资源回到资源池,下一个请求再来时,再次重复上面的过程。
GPU冷启动优化方案:让“等GPU”变得近乎无感
请求到来时才拉起加速卡的方案,最大的短板是冷启动延迟,但从前面的链路拆解来看,每一个环节都有针对性的优化手段,组合起来,完全可以让用户侧感知不到“这次推理是现拉起来的资源”。
- 模型权重预热:在节点上维护一个热权重缓存目录,Pod启动时直接从本地磁盘加载,避免从对象存储拉取大文件,8B模型如果走万兆内网,加载时间能压到秒级以内。
- 镜像精简:推理镜像只保留CUDA运行时、推理框架和必要的动态库,基础镜像控制在2到3GB,不要打包模型权重,用containerd的远程快照功能,可以进一步减少镜像拉取时间。
- 预创建Pod模板:提前创建好Pod但挂起(不分配GPU),请求到来时只需挂载GPU设备,跳过调度和镜像拉取阶段,这个方案能显著缩短冷启动时间。
- 请求队列超时兜底:网关层设置等待超时(比如5秒),超时后返回“服务启动中”的提示或降级到CPU推理,CPU推理虽然慢,但能保证请求不失败。
- P50/P99延迟观测:在监控大盘上分开统计“正常推理时间”和“冷启动新增时间”,持续定位瓶颈环节。

对于多模型共用一个推理集群的场景,按需拉起还有一层额外的好处:模型按需加载后,推理完即可释放显存,不必为每一个模型长期保留GPU实例,很多团队在实践中把几十个中小模型放在同一个GPU集群里,按调用频率动态拉起对应模型的实例,整体推理服务成本降低明显,这也是这个架构最吸引人的地方。
哪些业务适合按需拉起,哪些不适合
按需拉起不是银弹,它与常驻推理服务各有适用场景。
| 业务特征 | 按需拉起 | 常驻GPU服务 |
|---|---|---|
| 请求频率 | 低、稀疏、突发 | 高QPS、持续稳定 |
| 模型数量 | 多,单个模型调用少 | 少,核心模型大量调用 |
| 延迟要求 | 允许秒级冷启动 | 毫秒级严格延迟 |
| 成本诉求 | 强烈,需要极致降本 | 稳定性优先,成本次之 |
如果你的业务是面向C端的高并发实时推荐,常驻GPU实例更稳妥,按需拉起带来的冷启动会直接拖垮体验,但如果是企业内部的知识库问答、批量文档处理、定时任务触发的大量模型调用,按需拉起的收益会非常明显。
最终一句话收束:在线推理服务的资源治理,方向已经越来越清晰,加速卡从“绑定进程”走向“按需分配”,中间靠的是容器化、虚拟化、弹性伸缩和存储加速这套组合拳,不会因为冷启动的存在而止步,因为优化空间还很大,而这恰恰是推理服务降本增效实践里最有价值的一段路。
Q&A:在线推理服务如何实现按需拉起加速卡,冷启动延迟怎么处理?
Q:按需拉起加速卡后,第一个请求一定会很慢吗?
A:不一定,通过权重本地缓存、镜像精简、节点预热等手段,大多数中小尺寸模型的冷启动新增延迟可以控制在1到3秒以内,如果预创建Pod模板并提前挂载GPU设备,延迟还能进一步压缩到几百毫秒。
Q:vGPU共享调度和整卡独占,按需场景下选哪个?
A:主要看显存隔离需求,如果是内部多模型共享集群,vGPU更灵活,一张卡承载更多任务;如果涉及多租户或者对显存占用敏感,MIG物理切分更合适,性能波动更小。
Q:按需拉起的扩缩容策略如何配置才能既省钱又不频繁抖动?
A:扩容用请求触发或队列深度触发,立即扩容不留缓冲期;缩容设置稳定窗口期,建议5到10分钟,避免短时间流量抖动导致Pod反复创建销毁,对推理框架的显存复用也不友好。