大模型常见推理框架:vLLM、Tensorrt-LLM、DeepSpeed、Text Generation Inference(TGI)、原生LLM。
❝对相关技术与理论的了解有助于我们在遇到各种问题时,能有对应的分析思路与解决策略;可以说这是一个知识广度的积累。虽然说,掌握其完整的设计原理与概念理论比较难,但知其逻辑是非常有必要的,尤其是应用场景。
vLLM
概述
- 背景:来自加州大学伯克利分校、斯坦福大学、加州大学圣迭戈分校的研究人员基于操作系统中经典的虚拟(Virtual)内存和分页(Page)技术,提出了一个新的注意力算法 PagedAttention,并打造了一个LLM服务系统——vLLM。
- 原理简介:vLLM通过借鉴虚拟(Virtual)内存的原理,采用固定大小的块和动态映射的方式,有效地管理了内存,减少了内存浪费。从原理实现来看,我个人觉得 其命名中的 v 即这里的虚拟(Virtual)含义。
官方介绍文档翻译:PagedAttention(vLLM):更快地推理你的GPT[1]。
对于模型的批量推理/并行推理,需要解决如下的几个问题:
- 对Early-finished Requests的处理:不同请求所生成的文本长度不一致,可能差别很大,并且不易预测。如果没有一个将已生成结束的请求从Batch中移除并提前返回结果的机制,那么只能等一个Batch内所有请求都完成生成后才返回生成结果,导致生成短文本的用户则需要多“陪跑”数秒到数十秒才能得到结果,这对于服务响应时间是不利的;
- 对Late-joining Requests的处理:完整生成一段文本需要长达数秒或数十秒的时间,是漫长的。所以如果没有一个将新请求插入到推理Batch的机制,那么只能像CV业务那样,等前面的请求都完成推理了才进行后续请求的推理。这会导致请求需要在系统中长时间等待排队,表现为服务响应时间过长甚至不可接受;
- Batching an arbitrary set of requests:每个请求对应的QKV Tensor的Length维度各不相同,在批量计算Attention时,需要处理此问题。诚然Padding+Masking的方法可以解决,但严重浪费算力和显存,对于算力和显存均有限的推理GPU是不利的。
在这个过程中,vLLM通过PagedAttention技术和“先来先服务(FCFS),后来先抢占,gpu不够就先swap到cpu上”的调度策略(Scheduler),在1个推理阶段处理尽可能多的请求,解决高并发场景下的推理吞吐问题。这就是整个vLLM运作的核心思想。
应用
vLLM解决了什么啥问题呢?以下是一些关于vLLM推理框架的关键点:
- 分区(Partitioning):vLLM推理框架通过将大型语言模型分解为多个部分来实现推理加速。这些部分可以是在不同设备上执行的,例如在CPU、GPU或TPU上。通过这种方式,可以并行处理模型的不同部分,从而加快推理速度。
- 虚拟内存(Virtual Memory):vLLM推理框架利用虚拟内存技术来管理模型在内存中的数据。通过将模型所需的数据加载到虚拟内存中,可以减少实际内存的使用,并提高数据访问的速度。
- 量化(Quantization):vLLM推理框架通过将模型参数和输入数据从浮点数转换为低精度表示(如8位整数或4位整数)来实现推理加速。量化可以减少模型的参数量和计算量,从而加快推理速度。
- 蒸馏(Distillation):vLLM推理框架还可以通过蒸馏技术来减少模型的大小和计算复杂度。蒸馏是一种将大型教师模型(teacher model)的知识传递给小型学生模型(student model)的技术。学生模型具有较少的参数,但在性能上与教师模型相似。通过蒸馏,vLLM推理框架可以加速模型的推理速度。
- 混合精度(Mixed Precision):vLLM推理框架还可以使用混合精度技术,将模型中的某些部分保持为浮点数,而其他部分则使用低精度表示。这种方法可以在不牺牲太多性能的情况下,提高推理速度。
- 并行计算(Parallel Computing):vLLM推理框架可以利用并行计算技术来加速模型的推理。通过在多个处理器核心或多台设备上同时执行模型的一部分,可以显著提高推理速度。
以上是概念性的总结,但对于在实际应用中,vLLM的并行计算与虚拟内存两大关键点,帮我解决了模型并行的问题。
在 聊聊ChatGLM3多用户并发API调用的问题 一文中,讲述了问题及相关的背景,而通过vLLM推理框架解决了我的问题——单卡下,在内存24G的情况下,支持5-10个并发请求的访问。
[1] PagedAttention(vLLM):更快地推理你的GPT: https://juejin.cn/post/7259249904778018853#heading-2