问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

探索LLM推理的延迟/吞吐量和成本空间

创作时间:
作者:
@小白创作中心

探索LLM推理的延迟/吞吐量和成本空间

引用
CSDN
1.
https://blog.csdn.net/Python_cocola/article/details/141575548

本文将深入探讨大型语言模型(LLM)推理过程中的关键指标、影响因素及优化方法。通过分析吞吐量、延迟和成本等核心指标,结合实际应用场景,介绍多种优化策略,帮助读者更好地理解和优化LLM推理性能。

关键指标

在讨论优化方法之前,我们先来明确几个关键指标:

  • 吞吐量:指每秒可以处理的查询数,目标是最大化批处理任务的吞吐量。
  • 延迟:衡量生成每个token所需的时间,反映系统响应速度。目标是尽可能降低延迟,应低于每分钟250个字。
  • 成本:成本越低越好。

解码过程的关键因素

在理解了这些指标后,让我们看看影响这些指标的主要因素:

  • 参数量:以70亿参数的模型为例,推理过程需执行约2P x 批量大小的浮点运算(FLOPS)。
  • 内存加载:执行浮点运算过程中,需要将整个模型参数加载到GPU内存中,涉及的内存移动量与批量大小无关,但加载时间与模型大小和内存带宽有关。
  • 批量大小:在A100 GPU上,硬件可实现的总FLOPS乘以2再除以内存带宽的结果约为400,批量大小在此范围内非常关键,过低会导致计算能力浪费,过高则会增加延迟。

LLaMA模型示例分析

以LLaMA模型为例,我们可以更具体地理解这些因素:

  • 模型内存计算:LLaMA模型的内存使用为14GB(70亿参数,FP16)。还需考虑KV缓存,实际内存需求随序列长度和批量元素的增加而变化。
  • 最大批量大小:在24GB内存的A100 GPU上,最大批量大小约为5,而在80GB内存的A100上,最大批量大小约为33,均远低于400。这表明实际推理过程受到内存带宽的限制。

优化方法

接下来,我们将介绍几种有效的优化方法:

1. 分组查询注意力(Grouped Query Attention)

  • 方法:减少KV缓存大小,通过一个键值对关联一组查询。
  • 应用:LLaMA 2中使用,适用于更大规模的模型。
  • 效果:浮点运算次数不变,内存成本减少四分之一。

2. 量化(Quantization)

  • 方法:使用INT8或INT4版本的模型。
  • 应用:LLaMA发布后出现的现成解决方案。
  • 效果
  • INT8:模型大小减半,计算速度提高约1.5倍,KV缓存内存增加,加载时间减少。
  • INT4:模型大小减少到四分之一,有些性能损失,但可通过技术恢复。

3. 分页注意力(Paged Attention)

  • 方法:在GPU内存中分配块,而不是固定的矩形内存。
  • 应用:由伯克利的vLLM团队开发。
  • 效果:更好的内存分配粒度和控制,减少内存浪费。

4. 滑动窗口注意力(Sliding Window Attention)

  • 方法:训练模型只使用缓存中的过去K个token。
  • 应用:在Mistral中实现。
  • 效果:允许固定大小的缓存,缓存位置无关紧要,易于实现且效果好。

5. 连续批处理(Continuous Batching)

  • 方法:将预填充阶段的token与解码token一起批处理。
  • 应用:改进vLLM和TGI中的批处理效率。
  • 效果:更有效地分配资源,减少延迟。

6. 代码优化

  • 方法:减少Python代码的开销,使用CUDA Graphs、TensorRT LLM、和自定义内核。
  • 应用:Xformers仓库的例子和NVIDIA的TensorRT LLM。
  • 效果:减少内存带宽使用,提高推理速度。





总结

使用开源代码在小规模实例上运行小型模型真的很容易。它无需任何特殊操作就能很好地工作。我估计,我可以让Mistral 7B模型在A10上每天处理100万次请求,成本大约15美元,这并不算高。如果改变精度,处理的请求数量几乎可以翻倍。开源部署解决方案在易用性方面做得非常出色。我认为在实际模型代码部分还有很多优化空间,我已经提到了许多已经实现或即将实现的技巧。因此,我相信大家的运行速度会越来越快,这是一个好趋势。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号