多租户GPU这一年踩过的坑
周一早上九点,告警群里第一条消息不是晨会通知,是"显存爆了"。我们那台被三个业务共同盯上的卡,占用率直接顶到百分之百,监控曲线拉成一条直线。A 业务说昨晚只发了点测试流量,B 业务说模型就 7B,加载完也就十几个 G,C 业务说别看我,我早上刚重启过。三拨人在群里吵了半个多小时,最后矛头齐刷刷指向运维:你们当初怎么不买显存大的卡?
这种场面我估计不少人眼熟。公司要省成本,GPU 不可能一人一张,一张卡上挤两三个业务是常态。尤其做模型推理的,模型不大,单业务占不满整卡,共享几乎是唯一选择。但共享这件事,方案书里写得天花乱坠,落地之后完全是另一种剧本。
先说这一年多租户 GPU 共享到底有什么进展。vGPU 基于 SR-IOV 在固件层把一张卡切成多个虚拟功能,每个虚拟功能有独立显存、独立计算单元、独立 DMA 通道,理论上是硬隔离,谁也别想吃到谁的。MIG 更彻底,A100、H100 这类卡能在硬件上切成最多七个实例,显存、带宽、二级缓存都各归各。不想上硬件方案的,还有时间片切分、MPS、容器级隔离,甚至有人用拦截 CUDA 调用的办法做软限制。还有人在打权重共享的主意:同一份模型权重驻留显存,多个租户复用同一份副本,显存是省了,权限和计费又成了新账。看起来条条大路通罗马。
实际落地呢?显存隔离不等于性能隔离,这是第一个坑。显存给你切了二十个 G,算力还是共享的,邻居一跑训练,你的推理延迟照涨不误。切分粒度也由硬件说了算,MIG 的实例规格是固定的,不是你想切几 G 就切几 G。vGPU 要企业授权,要特定驱动,要虚拟化平台配合,光环境就够折腾一星期。更别提很多团队连驱动版本都不敢乱动,一升级,隔壁业务的推理延迟先给你表演一个断崖。方案能跑通演示,和方案能扛住生产,中间隔着一条河。
真正让人崩溃的时刻,我随便数几个。
第一个,业务 A 的显存泄漏。推理服务挂着跑,显存占用像楼梯一样只上不下,每天涨两三个 G。PyTorch 的缓存分配器本来就不爱把内存还给系统,代码里再有个张量引用没释放,就是个无底洞。nvidia-smi 里已用一路爬升,剩余趋近于零,同卡的其他业务跟着遭殃。查到最后,是推理循环里一个列表没清,就这一行代码的事,把整卡拖死了一周。
第二个,权重加载到一半显存不够。模型是分层加载的,加载到第二十层的时候 OOM,前面十九层全白干,进程直接退出。更要命的是显存碎片化------显示还剩十个 G,但都是零碎的空洞,凑不出一块连续的大内存,任务就是起不来。这比单纯不够用还难查,监控上根本看不出异常。
第三个,时间片切换的开销。多个业务时间片轮转共用一张卡,GPU 上下文切换不是免费的。平时八十毫秒的接口,邻居一跑大任务,直接飙到一秒往上,p99 一路击穿。你这边负载明明不高,锅全让隔壁背了,但隔壁也委屈,人家也交了钱的。后来我们把关键业务挪到独立卡上,才消停。
第四个,SLA 不达标。说好的服务质量保障,在共享环境里基本靠自觉,租户之间抢算力抢带宽,商务那边天天被客户怼,天天来问运维:这共享到底行不行。行不行,我们心里也没底。
当然也有让人又气又笑的时刻。
比如上了资源隔离之后,利用率反而降了。原来一张卡挤三个业务,利用率百分之八十,看着心慌;切完之后每个虚拟卡都闲着一大半,加起来不到百分之五十。稳定性保住了,钱包开始疼,老板开始问:这卡是不是白买了。
再比如查了一整天延迟问题,最后发现是隔壁业务把 batch_size 从 1 改成了 8,人家的理由是"反正卡上还有显存"。还有一次,监控面板上三个租户全绿,线上用户却在排队。因为监控看的是平均利用率,平均是绿的,峰值全撞在同一秒。
那怎么让多租户分配不再扯皮?这一年踩下来,我的体会就几条。
第一,先把业务分清楚。在线推理要稳定延迟,离线训练要长时间吞吐,开发调试能容忍波动。三类负载不该用同一种切分策略,让用户自己选,而不是一刀切。
第二,显存配额必须是硬限制。能上 MIG 就上 MIG,硬件隔离最省心;不支持硬切分的卡,用进程级显存上限或者容器配额兜底。配额写进资源申请流程,靠自觉这件事,我是不信了。
第三,上线前做隔离验收。并发压测,记录延迟抖动、邻居影响,写成可复查的测试记录。样例能跑通不算数,真实负载、真实输入才算数。
第四,监控得能解释"为什么慢"。显存占用、算力占用、任务排队、邻居任务、容器重启,这些指标要能关联起来。只看平均利用率,问题永远藏在水面下。
第五,留冗余。利用率别奔着百分之百去,百分之七八十是合理区间,得给碎片和峰值留空间。第六,该整卡就整卡。关键业务、对延迟敏感的业务,别省那一张卡的钱,共享省下来的钱不够赔一次事故的。
多租户共享这事,本质是拿稳定性换成本。方案没有对错,只有合不合适。把期望管理好,把配额定死,把监控做细,这日子还是能过的。
本文基于公开技术资料与行业实践整理,不构成具体产品选型或部署方案建议。