为什么大模型推理服务要计算首个token的延迟?其他token的耗时不需要考虑吗?
Erstellt am: 6. Februar 2025
Erstellt am: 6. Februar 2025
为什么大模型推理服务要计算首个token的延迟?其他token的耗时不需要考虑吗?
在实际的大模型推理(尤其是多轮交互或流式输出场景)中,“首个 token 的延迟”(time to first token)往往是用户侧最关注的指标之一,这和后续 token 的生成方式、系统开销以及用户体验特点都有关系。主要原因包括:
用户体验视角:首token是“可见响应”的标志
推理过程视角:首token计算开销通常最高
服务指标视角:首token延迟 + 吞吐/速度
实际需求不同,考量重点不同
综上,大模型推理服务往往把“首个 token 的延迟”作为核心指标,是因为它直接关系到交互场景下用户的即时响应体验;后续 token 通常使用增量计算、耗时更低,且用户对于后续输出的延迟敏感度也不如“首个字符何时出现”那么高。因此,在衡量大模型性能时,人们往往既看“首token延迟”,也关注“后续 token 生成的吞吐速度(或整体耗时)”,二者缺一不可,但在不同场合下的关注度会有所侧重。
请详细解释下,为什么后续token生成可采用增量更新,因此花销比首token小
后续 token 的生成相比首个 token 的计算开销较小,主要是因为在生成过程中,很多计算可以通过增量更新(incremental computation)来优化,从而大大减少了重复计算的工作量。具体来说,以下几个因素解释了为何后续 token 生成的花销通常比首 token 小:
大多数现代大模型(如 Transformer 类模型)在推理过程中,处理每个 token 时会使用到“注意力机制”(Attention Mechanism)。为了生成一个新的 token,模型需要根据上下文(输入的 tokens)来计算当前 token 的表示。
首个 token 的计算:
后续 token 的生成:
Transformer 模型的核心计算就是自注意力机制(Self-Attention),其关键思想是对输入的所有 token 进行相互之间的加权求和。在生成每个 token 时,需要计算当前 token 对所有前面已经生成的 token 的影响。
例如,在解码器阶段(如 GPT 系列的自回归生成),每生成一个 token 后,它会被追加到当前的上下文中,然后基于更新后的上下文继续生成下一个 token。因为之前生成的 token 的计算结果已被缓存,所以生成每个新的 token 时,计算量大大减少。
大多数现代语言模型(如 GPT 或 T5)使用内部缓存机制来优化生成过程。具体来说:
由于缓存机制,后续每个 token 的生成仅需要计算新生成的 token 的查询(Q)向量与之前生成的键(K)和值(V)的相互作用,避免了重复计算之前已经生成的内容。
为了进一步降低后续 token 生成的计算开销,一些模型采用了并行化和批量计算的技术:
批量生成:在许多实现中,可以同时生成多个 token(比如使用 beam search 或并行解码策略)。这样,模型的计算可以在多个 token 之间共享相同的计算资源,从而减少重复计算。
并行化计算:由于每个 token 生成时只需要考虑已经生成的 token,并不会依赖于未来的 token,这种特性使得模型能够在一定程度上并行化后续 token 的计算。虽然这种并行化通常会受到硬件架构的限制,但仍能显著提高生成效率。
在生成后续 token 时,通常会使用之前生成的 token 来逐步改进模型的推理。这个过程中,模型的推理依赖于局部上下文(即前面生成的 token)。相比于完全从头开始的首个 token 生成,后续 token 的生成仅依赖于较小的局部上下文,从而能够更快速地推理。
总的来说,后续 token 生成的计算花销通常低于首个 token,因为:
这些因素共同作用,使得生成后续 token 时的计算开销显著低于生成首个 token。