模型推理是什么?大模型上线后真正花钱的环节
推理(Inference)指模型训练完成后,对新的输入做计算并给出结果的过程。训练是“学习”,会不断更新模型参数;推理是“使用”,参数固定不变,只是拿学到的东西来回答问题。你每次向 ChatGPT 提问,背后发生的就是一次推理。中文里“推理”一词也常指 Reasoning(逻辑推理能力),这里说的是工程意义上的推理,即模型运行和服务。
大模型推理的两个阶段
大语言模型的推理通常分两步。第一步叫预填充(prefill):把用户输入的整段提示词一次性并行处理,算出中间状态。第二步叫解码(decode):一个 token 接一个 token 地生成回答,每生成一个都要用到前面所有内容。两个阶段的特点不同:预填充主要吃算力,解码主要吃显存带宽,因为每生成一个 token 都要把模型参数和历史缓存从显存里读一遍。所以两者的优化手段也不一样,有些系统甚至把它们分到不同的机器上跑。
瓶颈常在显存
每个请求在生成过程中都要保存一份不断增长的 KV 缓存(存放前面每个 token 的键和值),同时服务的用户越多、对话越长,占用的显存就越大。如果管理不好,显存会出现大量碎片和浪费,限制同时能处理的请求数。2023 年,Kwon 等人在论文中提出 PagedAttention,借鉴操作系统分页管理内存的思路来管理 KV 缓存,基于它的推理框架 vLLM 在同等延迟下把吞吐量提升了 2 到 4 倍,成为业界最常用的推理框架之一。
常见的推理优化
量化:把模型参数从 16 位压到 8 位、4 位,省显存、提速度。知识蒸馏:用大模型教出一个小模型来服务。投机解码:先让小模型快速猜几个 token,再由大模型一次验证,猜对就省了时间。批处理:把多个用户的请求合在一起算,提高 GPU 利用率。还有提示词缓存,相同的长前缀不用重复计算。
对 AI 公司来说,训练是一次性的大投入,推理则是每天都在发生的持续成本。模型越受欢迎,推理开销越大,所以推理效率直接决定了 API 能卖多便宜。