一句话定义:噪声邻居(Noisy Neighbor)指多个租户共享同一份计算资源时,其中一方的正常业务波动占满了共享瓶颈(显存带宽、缓存、网络、CPU 时间片),导致另一方的延迟出现无法解释的抖动和长尾;双方通常都不知情,也谈不上故障与恶意。
原理:平均延迟与 P99 的落差
很多人排障时只看平均值:平均延迟 40ms,看起来一切正常;可用户投诉不断,一看 P99 已经是 400ms。问题多半出在“共用”这件事上。
打个比方:你和邻居合租一套房,厨房、卫生间和水管都是公用的。你早上刷牙时水压突然变小,只因隔壁开了洗衣机。隔壁没做错什么,他也不知道你在刷牙,但你的体验实实在在地变差了。噪声邻居就是同一个道理,只是场景换成了同一张 GPU 卡或同一个宿主机。
AI 基础设施里,算力相对好切分,但共享的“水管”很难切:显存带宽、L2 缓存、PCIe 通道、内存控制器、网卡队列都由多个任务共用。当邻居的任务恰好在一瞬间申请大量高带宽操作(比如做一次大 batch 的 prefill、拷贝权重、写日志到本地盘),你的 kernel 拿不到足够的带宽,就得排队。排队论告诉我们:资源利用率越高,排队延迟呈非线性增长——95% 的利用率下,延迟可能翻好几倍。这就是“忽高忽低”的来源:抖动不出在均值上,而是出在长尾上。
它和相邻概念的区别值得说清:
- 资源超卖(overcommit):平台主动把 1 张卡卖给 3 个人,是策略选择;噪声邻居是策略之下必然出现的副作用。
- 恶意攻击:邻居是有意为之,比如挖矿、刷接口;噪声邻居是无意的正常波动。
- 硬件故障:故障会持续恶化且可复现;噪声邻居往往随邻居的流量曲线起落,白天明显、夜里消失。
几种常见的共享与隔离方式
| 共享方式 | 隔离了什么 | 噪声邻居风险 |
|---|---|---|
| 时间片轮转 | 只隔离执行时间,任务不并行 | 显存、带宽仍可能互相影响,切换有开销 |
| 多进程共享(如 MPS 类机制) | 让多任务真正并发使用 GPU | 缓存与带宽竞争最明显,尾部延迟容易劣化 |
| 硬件分区(如 MIG 类机制) | 显存与计算单元物理切分 | 风险显著降低,但分区粒度与弹性受限制 |
| 整卡独占 | 全部资源归一方 | 基本无此问题,成本最高 |
具体型号是否支持、支持到什么粒度,以各厂商官方页面为准。
对从业者的实际意义
做推理服务,SLO 要盯 P95、P99 而不是均值,均值会掩盖一切;上量前在“共置”环境做压测,别在独占卡上测完就发布;对延迟敏感的业务优先选硬件分区或独占;做容量规划时给利用率留出余量,别逼近 100%;至少能让指标带上“同卡邻居”的维度,否则你永远分不清变慢是模型的问题还是隔壁的问题。
噪音邻居不可怕,可怕的是它不会出现在你的监控面板上。
