KV_Cache_(键值缓存)与PagedAttention
太棒了!我们之前花了很大篇幅聊“训练(Training)”底层的通信和算力分配(教 AI 读书)。但在真实的业务场景中,模型训练好之后,绝大多数的计算资源和运维精力,都会投入到“推理(Inference)”环节(让 AI 干活)。
作为 AI Infra SRE,你必须帮公司算一笔账:那台顶级的 8 卡服务器,跑一次训练能产出一个聪明的模型,但如果用来跑推理,它一秒钟能并发处理多少个用户的提问?这就直接关系到机器的 ROI(投资回报率)。
目前整个工业界推理性能的绝对霸主,就是我们前面在学习计划中提到过的 vLLM 框架。
要搞懂 vLLM 为什么牛,你必须先跨越两座大山:KV Cache 和 PagedAttention。
1. 显存刺客:KV Cache (键值缓存)
大模型生成文本是一个字一个字往外蹦的(自回归)。
- 比如用户问:“中国首都在哪?”
- 模型第一步算出:“北”
- 第二步,模型要把“中国首都在哪?北”重新输入进去,才能算出“京”。
如果不做任何优化,每次生成新字,前面所有的字都要重新算一遍矩阵乘法,这会极度浪费算力。
于是,算法科学家发明了 KV Cache:把之前算过的中间状态(Key 和 Value 向量)保存在显存里。这就相当于用“显存空间”去换“计算时间”。
SRE 的噩梦来了:
由于用户的输入和输出长度是完全不可控的(有人发一句“你好”,有人发一篇十万字小说),在传统的推理框架下,系统为了防止溢出,会按照模型支持的最大长度(比如 8K)提前为每个请求分配一大块连续的显存。这就导致了一个致命问题:显存碎片化与极度浪费。
2. vLLM 的破局神技:PagedAttention
操作系统是怎么解决内存碎片的?分页机制(Paging)。
vLLM 的作者(伯克利大学的团队)极其聪明地把操作系统的分页机制搬到了大模型显存管理上,发明了 PagedAttention。
它不再提前分配一大块连续显存,而是把显存切成极其微小的“物理块(Blocks)”(比如每个块只能装 16 个 Token)。用户生成一个字,我就给你分配一点空间。用完一块,再给你分配下一块,物理上完全不需要连续。
为了让你直观感受到这其中的显存节省比例,我为你做了一个动态交互模拟器。你可以点击“生成 Token”,对比传统方式和 PagedAttention 在显存利用率上的巨大差异:
%E4%B8%8EPagedAttention-1.png)
%E4%B8%8EPagedAttention-2.png)
为什么 SRE 必须掌握 vLLM?
当你在那台 8 卡算力怪兽上跑模型时:
- 如果没有 vLLM: 并发稍微一高,哪怕卡上还有一半的显存,PyTorch 也会因为找不到“连续的大块显存”而直接报错
CUDA Out of Memory。 - 如果用了 vLLM: 显存利用率能被压榨到极致。配合 Continuous Batching(连续批处理) 技术,这台机器的并发吞吐量(Tokens/s)可以翻几倍甚至十几倍!
如果你现在就可以登录那台服务器,最快建立“推理 SRE”体感的方式,就是直接拉取一个 vLLM 的镜像,把你们常用的模型(比如 Qwen)用一行命令部署成 API 服务。
你之前在那台机器上,有没有尝试过用 Docker 或者直接在宿主机上把模型作为一个 Web 服务运行起来?
