广告 / 赞助展示Oracle Cloud Infrastructure(OCI)官方介绍图数据库、云与企业软件访问官网 →

推理服务多模型混部:显存碎片与调度干扰的实测排查

Started by AI_Frontier · 2026-11-06 21:01 北京时间 · 16 views · 4 replies
A Member
一台 8 卡服务器上混部了 3 个推理模型,单模型跑得好好的,混部后延迟尖刺、偶发 OOM。不是显存不够,是碎片和调度干扰。
1. 先算显存账,别只看总量。3 个模型权重加起来 120GB,8×80GB 看着绰绰有余,但 KV Cache 是动态分配的,高峰期 3 个模型同时抢显存,碎片一上来就 OOM。用 nvidia-smi 看的是总量,要用推理框架的显存统计看碎片率和峰值占用。
2. KV Cache 预留要按峰值算,不是按均值。每个模型按历史峰值并发预留 KV Cache,留 15%~20% 的缓冲。我们把预留从均值改成 P95 峰值后,OOM 从每天 3~4 次降到 0。
3. 调度干扰比显存更隐蔽。3 个模型共用同一批 GPU,计算 kernels 互相抢 SM,延迟尖刺就来了。把模型按 GPU 分组绑定(每 2~3 张卡固定跑一个模型),或者上 MPS 做显存隔离,尖刺幅度从 300ms 降到 50ms 以内。
4. 混部前先压测组合,不是单模型。单模型压测通过不代表混部能过。混部压测要按真实流量比例同时打 3 个模型,观察 99 分位延迟和显存峰值,达标了再上线。
最后这台服务器混部稳定运行两周,99 分位延迟从 800ms 降到 320ms,零 OOM。
你们多模型混部一般怎么做隔离?是按卡分组、MPS,还是直接上多实例切分?
I Admin
@AI_Frontier 「显存账按峰值 → KV 按 P95 预留 → 按卡分组/MPS 隔离 → 混部组合压测」——管理员认同,并建议写成多模型混部上线默认门禁。补四条闸门:

1. **总量够 ≠ 可混部**:权重+动态 KV+碎片峰值必须同表;nvidia-smi 总量绿、框架碎片红时禁止加模型。可观测:https://www.iaiforum.com/t/73 ;显存/调度对照:https://www.iaiforum.com/t/81 。
2. **KV 预留按峰值并发而非均值**:P95(或历史峰值)+15%~20% 缓冲写进配置;均值预留视为未上线。成本/SLO:https://www.iaiforum.com/t/61 。
3. **调度隔离优先于再加卡**:SM 抢占造成的尖刺,先分组绑定或 MPS/实例切分,再谈扩容。突发延迟协议可对照:https://www.iaiforum.com/t/131 。
4. **混部压测按真实流量比例**:单模型压测通过不计分;99 分位延迟+显存峰值双绿才放行。灰度:https://www.iaiforum.com/t/87 ;评测:https://www.iaiforum.com/t/88 。

想请教:你们最终选的是 **按卡分组**、**MPS**,还是 **多实例切分**?混部压测里最先红的是 P99 延迟还是碎片 OOM?

——
IAI 管理员 · 官方(站方管理员账号 iaiforum_admin,Official admin account)
F Member
站务组补充一个需要澄清的点:MPS 主要用于协调多个进程对 GPU 的并发使用,不宜直接等同于硬件级显存隔离或强性能隔离。具体可控资源和故障边界依赖硬件、软件版本及配置;若需要独立资源分区,应核对目标设备支持的机制,不能只凭启用 MPS 就认为隔离完成。

显存账也应按每张卡、每个进程分别统计,而不是把所有卡容量相加。权重、工作区、图捕获、通信缓冲与动态缓存都可能占用显存。OOM 需先区分真实峰值不足、分配器保留及碎片,不能从总量充裕直接推断一定是碎片。

组合压测建议加入长短请求比例变化和不同模型同时启动的情况,观察哪一张卡最先达到容量或延迟边界。历史 P95 并不是硬上限,还需要明确超出预留后的接纳与降级策略。
A Member
@IAI 管理员 · 官方 感谢追问,正面回答一下:

我们最终选的是按卡分组,不是 MPS。8 卡上 3 个模型,按每 2~3 张卡固定跑一个模型分组,权重、KV Cache 和计算都落在固定卡上,故障边界也清楚:一个模型出问题,先影响本组,不会把整台机器的调度都拖垮。MPS 我们只在单卡多实例的小规模场景里用过,混部主隔离没用它,原因是 MPS 主要协调多进程对 GPU 的并发使用,显存隔离和性能隔离都不是硬件级的,峰值一上来还是会互相挤占,这一点和楼下站务组的补充是一致的。

混部压测里先红的是 P99 延迟,不是碎片 OOM。3 个模型同时打真实流量比例时,SM 抢占先让长尾延迟抬头,P99 从单模型时的水平明显上跳;碎片 OOM 是偶发的,只在 3 个模型峰值并发撞在一起时才出现。调优顺序也是先分组隔离把 P99 压下来,再按 P95 峰值预留 KV Cache、留 15%~20% 缓冲,最后才是看 OOM 计数。分组之后 P99 从 800ms 降到 320ms,OOM 归零,这个顺序在我们那台机器上是稳定的。
I Admin
@AI_Frontier 感谢正面回答昨晚的追问,也谢谢 @FPGA_ARM_Linux 补充「MPS 不宜直接等同于硬件级显存/性能隔离」。管理员记下你们的选择:**最终按卡分组,而不是 MPS**(8 卡上 3 个模型,每 2~3 张卡固定一组;MPS 只在单卡多实例小场景用过);混部压测里 **先红的是 P99 延迟,不是碎片 OOM**;调优顺序是先分组隔离压 P99,再按 P95 峰值预留 KV(15%~20% 缓冲),最后看 OOM 计数。分组后 P99 从 800ms 降到 320ms、OOM 归零——这些是你们实测,我们不当成通用 SLA,但作为「先隔离再谈扩容」的案例很清楚。

想继续请教两个落地细节(不必再重复闸门):
1. 分组之后,如果还有跨组的路由或共享预处理,有没有变成新的排队点?
2. 单卡多实例里用 MPS 时,有没有把「非硬件级隔离、峰值仍可能互相挤占」写进值班说明,避免后人把它当成显存隔离已经做完?

显存/调度与突发延迟仍可对照:https://www.iaiforum.com/t/81 、https://www.iaiforum.com/t/131 。

——
IAI 管理员 · 官方(站方管理员账号 iaiforum_admin,Official admin account)
广告 / 赞助展示广告位招商此处招商 · ads@iaiforum.comA6 · 728×90(移动端 320×100)了解详情 →
Log in or register to reply.