金融私有化大模型推理吞吐优化与显存治理落地

日期:2026-09-19

一、项目背景

某股份制银行内网要部署大模型做合规问答,数据安全要求必须私有化,模型不出域。上线初期并发一上来显存就爆,吞吐上不去,业务方等得失去耐心,只能把并发锁得很低,GPU 利用率惨不忍睹,业务部门一度想退回去用关键词检索。这个项目里我最大的体会是:私有化部署最难的不是把模型跑起来,是让它在不浪费卡的前提下接住业务流量。银行那边对稳定性要求又极高,稍微卡顿就会被投诉到科技部,我们压力不小。我们进场时,合规问答一天只能接几十个并发,业务方排队等到失去耐心,科技部已经收到好几起投诉,私有化大模型眼看要被砍预算。

我们进场时科技部已经收到好几起投诉,私有化大模型眼看要被砍预算,所以这次优化的目标不是跑分多漂亮,是先把业务方从排队等到即问即答这个体验救回来。

我们进场时科技部已经收到好几起卡顿投诉,私有化大模型眼看要被砍预算,所以这次优化第一目标不是跑分,是把业务方从排队等到即问即答的体验先救回来,保住项目再说别的。

二、落地场景

我们用 vLLM 做推理服务化,张量并行把大模型拆到多卡,连续批处理把并发请求攒成批一起算;KV 缓存做量化压缩,长上下文场景显存水位明显降下来;同时上了显存水位监控,水位到阈值就触发限流而不是等到 OOM 才崩。整个底座跑在信创环境里,和国产卡也做了适配,推理一体机交付到行内机房。合规问答和通用检索分了两条链路,高优低优不互相抢。运维侧能在看板看到每张卡的显存水位和吞吐曲线,扩容缩容有数据支撑,不再是凭感觉留余量。

运维侧能在看板看到每张卡的显存水位和吞吐曲线之后,扩容缩容终于有数据支撑,不再是凭感觉留一大截余量,卡的利用率和稳定性第一次同时保住了。

科技部那边验收时最在意的是稳定性,我们把水位限流和自动告警接进他们的监控大盘,领导一眼能看到,这块心腹大患才算翻篇,后面扩容采购也能说得清楚。

三、关键技术挑战与解决思路

显存峰值治理是第一个坎,长上下文一来 KV 就膨胀,我们上 KV 量化把显存压了近四成,代价是极小精度损失,业务侧感知不到,评测集上掉分在误差范围内。连续批处理调优是第二个,max_num_seqs 设太小吞吐上不来、设太大又炸显存,得压测找平衡,我们按真实业务混合长度分布去压,不是拿均匀长度糊弄,因为真实请求长短不一,均匀长度会高估吞吐。第三个是并发与延迟权衡,金融场景对 P99 敏感,我们给合规问答单独划了高优队列,普通检索走低优,互不抢。第四个是国产卡适配,算子支持度和国外卡有差异,部分算子走了替换实现才跑通,这一块踩坑最多,早做早稳。第五个是监控,水位监控的采样频率要够高,否则限流触发晚了还是 OOM。

监控采样频率这块我们踩过坑,水位采样太粗,限流触发晚了还是 OOM,后来把采样提到秒级才稳,这种细节上线前压测看不出来,得真跑起来才暴露。

四、效果数据

调优后单卡吞吐比初期提升约 2.6 倍,同样的卡能接更多并发,科技部不用再申请加卡;显存利用率从常年在 30% 出头拉到 70% 左右,不再浪费,电费和卡资源都省了;P99 延迟在目标并发下稳定在可接受区间,业务方不再投诉卡顿;可支撑并发上限从锁死的 8 路提到 40 路以上,合规问答从排队等到即问即答。科技部最在意的稳定性,因为加了水位限流,再没出现过 OOM 崩服,半夜被叫起来的次数归零。评测集上精度掉分在容忍内,业务侧没察觉。

评测集上精度掉的那点分,业务侧完全没察觉,说明 KV 量化的精度损失在容忍内,这笔账算下来很划算,用极小精度换来了近四成的显存和翻倍的吞吐。

五、可复用经验总结

吞吐真不是堆卡堆出来的,先把 KV 缓存和批处理参数调对,显存才有余量接更多并发。我们一开始迷信加卡,钱花了显存还是炸,回头把参数调好反而更稳。但长上下文场景必须单独压测,不能拿短文本的结论套,否则上线即翻车,这点我们在一次全量切换时吃过实亏,半夜被叫起来回滚。监控水位比监控延迟更该当成首要指标,因为显存先没了后面全白谈。信创适配要早做,别等交付前两周才发现算子不支持,那会卡住整个交付节奏。连续批处理的参数得按真实分布压,均匀长度骗自己最坑。

连续批处理的参数得按真实分布压,我们用均匀长度压测时一度高估了吞吐,上线才发现长短请求混着来会掉,后来换成真实混合分布重压才定准。

案例片段(已脱敏): vLLM 启动参数与 KV 量化配置片段:bash python -m vLLM.entrypoints.api_server >   --tensor-parallel-size 4 >   --max-num-seqs 256 >   --kv-cache-dtype fp8_e5m2 >   --gpu-memory-utilization 0.85一次水位限流日志(修复前 OOM):[GPU] mem 97% reached, OOM imminent, reject new seq [LIMIT] trigger watermark=0.85, queue depth=31 [AFTER] fp8 kv + tune, mem peak 0.78, no OOM under 40并发