大型语言模型(LLMs)在聊天、编程和搜索等各种任务中展现了卓越的能力。然而,LLMs的高成本阻碍了这些模型在绝大多数应用中的部署。在本论文中,我们专注于构建高效的自动化系统,以降低成本并使大型语言模型的使用更加普及。
首先,我们介绍了一些系统来优化计算效率并减少分布式LLM训练的工程开销。我们开发了TeraPipe,提出了一种新的维度来进行LLM的流水线并行训练,并且还开发了Alpa,这是世界上首个能够自动分配任意神经网络并支持所有现有并行化方法的编译器。
尽管训练通常是一项一次性的成本,部署和服务LLM则需要持续进行LLM推理,这成为了LLM在现实世界中部署的最大障碍。我们通过AlpaServe的模型并行性提高了服务的可扩展性,并通过一种新的注意力算法PagedAttention和一个端到端的服务系统vLLM来提高内存利用率和LLM推理吞吐量。 总体而言,这些系统为大型语言模型的训练和推理效率提供了全面的解决方案。它们共同降低了大型语言模型相关的高成本,使其在各种实际应用中的部署更加普及。
https://www2.eecs.berkeley.edu/Pubs/TechRpts/2024/EECS-2024-150.html 大型语言模型(LLMs)为计算行业带来了显著的进步。诸如ChatGPT [101] 这样的对话聊天机器人和GitHub Copilot [46] 这样的编程助手已经深深融入人们的日常生活。然而,由于模型规模庞大和计算需求巨大,LLMs与大多数研究人员和从业者之间仍存在很高的障碍。LLMs通常是具有数千亿参数的大型神经网络。例如,GPT-3模型[18] 具有1750亿个参数,如果以半浮点精度存储,则需要超过350 GB的内存。而目前市场上最先进的GPU仍然只有40-80 GB的内存,这显著低于LLMs所需的内存。为了高效地执行这些LLMs,分布式执行这些模型成为必要,有时甚至需要扩展到数千个GPU的规模。然而,分布式执行需要对模型的执行进行仔细的分区和调度,这种额外的复杂性大大提高了在现实世界中部署这些模型的门槛。 在本论文中,我们设计了算法并构建了系统,以提高计算效率并减少训练和部署LLMs时的工程开销。在接下来的章节中,我们将分别介绍本论文在LLM训练和LLM推理方面的贡献。最后,我们将讨论本论文中介绍的系统对现实世界的影响。
流行的深度学习框架如TensorFlow [1]、PyTorch [104] 和JAX [17] 极大地简化了在单个GPU上训练模型的过程。然而,在进行分布式训练时,复杂性会显著增加,即在多个GPU上训练一个模型。尤其当模型超出单个GPU的内存容量时,模型并行化(即将单个模型划分到多个GPU上)会引入额外的开销,并使实现最佳性能变得更加具有挑战性。 我们从设计新算法来提高分布式训练效率入手。一个显著的低效率来源于由于并行算法中的依赖关系而导致的GPU利用不足的计算开销。为了减少计算开销,我们专注于流水线并行性,其中模型被划分为多个流水线阶段。在这种情况下,低效率来自于所谓的流水线气泡,即没有足够的数据片段来填充所有流水线阶段。在TeraPipe(第2章)中,我们发现了一种新的维度来执行LLMs的流水线并行:我们展示了可以细粒度地在单个序列内的不同标记之间进行流水线处理,从而实现高GPU利用率,使GPT-3规模模型的训练速度提高了5倍。 尽管像TeraPipe这样的算法创新提高了不同模型并行算法的效率,但并没有适用于每种情况的普遍最优算法。选择最优算法与LLM的架构和计算集群的配置密切相关。即使对于系统专家来说,这也是一个挑战,更不用说其他LLM研究人员和工程师了。 为此,我们开发了Alpa(第3章),这是世界上第一个能够自动分配任意神经网络并支持所有现有并行化方法(包括数据并行、张量并行和流水线并行)的编译器。Alpa将这些现有的并行化方法组织到一个分层空间中,对应于计算集群的分层结构,使其能够在每个并行化级别自动得出高效的并行执行计划。结果是,无需对模型代码进行修改,Alpa就可以将任何神经网络转换为分布式版本,并采用接近最优的模型并行策略。这不仅简化了模型并行化的工程工作,还带来了新的能力——Alpa可以生成与手工调优的模型并行训练系统匹配或优于其性能的并行化计划,并且可以推广到现有系统无法并行化的新模型。
虽然训练一直是深度学习的主要焦点,但实际上模型的大部分时间都花在了推理上:模型通常只训练一次,但可以长时间用于推理以处理大量请求。这促使我将研究扩展到解决LLM推理和服务中的实际挑战,优化可扩展性和速度。 基于模型并行性的可扩展服务。 将推理系统扩展到分布式集群以服务多个模型面临独特的挑战。一个主要挑战是突发请求:一个模型可能会在某个时间段内经历请求激增,而其他模型则没有。现有系统通常通过复杂的请求调度和交换策略来处理这些突发情况。 在AlpaServe(第4章)中,我们利用最初为划分大于单个GPU的模型而设计的模型并行性来提高集群利用率。通过模型并行性,模型可以被划分为更小的部分,每个GPU可以容纳多个模型部分。在这种情况下,多个GPU可以共同处理一个模型的突发请求,从而有效地在模型之间统计复用GPU。AlpaServe通过自动搜索算法在不同的并行化和放置策略之间导航权衡空间。与之前的系统相比,它可以处理6倍的突发流量,并且是第一个展示模型并行性也能惠及适合单个GPU的小模型的工作。 基于分页内存的高吞吐量推理。 LLM的结构固有限制了其一次只能进行一个标记的推理,这使得GPU等并行处理器的利用率不高。为了提高推理吞吐量,需要以批处理的方式处理更多请求。然而,批处理的大小受到内存的限制。具体来说,为了生成一个新标记,LLMs需要所有先前标记的缓存状态,即KV缓存。KV缓存既大且动态:单个请求的KV缓存可以占用GB级的内存,其确切大小取决于输入请求的不同序列长度。因此,高效管理KV缓存提出了重大挑战:现有系统中的静态分配方案导致高达80%的内存浪费。 为了解决这个问题,我们开发了PagedAttention(第5章),一种受操作系统中的虚拟内存和分页启发的注意力算法。PagedAttention允许将KV缓存存储在不连续的内存块中。因此,KV缓存可以按需分配,并且可以在请求之间共享。PagedAttention将内存浪费从80%以上减少到不到4%,最终使吞吐量提高了多达4倍,达到了最先进的水平。基于PagedAttention,我们构建了vLLM,一个端到端的LLM推理和服务引擎。与之前的最先进系统相比,vLLM的吞吐量提高了多达4倍。
我们在本论文中构建的系统超越了研究成果,已准备好在现实世界中部署。基于本论文中介绍的技术构建的开源项目已经获得了广泛关注,并在行业中得到了积极使用。Alpa已被Google投入生产,并集成到流行的深度学习框架JAX及其编译器XLA中。
这些项目的广泛用户社区不仅验证了这些想法,还为一线研究挑战开辟了令人兴奋且持续的研究路径,呈现了未来探索的众多机会。在第6章中,我们总结了本论文的贡献,并讨论了未来的研究方向,以实现一个全球人人都能使用最先进的LLM的未来。