输入“/”快速插入内容

LLM推理加速,如何解决资源限制与效率挑战

2024年7月15日修改
作者:Zane | 神州问学
💡
LLM加速推理,GPU资源破局之道。
引言
大型语言模型(LLM)已经在多种领域得到应用,其重要性不言而喻。然而,随着这些模型变得越来越普遍,对GPU资源的需求也随之激增,导致了资源的紧缺。这种紧缺主要源于以下几个方面的原因:
技术发展需求: 随着人工智能技术的快速发展,特别是在深度学习和大型语言模型领域,对GPU的需求急剧增加。这些模型需要大量的计算资源进行训练和推理,而GPU因其并行处理能力成为首选硬件。
市场供应限制: GPU的市场供应受到多种因素的限制,包括生产能力、原材料成本、市场需求等。此外,加密货币挖矿的需求也对GPU的供应造成了压力。
研发成本回收: GPU作为高技术含量的产品,其研发和生产成本较高。为了回收成本并实现盈利,GPU的价格也随之上涨。
国际形势影响: 国际贸易政策和政治形势的变化也可能影响GPU的供应链,进一步加剧资源紧缺的状况。
显存碎片化问题
显存碎片化指的是显存中存在许多零散的小块空闲空间,这些空间无法被利用来分配较大的连续内存块,从而降低了显存的使用效率。由于GPU资源受限,通过高效地使用显存可以相较而言,更好地提升大模型的推理和训练效果。
显存碎片化主要由动态内存分配、多任务运行和不同内存需求造成。在模型推理或训练过程中,程序会频繁申请和释放显存,导致显存中留下许多无法被重新利用的小块空间。在共享的GPU环境中,多个任务可能会同时运行,每个任务都有自己的显存需求,这可能导致显存分配不均,进一步产生碎片。此外,不同的模型或模型的不同部分可能需要不同大小的显存块,使得难以找到合适的连续空间来满足某些大块内存需求。
这种显存碎片化会降低显存的整体使用率,使得实际可用的显存可能不足以支持大模型的运行,从而会增加模型的推理或训练时间,并限制了可以加载到显存中的模型大小,因为大模型需要连续的大块显存空间。这些因素共同影响了大模型推理或训练的效率和可行性。
为了应对这些挑战,业界和学术界正在探索多种解决方案,包括优化模型结构以减少资源需求、改进显存管理策略、使用专用硬件和软件工具来提高GPU利用率等。通过这些努力来缓解GPU资源紧缺的压力,更有效地利用计算资源从而提升大型模型推理的效率和可行性。
vLLM加速推理框架简介
vLLM是一种解决当前GPU资源限制的方案,它是一个快速且易于使用的 LLM 推理和服务库。它在服务吞吐量方面是最先进的框架,同时开创性的使用PagedAttention高效管理注意力键和值内存,并且支持多种量化模型等,不仅如此它还与Hugging Face模型无缝衔接,对分布式推理并行支持兼容OpenAI的API服务器,还支持了上百种开源模型。
vLLM 由加州大学伯克利分校开发,23年期间在Chatbot Arena 和 Vicuna Demo进行了部署。即使像 LMSYS 这样的小型研究团队计算资源有限,也能负担得起 LLM 服务的核心技术。随后Koala 和 LLaMA等越来越多受欢迎的模型都开始使用vLLM提供服务。
vLLM 采用了分页注意力算法(PagedAttention),这是一个新型注意力算法,可有效管理注意力键和值。配备分页注意力算法的 vLLM 重新定义了 LLM 服务的新技术水平:它的吞吐量比 HuggingFace Transformers 高出 24 倍,而且无需更改任何模型架构。
vLLM框架下的模型加速技术
LLM的核心是一个自回归变化器模型。模型根据输入(提示)和它迄今为止生成的输出标记的前一序列,一次生成一个词(标记)。每次重新搜索时,都需要重复这个昂贵的过程,直到模型输出一个终止标记。这种顺序生成过程使得工作负载受到内存的限制,无法充分利用GPU的计算能力,限制了服务吞吐量。将多个请求分批处理可以提高吞吐量。但是要批量处理多个请求,就必须有效管理每个请求的内存空间,例如图1展示了在配备40G内存的英伟达A100GPU上处理13B参数的LLM的内存的分配情况。大约65%的内存分配给了权重模型,这些权重在服务过程中保持不变。近30%的内存用于存储请求的动态状态。对于Transformers而言,这些状态与注意力机制相关的键和值张量,通常称为KV缓存,他们代表了从早期标记到依次生成新输出标记的上下文。而这些KV 缓存又有以下特点:
●大:在 LLaMA-13B 中,单个序列最多需要 1.7GB。
●动态:其大小取决于序列长度,而序列长度是高度可变和不可预测的。因此,有效管理 KV 缓存是一项重大挑战。由于碎片化和过度保留,现有系统浪费了60% - 80%的内存。
其余的小内存的百分比用于其他数据,包括被激活的在评估LLM时创建的短暂张量。由于模型的权重是恒定的,而被激活的张量只占GPU内存的一小部分,因此KV缓存的管理方式对于确定最大批次大小至关重要,如果管理不善,KV缓存内存会极大的限制Batch Size,进而限制LLM的吞吐量。