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,还是直接上多实例切分?
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,还是直接上多实例切分?

