SpecExec: Massively Parallel Speculative Decoding for Interactive LLM Inference on Consumer Devices
作者: Ruslan Svirschevski, Avner May, Zhuoming Chen, Beidi Chen, Zhihao Jia, Max Ryabinin
分类: cs.CL
发布日期: 2024-06-04 (更新: 2024-11-30)
💡 一句话要点
SpecExec:面向消费级设备的LLM大规模并行推测解码
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 大型语言模型 推测解码 并行计算 消费级设备 模型量化
📋 核心要点
- 现有LLM推理方法主要面向高端数据中心硬件设计,无法充分利用消费级设备的特性。
- SpecExec利用LLM token概率分布的尖峰性和模型输出概率对齐性,构建缓存树加速解码。
- 实验表明,SpecExec在消费级GPU上实现了50B+参数LLM的快速推理,显著提升了推理速度。
📝 摘要(中文)
随着大型语言模型(LLM)的广泛应用,高效运行它们变得至关重要。LLM推理的最新研究使用推测解码来实现极高的加速。然而,这些工作大多隐式地为高端数据中心硬件设计其算法。本文提出了相反的问题:我们如何在消费级机器上快速运行LLM?消费级GPU无法容纳最大的可用模型(50B+参数),必须将其卸载到RAM或SSD。当使用卸载的参数运行时,推理引擎可以同时处理数百或数千个token,这非常适合推测解码。我们提出SpecExec(推测执行),一种简单的并行解码方法,可以为流行的LLM系列生成每个目标模型迭代最多20个token。它利用了现代LLM中token概率分布的高度尖峰性和模型输出概率之间的高度对齐。SpecExec从草稿模型中获取最可能的token延续,为目标模型构建一个“缓存”树,然后通过一次传递进行验证。使用SpecExec,我们展示了在具有RAM卸载的消费级GPU上以每秒4-6个token的速度进行50B+参数LLM的推理,使用4位量化,或以每秒2-3个token的速度使用16位权重。
🔬 方法详解
问题定义:现有的大型语言模型推理方法,尤其是推测解码,主要针对数据中心的高端硬件设计,忽略了消费级设备上内存容量有限,需要将模型参数卸载到RAM或SSD的现实。这种卸载操作导致内存访问成为瓶颈,限制了推理速度。现有方法无法充分利用消费级设备上批量处理token的能力,导致效率低下。
核心思路:SpecExec的核心思路是利用现代LLM中token概率分布的高度尖峰性和模型输出概率之间的高度对齐性,通过并行推测解码来加速推理。具体来说,SpecExec使用一个较小的“草稿模型”快速生成多个可能的token序列,然后使用目标模型并行验证这些序列,从而减少目标模型的调用次数,提高推理速度。
技术框架:SpecExec的整体框架包括以下几个主要阶段:1) 草稿模型生成:使用一个较小的模型(草稿模型)快速生成多个候选token序列。2) 缓存树构建:将这些候选序列组织成一个“缓存树”,其中每个节点代表一个token,每条路径代表一个可能的token序列。3) 目标模型验证:使用目标模型并行验证缓存树中的token序列。4) 序列选择与更新:根据目标模型的验证结果,选择最优的token序列,并更新模型状态。
关键创新:SpecExec的关键创新在于其并行推测解码方法,它充分利用了消费级设备上批量处理token的能力,通过构建缓存树来减少目标模型的调用次数。与传统的推测解码方法相比,SpecExec能够生成更多的候选token序列,从而提高推测的准确性和效率。
关键设计:SpecExec的关键设计包括:1) 草稿模型的选择:选择一个与目标模型相似但规模较小的模型作为草稿模型,以保证推测的准确性。2) 缓存树的构建策略:设计一种高效的缓存树构建策略,以减少内存占用和计算复杂度。3) 并行验证策略:采用并行计算技术,加速目标模型对缓存树中token序列的验证过程。4) 量化策略:使用4位量化或16位权重来减少模型大小和内存占用。
🖼️ 关键图片
📊 实验亮点
SpecExec在消费级GPU上实现了显著的性能提升。使用4位量化时,50B+参数的LLM推理速度达到每秒4-6个token;使用16位权重时,推理速度为每秒2-3个token。这些结果表明,SpecExec能够有效地利用消费级设备的计算资源,实现高效的LLM推理。
🎯 应用场景
SpecExec适用于各种需要高效LLM推理的消费级设备,例如智能手机、平板电脑和笔记本电脑。它可以应用于智能助手、文本生成、机器翻译等领域,使用户能够在本地设备上体验强大的LLM功能,而无需依赖云端服务器。该技术还有助于保护用户隐私,因为数据无需上传到云端进行处理。
📄 摘要(原文)
As large language models gain widespread adoption, running them efficiently becomes crucial. Recent works on LLM inference use speculative decoding to achieve extreme speedups. However, most of these works implicitly design their algorithms for high-end datacenter hardware. In this work, we ask the opposite question: how fast can we run LLMs on consumer machines? Consumer GPUs can no longer fit the largest available models (50B+ parameters) and must offload them to RAM or SSD. When running with offloaded parameters, the inference engine can process batches of hundreds or thousands of tokens at the same time as just one token, making it a natural fit for speculative decoding. We propose SpecExec (Speculative Execution), a simple parallel decoding method that can generate up to 20 tokens per target model iteration for popular LLM families. It utilizes the high spikiness of the token probabilities distribution in modern LLMs and a high degree of alignment between model output probabilities. SpecExec takes the most probable tokens continuation from the draft model to build a "cache" tree for the target model, which then gets validated in a single pass. Using SpecExec, we demonstrate inference of 50B+ parameter LLMs on consumer GPUs with RAM offloading at 4-6 tokens per second with 4-bit quantization or 2-3 tokens per second with 16-bit weights.