原标题:GPT-4的技术细节可能是什么样的?
关键字:人工智能,深度学习(Deep Learning),GPT,OpenAI,ChatGPT
最佳回答:mathfinder
回答字数:6233字
最近Pylan Patel和Gerald Wong爆料了GPT-4部分关键技术细节;笔者从各方情报来看,这份爆料真实性还是非常高的,本篇论文总结一下相关要点。
内容很硬核,注意收藏,反复研读。
模型结构(Model Architecture )
参数规模:GPT-4是GPT3的10倍大小,大约1.8 trillion参数,120层。
为了提高模型的容量(参数量),同时控制成本,需要引入稀疏性。OpenAI的方案是MoE:把Transformer里面的FFN看作是专家,使用了16个专家,推理从16个专家里面选2个进行前传并加权组合起来。
参数组成如下:FFN部分原来是111B参数,现在扩大了16倍,因此有1.78 T;Attention部分还是dense的55B参数,总共加起来整好大约1.83T。
注意!!!模型前传一次(生成一个token),只用了其中280B参数(55B + 2 x 111B),只用到~560 TFLOPS; 而如果是这个参数量下的Dense 模型的话,则需要3700 TFLOPS !
数据组成(Dataset Composition)
训练数据规模:总共训练了13 trillion tokens。相比之下,DeepMind的Chinchilla 和Google的PaLM分别训练了1.4 trillion 和0.78trillion的tokens,PaLM训练了 5 tillion tokens
这13 trillion是有重复训练的,训练方式如下:
text-based data: 训练 2 epochscode-based data: 训练 4 epochs
finetune 数据:数百万行指令(instruction)数据来自 ScaleAI以及内部数据。
RLHF数据:未知
pre-training 阶段,训练数据context 长度为 8k,即序列长度8k;fine-tuning 阶段则为32k。
Batchsize:在几天内逐步增加batchsize(看起来在batchsize上有做warm up?),最终batchsize是60 million tokens(平均到每个expert是7.5 million)。
并行策略(Parallelism Strategies)
张量并行(Tensor parallelism)只开到8(如,一个Leaner的weights切成8份),受限于NVLink的性能;流水线并行(Pepline parallelism)开到15,即120层的网络,分成15组,每组8层。综上,整个网络,会被切成120=8(张量并行) x 15(流水线并行)份,放到120张卡上。
用了fp16的情况下,每张卡大概放30GB的参数 (1800000000000 * 2 / 1024 / 1024 / 1024 / 120)。OpenAI可能采用的是ZeRO Stage 1(优化器状态只存一份,分布到所有卡上),block-level FSDP,或者 hybrid shared data parallel。
目前不知道OpenAI是怎么避免高流水线并行的bubbles的,他们可能只是硬吃下这些成本。
训练成本(Training Cost)
使用25000 A100,训练的总FLOPS为2.15e25,训练90~100天,MFU为32%~36%。
利用率低的原因如下:
训练经常挂掉,需要重启…;上面提到的流水线中的bubbles也是极大的成本;GPU直接all-reduce的通讯。
按照每A100小时,1美刀算,整个训练成本大约63M 美刀(25000 x 100 x 24),这里的成本排出了实验,失败的训练,其他诸如数据搜集、RLHF、员工等成本。
现在可以使用8192个 H100训练55天,花费21.5M美刀,每H100小时,花费2美刀(2 x 8192 x 55 x 24)。
MoE上的取舍(Mixture of Experts Tradeoffs)
尽管研究者发现64到128个experts比16个experts好,但是目前的系统下支持16个experts已经非常极限了。
有两大原因:
OpenAI发现更多的experts很难泛化到很多任务,同时也很难收敛。目前的推理架构很难支持更多的experts。
推理上的取舍(Inference Tradeoffs)
在LLM的推理上有三大权衡:
延迟:模型的延迟必须在合理的范围内,否则用户体验会很糟糕。这里输入tokens和输出tokens的处理时间差异巨大!吞吐:模型必须每秒输出一定数量的tokens。覆盖人类的阅读速度需要每秒~30tokens。利用率:运行模型的硬件需要达到高利用率,否则成本会非常高。
LLM推理实际上在两个主要的点上做均衡:带宽和计算。
最简单的情况,假设每个参数都必须被读一次,并且有两个FLOPs,目前的芯片来说推理batch size为1的数据时,是对计算和带宽的要求是极其不均衡的!以H100 SXM为例,带宽是3TB/s,而FP8计算速度为 2000 TFLOPs/s,整整差了几个数量级。
如果,只有一个用户请求,batch size为1,那么需要从内存中load所有的参数来生成token,这时候访存会占用几乎所有的时间,而计算时间可以忽略不计!
因此,对LLM来说为了服务大量的用户,batch size必须攒大一点。例如batch size是256~512的话所需要的访存和计算,会跟H100的带宽/计算比更匹配。这能提高处理器的利用率,问题是提高了延迟。
GPT-4的推理权衡和架构
GPT-4有16个experts,每个token选两个进行推理。这意味着,batchsize为8的话,那么对每个expert来说,费老大劲load的expert的参数,其实只处理了batchsize为1的数据。这还是experts负载均衡的情况,更糟糕的是,可能一个expert处理了batchsize为8的数据,而其他expert可能是4、1或者0。
这也是为什么MoE这么香(增加参数量,不怎么增加计算量),OpenAI却只用了16个experts的最本质原因。用更多的experts,访存就会成为推理瓶颈。
GPT-4的推理成本
尽管因为GPT-4采用MoE方案,真正推理参数仅为175B 参数 Davinchi 模型的1.6 倍,成本却是它的3 倍。这主要是由于 GPT-4 需要更大的集群,而利用率却低得多。
GPT-4在128 个 A100 处理 8k seqlen 的序列,每 1k tokens成本为 0.0049 美分;128 个 H100 处理8k seqlen,每 1k tokens 成本为 0.0021 美分。 这里是假设了保持大batch下,机器有很高的利用率。
但是,很明显 OpenAI 有时利用率很低。 我们假设 OpenAI 在低谷期间关闭集群,用这些机器来迭代技术。 这有助于保持较低的推理成本。 如果OfpenAI不这样做,他们的利用率会更低,成本估计会增加一倍以上。
Multi-Query Attention
MQA基本上是个明牌招数,几乎所有人都在用,OpenAI也不例外。道理都懂,对KV来说只有一个head的话,能省下几十倍的KV cache。即便如此,GPT-4 肯定无法在 40GB A100 上处理32k的序列,并且 8k 受batchsize的限制。 如果没有它,8k 长度的batchsize只能更受限,很不划算。
Continuous batching
一张图讲完:黄色是输入tokens,蓝色是输出tokens。
右上角是朴素做法,短序列早早生成完了,干等长序列生成完再返回。
右下角是continuous batching,短序列生成完了接着处理下一个请求序列,直到最长的序列生成完。
Speculative Decoding
(个人感觉这一part不是很靠谱)
先用一个比较小的模型(draft model)生成几个tokens,然后把它们作为一个单独的batch送给最大最好的模型(oracle model)。如果oracle model认为draft model生成得对,那就可以省下可观的访存。
但是,如果oracle model拒绝了draft model生成的tokens,那么这个batch剩下的部分,都将被oracle model一个token一个token的生成。
Vision Multi-Modal
可能是才用Flamingo的方式,在1.8T的GPT-4之上增加更多的参数:在text-only pretraining之后,再额外finetune了2T tokens。
对于视觉模型,OpenAI本来想重零开始训练,但是失败了。
下一代模型,GPT-5,他们将支持视觉重零开始训练,并且用来视觉模型也可以生成图像。音频的支持也一样。
这种视觉功能的主要目的之一是让GPT能够阅读网页并转录图像和视频中的内容。
训练数据:(渲染的 LaTeX/文本)、网页的截图、YouTube 视频:采样帧,运行 Whisper(OpenAI的语音识别大模型)来获得transcript。
联系作者
回答作者:mathfinder
这位作者说 GPT-4 的详细信息已经泄露,不知道可信度如何。
原文:https://www.semianalysis.com/p/gpt-4-architecture-infrastructure
一些关键信息:
GPT-4 的大小是 GPT-3 的 10 倍以上。我们认为它在 120 层中总共有大约 1.8 万亿个参数。GPT-4 是多个专家模型混合在一起,但不是之前说的 8 个专家,而是 16 个。研究人员已经证明,使用 64 到 128 个专家比 16 个专家能够获得更好的损失,但这只是纯粹的研究。OpenAI 选择 16 个专家的一个原因是,更多的专家在许多任务上难以泛化。更多的专家也可能更难以达到收敛。 预训练阶段的上下文长度(seqlen)为 8k。GPT-4 的 32k seqlen 版本是在预训练后对 8k 进行微调的结果。 为了在所有的 A100s GPUs 上并行化,他们使用了 8 路张量并行,因为这是 NVLink 的限制。 如果他们在云中的成本约为每小时 $1 美元 / A100,那么这次运行的训练成本将约为 6300 万美元。 GPT-4 推理成本是 175B 参数的 Davinchi 的 3 倍。这主要是由于 GPT-4 需要更大的集群和实现的利用率更低。它的成本估计是 $0.0049/ 1K tokens。(目前 GPT-4 的 API 价格大约是 $0.03 / 1K tokens) 新的 GPT-4 质量下降的阴谋论可能只是因为他们让 Oracle 模型接受来自推测解码模型的较低概率序列。 推理在 128 个 GPU 的集群上运行。它在 8 路张量并行和 16 路管道并行中完成。每个 8 个 GPU 的节点只有约 1300 亿个参数,或者在 FP16 下每个 GPU 少于 30GB,在 FP8/int8 下少于 15GB。 视觉多模态是一个与文本编码器分开的视觉编码器,具有交叉注意力。该架构类似于 Flamingo。这在 GPT-4 的 1.8T 之上增加了更多的参数。它在文本预训练后,用另外约 2 万亿个 Token 进行微调。在视觉模型上,OpenAI 希望从头开始训练,但它还不够成熟,所以他们希望通过从文本开始来降低风险。他们训练的一部分数据是联合数据(渲染的 LaTeX / 文本),网页截图,YouTube 视频:采样帧,并在其周围运行 Whisper 以获取转录。将他的推文线程翻译一下供参考: GPT-4 的详细信息已经泄露。 一切都在这里: 参数数量: GPT-4 的大小是 GPT-3 的 10 倍以上。我们认为它在 120 层中总共有大约 1.8 万亿个参数。 混合专家模型 - 已确认。 OpenAI 通过使用混合专家(MoE, mixture of experts)模型,能够保持合理的成本。 他们在模型中使用了 16 个专家,每个专家的 MLP 参数约为 1110 亿。每次前向传递都会路由到这些专家中的 2 个。 混合专家(MoE)路由: 虽然文献中大量讨论了选择将每个 Token 路由到哪个专家的高级路由算法,但 OpenAI 的 GPT-4 模型的路由方式据说相当简单。 大约有 550 亿个共享参数用于注意力。 推理: 每次前向传递推理(生成 1 个 Token)只使用约 2800 亿个参数和约 560 TFLOPs。这与纯密集模型每次前向传递所需的约 1.8 万亿个参数和约 3700 TFLOP 形成对比。 数据集: GPT-4 在约 13 万亿个 Token 上进行训练。 这些并非唯一的 Token,他们也将更多的 Token 计算为纪元(Epoch)。 纪元数量(Epoch number): 文本数据为 2 个纪元,代码数据为 4 个纪元。 有数百万行来自 ScaleAI 和内部的指令微调数据。 GPT-4 32K: 预训练阶段的上下文长度(seqlen)为 8k。GPT-4 的 32k seqlen 版本是在预训练后对 8k 进行微调的结果。 批量大小(Batch Size): 批量大小在集群运行的几天内逐渐增加,但到最后,OpenAI 使用的批量大小为 6000 万!当然,这 “只是” 每个专家看到的令牌数量为 750 万的批量大小,因为并非每个专家都看到所有的令牌。 对于真实的批量大小: 将这个数字除以 seq len 就可以得到真实的批量大小。已经停止使用这些误导性的数字了。 并行策略: 为了在所有的 A100s GPUs 上并行化,他们使用了 8 路张量并行,因为这是 NVLink 的限制。 除此之外,他们还使用了 15 路管道并行。 (可能使用了 ZeRo Stage 1。他们可能使用了块级 FSDP) 训练成本: OpenAI 的 GPT-4 训练 FLOPS 约为 2.15e25,在约 25,000 个 A100s 上运行 90 到 100 天,MFU 约为 32% 到 36%。 这种极低的利用率部分是由于需要从中重新启动的检查点的数量巨大。 如果他们在云中的成本约为每小时 1 美元 / A100,那么这次运行的训练成本将约为 6300 万美元。 (今天,预训练可以在约 55 天内用约 8192 个 H100 完成,成本为 2150 万美元,每小时 H100 的成本为 2 美元。) 混合专家权衡: 采取了多种 MoE 权衡:例如,MoE 在推理上非常难处理,因为并非每个模型的部分都在每个 Token 生成时使用。 这意味着当其他部分被使用时,部分可能会处于休眠状态。当服务用户时,这真的会损害利用率。 研究人员已经证明,使用 64 到 128 个专家比 16 个专家能够获得更好的损失,但这只是纯粹的研究。 有多种原因选择更少的专家。OpenAI 选择 16 个专家的一个原因是,更多的专家在许多任务上难以泛化。更多的专家也可能更难以达到收敛。 对于如此大的训练运行,OpenAI 选择在专家数量上更保守。 GPT-4 推理成本: GPT-4 的成本是 175B 参数的 Davinchi 的 3 倍。这主要是由于 GPT-4 需要更大的集群和实现的利用率更低。 它的成本估计是 $0.0049 / 1K Tokens,用 128 个 A100 推理 GPT-4 8k seqlen,$0.0021/ 1K Tokens,用 128 个 H100 推理 GPT-4 8k seqlen。应该注意的是,我们假设利用率较高,并保持批量大小较大。 多查询注意力: OpenAI 像其他人一样使用 MQA(Multi-Query Attention)。 因此,只需要 1 个头,可以显著减少 KV 缓存的内存容量。即使如此,32k seqlen 的 GPT-4 肯定无法在 40GB 的 A100s 上运行,8k 的最大 bsz 也受到限制。 连续批处理: OpenAI 实现了可变批量大小和连续批处理。这样做是为了允许一定程度的最大延迟,同时优化推理成本。 视觉多模态: 这是一个与文本编码器分开的视觉编码器,具有交叉注意力。该架构类似于 Flamingo。这在 GPT-4 的 1.8T 之上增加了更多的参数。它在文本预训练后,用另外约 2 万亿个 Token 进行微调。 在视觉模型上,OpenAI 希望从头开始训练,但它还不够成熟,所以他们希望通过从文本开始来降低风险。 这种视觉能力的主要目的之一是为了能够阅读网页并转录图像和视频中的内容。 他们训练的一部分数据是联合数据(渲染的 LaTeX / 文本),网页截图,YouTube 视频:采样帧,并在其周围运行 Whisper 以获取转录。 推测解码(Speculative Decoding): OpenAI 可能在 GPT-4 的推理上使用推测解码(不确定 100%)。 这个想法是使用一个更小更快的模型提前解码几个 Token,然后将它们作为一个单独的批次输入到一个大的 oracle 模型中。 如果小模型对其预测正确 - 大模型同意,我们可以在一个批次中解码几个 Token。 但是如果大模型拒绝了由草案模型预测的令牌,那么剩下的批次就会被丢弃,继续使用大模型。 新的 GPT-4 质量下降的阴谋论可能只是因为他们让 oracle 模型接受来自推测解码模型的较低概率序列。 推理架构: 推理在 128 个 GPU 的集群上运行。 在不同位置的多个数据中心中有多个这样的集群。 它在 8 路张量并行和 16 路管道并行中完成。 每个 8 个 GPU 的节点只有约 1300 亿个参数,或者在 FP16 下每个 GPU 少于 30GB,在 FP8/int8 下少于 15GB。 模型有 120 层,所以它适合在 15 个不同的节点中。 [可能在第一个节点上有更少的层,因为它需要计算嵌入] 根据这些数字:如果 OpenAI 试图按照 chinchilla 的最优去训练,他们应该在 2 倍的令牌上进行训练。 [更不用说像我们一样超越它了] 这说明他们正在努力获取高质量的数据。 为什么没有 FSDP? 可能的原因是他们获得的一些硬件基础设施是旧一代的。 这在本地计算集群中很常见,因为组织通常会在几个 “波” 中升级基础设施,以避免完全暂停操作。 由于管道并行度非常高,就像我们其他人一样,他们很可能遭受“批量泡沫”:批次之间的轻微空闲时间。
没有魔法。