当前位置: 首页 > 科技观察

跑ChatGPT体量模型,从此只需一块GPU:加速百倍的方法来了

时间:2023-03-18 22:09:54 科技观察

运行ChatGPT体积模型,从此只需要一块GPU:提速百倍的方法来了据统计,从GPT演进到GPT-3的过程,也是模型尺寸增长的过程——参数数量从1.17亿增加到1750亿,预训练数据量从5GB增加到45TB。GPT-3培训一次的费用为460万美元,总培训费用为1200万美元。除了训练之外,推理也很昂贵。有人估计OpenAI现在每天运行ChatGPT的成本为100,000美元。在开发技术让大型模型掌握更多能力的同时,一些人也在努力降低AI所需的算力资源。最近,一项名为FlexGen的技术因为“一个运行ChatGPT体积模型的RTX3090”而受到关注。尽管由FlexGen加速的大型模型看起来仍然很慢——在运行具有1750亿个参数的语言模型时每秒1个令牌,但令人印象深刻的是它使不可能成为可能。传统上,大型语言模型(LLM)推理的高计算和内存要求需要使用多个高端AI加速器进行训练。本研究探讨了如何降低LLM推理对消费级GPU的要求并实现实用性能。近日,来自斯坦福大学、加州大学伯克利分校、苏黎世联邦理工学院、Yandex、莫斯科国立高等经济学院、Meta、卡内基梅隆大学等机构的最新研究提出了FlexGen,一种在GPU内存有限的情况下运行的LLM。高吞吐量构建引擎。通过聚合来自GPU、CPU和磁盘的内存和计算,FlexGen可以在各种硬件资源限制下灵活配置。通过线性规划优化器,它搜索存储和访问张量的最佳模式,包括权重、激活和注意键/值(KV)缓存。FlexGen将权重和KV缓存进一步压缩到4位,精度损失可忽略不计。与最先进的卸载系统相比,FlexGen在单个16GBGPU上运行OPT-175B的速度提高了100倍,并首次实现了1个令牌/秒的实际生成吞吐量。如果有更多分布式GPU可用,FlexGen还带有流水线并行运行时,以便在解码时允许超线性缩放。目前,该技术已经发布代码并获得了数千颗星:https://github.com/FMInference/FlexGen简介近年来,大型语言模型在广泛的任务中表现出了出色的性能。虽然LLM展示了前所未有的通用智能,但它们也带来了前所未有的构建挑战。这些模型可以有数十亿甚至数万亿个参数,这使得运行它们的计算量和内存要求极高。例如,GPT-175B(GPT-3)需要325GB的内存来存储模型权重。该模型要进行推理,至少需要五台NvidiaA100(80GB)和复杂的并行策略。减少LLM推理的资源需求的方法是当今很多讨论的主题。这些努力分为三个方向:(1)模型压缩以减少总内存占用;(2)协同推理,通过去中心化分担成本;(3)卸载以利用CPU和磁盘内存。这些技术显着降低了使用LLM的计算资源需求。然而,人们通常假设模型适合GPU内存,而现有的基于卸载的系统仍然难以使用单个GPU以可接受的吞吐量运行具有1750亿个参数规模的模型。在这项新研究中,作者专注于高吞吐量生成推理的有效卸载策略。当GPU显存不够用的时候,我们需要卸载到副存,通过分载的方式逐段计算。在典型的机器上,内存层次结构分为三个级别,如下图所示。高级记忆速度快但稀缺,低级记忆速度慢但充足。在FlexGen中,作者不追求低延迟,而是针对面向吞吐量的场景,这些场景在基准测试、信息提取、数据整理等应用程序中很流行。实现低延迟本质上是卸载的挑战,但面向吞吐量场景下,卸载的效率可以大大提高。图1说明了三个具有卸载的推理系统的延迟吞吐量权衡。通过仔细的调度,I/O成本可以分摊到大量输入上并与计算重叠。在这项研究中,作者表明,就单位计算能力成本而言,单个消费级GPU吞吐量优化的T4GPU比云上延迟优化的8个A100GPU的效率高4倍。图1.OPT-175B(左)和OPT-30B(右)上三个基于卸载的系统的延迟和吞吐量权衡。FlexGen实现了新的Pareto最优边界,OPT-175B的最大吞吐量提高了100倍。其他系统由于内存不足,无法进一步提高吞吐量。虽然已经在训练的背景下讨论了卸载的延迟吞吐量权衡,但还没有人使用它来生成LLM推理,这是一个独特的过程。由于LLM的自回归性质,生成推理提出了独特的挑战。除了存储所有参数外,它还需要顺序解码并维护一个大的注意力键/值缓存(KV缓存)。现有的卸载系统都无法应对这些挑战,因此它们执行过多的I/O,并且只能实现远低于硬件能力的吞吐量。为生成推理设计良好的卸载策略具有挑战性。首先,这个过程中存在三种张量:权重、激活和KV缓存。该策略应指定在三级层次结构上卸载什么、在哪里以及何时卸载。其次,batch-by-batch、token-by-token、逐层计算的结构形成了一个复杂的依赖图,可以通过多种方式计算。该策略应选择一个使执行时间最短的计划。这些选择共同构成了一个复杂的设计空间。为此,在新方法FlexGen上,提出了用于LLM推理的卸载框架。FlexGen聚合来自GPU、CPU和磁盘的内存并有效地调度I/O操作,作者讨论了可能的压缩方法和分布式管道并行性。本研究的主要贡献如下:1.作者正式定义了可能的卸载策略的搜索空间,并使用成本模型和线性规划求解器搜索最佳策略。值得注意的是,研究人员证明,搜索空间捕获了接近I/O最优的计算顺序,I/O复杂度在最优计算顺序的2倍以内。搜索算法可以针对各种硬件规格和延迟/吞吐量限制进行配置,从而提供一种平滑导航权衡空间的方法。与现有策略相比,FlexGen解决方案统一了权重、激活和KV缓存的放置,从而导致更大的批处理大小。2.研究表明,OPT-175B等LLM的权重和KV缓存可以压缩到4位,而无需重新训练/校准,精度损失可以忽略不计。这是通过细粒度组量化实现的,可以显着降低I/O成本。3.通过在NVIDIAT4GPU(16GB)上运行OPT-175B来展示FlexGen的效率。在单个GPU上,给定相同的延迟要求,未压缩的FlexGen可以实现比DeepSpeedZero-Inference(Aminabadietal.,2022)和HuggingFaceAccelerate(HuggingFace,2022)高65倍的吞吐量,后者是目前最先进的业界基于卸载的推理系统。如果允许更高的延迟和压缩,FlexGen可以进一步提高吞吐量并实现100倍的提升。FlexGen是第一个可以使用单个T4GPU为OPT-175B实现1个令牌/秒速度吞吐量的系统。具有流水线并行性的FlexGen可在给定多个分布式GPU的情况下实现超线性解码。在研究中,作者还将FlexGen和Petals作为卸载和分散集成推理方法的代表进行了比较。结果表明,在吞吐量方面,具有单个T4GPU的FlexGen优于具有12个T4GPU的分散式Petal集群,在某些情况下甚至可以实现更低的延迟。运行机制通过聚合来自GPU、CPU和磁盘的内存和计算,FlexGen可以在各种硬件资源限制下灵活配置。通过线性规划优化器,它搜索存储和访问张量的最佳模式,包括权重、激活和注意键/值(KV)缓存。FlexGen将权重和KV缓存进一步压缩到4位,精度损失可以忽略不计。FlexGen的一个关键思想是做出延迟-吞吐量的权衡。实现低延迟对于卸载方法来说本来就具有挑战性,但对于以吞吐量为导向的场景,卸载效率可以大大提高(见下图)。FlexGen利用块调度来重用权重并将I/O与计算重叠,如下图(b)所示,而其他基线系统使用低效的逐行调度,如下图(a)所示。目前,研究作者的下一步包括支持AppleM1、M2芯片以及支持Colab部署。自FlexGen发布以来,GitHub上的Star数迅速上千,在社交网络上的热度也非常高。人们都说这个项目很有前途。运行高性能大规模语言模型的障碍似乎正在逐渐被克服。希望在今年内,单机就能处理ChatGPT。有人用这种方法训练了一个语言模型,结果如下:虽然在不喂入大量数据的情况下,AI并不知道具体的知识,但回答问题的逻辑似乎还是比较清晰的。也许在未来的游戏中,我们能看到这样的NPC?