众所周知,OpenAI并不“open”,特别是在GPT-4发布后,整个OpenAI团队对GPT-4的几乎所有信息都守口如瓶。
而就在今天上午,媒体semianalysis的Dylan Patel和Gerald Wong发表了一篇题为《GPT-4 Architecture, Infrastructure, Training Dataset, Costs, Vision, MoE》的文章,曝光了GPT-4从模型架构、模型训练到成本的所有细节,GPT-4又被“开源”了?
文章中详细介绍了GPT-4的架构、训练和推理的基础设施、参数量、训练数据集、token数、成本、混合专家模型(Mixture of Experts,MoE)等非常具体的参数和信息。
同时还“深扒了”在不同的路线选择上,OpenAI面临的各类权衡,并直言,对GPT-4而言,最有趣的是理解OpenAI为什么会做出某些架构决策。
而DeepMind CEO Hassabis近日在接受媒体采访时,确认了这份谷歌被泄漏的文件的真实性。
鉴于爆料者是Dylan Patel,此次GPT-4“大揭秘”的真实性又提高了几分。
文章开头就指出,OpenAI之所以不open,不是为了保护人类不被AI毁灭,而是因为他们构建的大模型是可复制的,未来中国和美国的互联网大厂及AI头部初创企业,都会有能力构建出可以和GPT-4媲美甚至超越GPT-4的大模型。
而OpenAI最持久的护城河,就在于他们拥有真实用户的使用反馈,业内最顶尖的工程人才,以及先发优势带来的领先地位。
华尔街见闻整理了关于GPT-4爆料的主要内容:
1.8万亿巨量参数和模型框架文章指出,GPT-4在120层中总共包含了1.8万亿参数,而GPT-3只有约1750亿个参数。也就是说,GPT-4的规模是GPT-3的10倍以上。
OpenAI通过使用混合专家(Mixture of Experts,MoE)模型来控制成本。GPT-4拥有16个专家模型,每个MLP专家大约有1110亿个参数。其中,有两个专家模型被用于前向传播。
OpenAI用于GPT-4的算法,其实非常简单。模型中还有约550亿个参数,被用做注意力机制的共享。
每次的前向传播推理(生成一个token)中,GPT-4只需要使用大约2800亿参数和560TFLOPS。相比之下,纯密集模型每次前向传播需要大约1.8 万亿个参数和约3700 TFLOP 的计算量。
数据集的构成OpenAI用13万亿的token训出了GPT-4。因为没有高质量的token,这个数据集还包含了许多个epoch。
Epoch数量:针对基于文本的数据进行2个epoch的训练,而针对基于代码的数据进行了4个epoch 的训练。
在预训练阶段,GPT-4使用了8k 的上下文长度(seqlen),而32k的版本是基于预训练后的8K版本微调而来的。
在几天之内批大小在集群中逐渐增加。最终OpenAI使用的批大小达到了6000万,当然,由于并非每个专家模型都能看到所有 token,因此这仅为每个750万token的专家模型的大小
真实的批处理大小:将这个数字除以序列长度(seq len)即可得到。
OpenAI的并行策略并行策略对于A100GPU是相当重要的。为了在所有 A100 GPU上进行并行计算,OpenAI采用了8路张量并行,因为这是NVLink的极限。除此之外,据说OpenAI采用15路并行管线。
理论上,考虑到数据通信和计算时间,15个管线就有些多了。但是一旦加上了KV缓存和成本,如果OpenAI使用的GPU大部分是40GB的A100,那这样的构架在理论上就是有意义的。
但作者表示,他并不是太明白OpenAI在如此高的管线并行度下,如何避免在每批中产生如下图这样的“泡泡”(huge bubbles),很有可能OpenAI就是生生地抗下了这些成本。
谷歌在他们的PaLM推理论文中展示了这些权衡。然而,值得注意的是,这是针对像PaLM这样的稠密模型,而不是像GPT-4这样的稀疏模型。
如果一个应用程序要求最低的延迟,我们需要应用更多的芯片,并将模型划分为尽可能多的部分。较小的批量大小通常可以实现较低的延迟,但较小的批量大小也会导致更差的利用率,从而导致每个令牌的总成本(以芯片秒或美元计)更高。如果一个应用程序需要离线推理,并且延迟不是问题,主要目标是最大化每个芯片的吞吐量(即尽量减少每个令牌的总成本)。
增加批量大小是最高效的,因为较大的批量通常可以实现更好的利用率,但某些对于小批量大小来说不高效的划分策略在批量大小增大时变得高效起来。更多的芯片和更高的批量大小是最便宜的,因为它们可以增加利用率,但这也引入了一个第三个变量,即网络时间。某些将模型分割到不同芯片上的方法对于延迟更高效,但与利用率相互制衡。
内存时间和非注意计算时间都与模型大小成正比,与芯片数量成反比。然而,对于给定的分区布局,芯片间通信所需的时间下降得较慢(或根本不下降),因此随着芯片数量的增加,它变得越来越重要,成为一个越来越重要的瓶颈。虽然我们今天只是简单地讨论一下,但应该注意到,随着批量大小和序列长度的增长,KV缓存的内存需求会急剧增加。如果一个应用程序需要生成具有较长注意力上下文的文本,则推理时间会显著增加。
对于一个具有多头注意力的500B 模型,注意力KV缓存会变得很大:对于批量大小为512和上下文长度为2048,KV缓存总共达到3TB,这是模型参数大小的3倍。芯片上的内存需要将此KV缓存从芯片外存加载到内存中,而此期间芯片的计算核心基本上处于闲置状态。较长的序列长度对内存带宽和内存容量特别不利。OpenAI的16k序列长度GPT 3.5 turbo和32k序列长度GPT 4的成本要高得多,因为由于内存限制,它们无法使用更大的批量大小。
较低的批量大小导致较低的硬件利用率。此外,随着序列长度的增加,KV缓存也会变得更大。KV缓存无法在用户之间共享,因此需要单独的内存读取,进一步成为内存带宽的瓶颈。
7 GPT-4的推理权衡和基础设施以上所有内容在GPT-4推理中都很困难,但是模型架构采用了专家混合模型(MoE),这引入了一整套新的困难。每个令牌生成的前向传递可以路由到不同的专家集合中。这对于在批量大小较大时在吞吐量、延迟和利用率之间实现的权衡造成了困扰。
OpenAI的GPT-4有16个专家,每个前向传递中有2个专家。这意味着如果批量大小为8,每个专家的参数读取可能只是批量大小为1。更糟糕的是,可能一个专家的批量大小为8,而其他的专家可能是4、1或0。每次令牌生成,路由算法都会将前向传递发送到不同的方向,导致令牌到令牌的延迟以及专家批量大小的显著变化。推理基础设施是OpenAI选择较少的专家数量的主要原因之一。如果他们选择了更多的专家,内存带宽将更加成为推理的瓶颈。
OpenAI在推理集群上经常达到4k 的批量大小,这意味着即使在专家之间进行了最佳的负载均衡,专家的批量大小也只有约500个。这需要非常大量的使用才能实现。我们了解到,OpenAI在一个由128个GPU组成的集群上运行推理。他们在多个数据中心和地理位置上都有多个这样的集群。推理是在8路张量并行和16路流水线并行上进行的。每个由8个GPU组成的节点只有大约130B的参数,即每个GPU在FP16模式下不到30GB,在FP8/int8模式下不到15GB。这使得推理可以在40GB的A100芯片上运行,前提是所有批次的KV缓存大小不会过大。
包含各种专家的单个层不会分割到不同的节点上,因为这会使网络流量过于不规则,并且在每个令牌生成之间重新计算KV缓存的代价太高。对于任何未来的MoE模型扩展和条件路由,如何处理KV缓存的路由是一个最大的困难。
模型有120个层,所以将其平均分配到15个不同的节点上是很简单的,但由于第一个节点需要进行数据加载和嵌入,所以在推理集群的主节点上放置较少的层是有意义的。此外,我们听到了一些关于推理的猜测解码的传言,我们稍后会讨论,但我们不确定是否相信这些传言。这也可以解释为什么主节点需要包含较少的层。
8 GPT-4的推理成本与175B参数的Davinchi模型相比,GPT-4的成本是其3倍,尽管其前馈参数只增加了1.6倍。这主要是因为GPT-4需要更大的集群并实现了更低的利用率。
我们认为,对于128个A100来推理GPT-4 8k序列长度,每1k令牌的成本是0.0049美分,而对于128个H100来推理GPT-4 8k序列长度,每1k令牌的成本是0.0021美分。
值得注意的是,我们假设有较高的利用率,并保持较高的批量大小。这可能是一个错误的假设,因为很明显OpenAI有时的利用率非常低。我们假设OpenAI在低谷时段关闭集群,并重新调整这些节点以从检查点恢复对较小测试模型的训练,尝试各种新技术。这有助于降低推理成本。如果OpenAI不这样做,他们的利用率将更低,我们的成本估计将增加一倍以上。
9 多查询注意力MQA是其他公司正在使用的技术,但我们想指出OpenAI也在使用。长话短说,只需要一个头部,KV缓存的内存容量可以大大减少。即使如此,32k序列长度的GPT-4肯定无法在40GB的A100芯片上运行,而8k序列长度的GPT-4在最大批量大小上受到限制。如果没有MQA,8k序列长度的GPT-4的最大批量大小将受到极大的限制,以至于经济上不可行。
10 连续批处理OpenAI实现了可变的批量大小和连续批处理。这样可以在一定程度上允许最大延迟,并优化推理成本。如果您对这个概念不熟悉,那么这篇由AnyScale撰写的文章值得一读。
11 关于猜测解我们从一些可靠的人士那里听说OpenAI在GPT-4推理中使用了猜测解码。我们不确定是否完全相信这一点。令牌到令牌的延迟的普遍变化以及在进行简单的检索任务与更复杂的任务时的差异似乎表明这是可能的,但是变量太多,无法确定。以防万一,我们将在这里使用一些“使用分段猜测解码加速LLM推理”的文本并稍作修改/添加一些说明。
使用LLM通常分为两个阶段。首先是预填充阶段,将提示文本通过模型生成KV缓存和第一个输出的logits(可能的令牌输出概率分布)。通常,这个阶段很快,因为整个提示文本可以并行处理。
第二阶段是解码。从输出的logits中选择一个令牌,并将其反馈到模型中,生成下一个令牌的logits。重复这个过程,直到生成所需数量的令牌。因为解码必须按顺序进行,每次都要将权重流通过计算单元以生成单个令牌,所以当以小批量运行时,第二阶段的算术强度(即计算的FLOP / 内存带宽的字节数)非常低。
因此,解码通常是自回归生成中最昂贵的部分。这就是为什么在OpenAI的API调用中,输入令牌比输出令牌便宜得多的原因。
猜测解码的基本思想是使用一个更小、更快的草稿模型预先解码多个令牌,然后将它们作为一个批次馈送给神谕模型。如果草稿模型对其预测的令牌是正确的,即较大模型也同意,那么可以通过一个批次解码多个令牌,这样可以节省相当多的内存带宽和时间,每个令牌都能节省。
然而,如果较大模型拒绝了草稿模型预测的令牌,那么剩下的批次将被丢弃,算法自然会恢复到标准的逐令牌解码。猜测解码可能还伴随着拒绝采样方案,以从原始分布中进行采样。请注意,这仅在带宽是瓶颈的小批量设置中有用。
猜测解码通过交换计算和带宽来进行权衡。猜测解码作为性能优化目标具有两个关键原因。首先,它完全不会降低模型质量。其次,它提供的优势通常与其他方法无关,因为其性能来自将顺序执行转换为并行执行。
目前的猜测方法为批次预测一个单独的序列。然而,这在大批量大小或低草稿模型对齐度的情况下无法很好地扩展。直观地说,两个模型在连续的长序列中达成一致的概率指数级地降低,这意味着随着算术强度的扩大,猜测解码的回报迅速减少。
我们认为如果OpenAI使用猜测解码,他们可能只在大约4个令牌的序列上使用它。顺便提一下,GPT-4降低质量的整个阴谋可能只是因为他们让神谕模型接受来自猜测解码模型的较低概率序列。另一个注意的是,有人猜测Bard使用了猜测解码,因为谷歌在将整个序列发送给用户之前等待序列的生成完成,但我们不相信这种猜测是真实的。
12 关于视觉多模态视觉多模态能力是GPT-4中最不令人印象深刻的部分,至少与领先的研究相比。当然,还没有任何公司将多模态LLM的研究商业化。
它是一个独立的视觉编码器,与文本编码器分开,但存在交叉注意力。我们听说它的架构类似于Flamingo。这在GPT-4的1.8T参数之上增加了更多的参数。在仅文本预训练之后,它还进行了另外约2万亿个令牌的微调。
对于视觉模型,OpenAI原本希望从头开始训练,但这种方法还不够成熟,因此他们决定先从文本开始以减轻风险。
据称,下一个模型GPT-5将从头开始进行视觉训练,并且能够自己生成图像。此外,它还将能够处理音频。
这种视觉能力的主要目的之一是让自主代理能够阅读网页并转录图像和视频中的内容。他们训练的数据中有一部分是联合数据(渲染的LaTeX/文本)、网页的屏幕截图、YouTube视频:采样帧,并运行Whisper来获取转录。
关于所有这些针对LLM的过度优化的有趣之处在于,视觉模型的成本与文本模型的成本不同。正如我们在“亚马逊云危机”文章中所描述的那样,在文本模型中,成本非常低。而在视觉模型中,数据加载的IO要高出约150倍。每个令牌的字节数为600,而不是文本的4。有很多关于图像压缩的研究正在进行中。
这对于那些正在根据未来2-3年内LLM的用例和比率来优化硬件的硬件供应商来说非常重要。他们可能会发现自己处于一个每个模型都具有强大的视觉和音频能力的世界中。他们可能会发现他们的架构适应不良。总的来说,架构肯定会发展到超越当前简化的基于文本的密集和/或MoE模型的阶段。
本文来自华尔街见闻,欢迎下载APP查看更多
相关文章
猜你喜欢