为什么所有公开的对 GPT-3 的复现都失败了?复现和使用GPT-3/ChatGPT,你所应该知道的(3)
扫一扫
分享文章到微信
扫一扫
关注99科技网微信公众号
OPT 使用了很多对话数据(例如 reddit),这可能是它在对话中表现好的原因之一。PaLM 有很大的占比在社交媒体对话中,这可能是它在多种问答任务和数据集上有着卓越表现的原因。同样的,PaLM 和更新版本的 GPT-3 有很大比例的代码数据集,这增强了它们在代码任务上的能力,以及可能增强了它们 CoT (Chain-of-Thought,思维链) 的能力。
一个有趣的现象是 BLOOM 在代码和 CoT 上的表现仍然是较差的,尽管它在预训练过程中使用了代码数据。这可能暗示着单独代码数据本身,并不能保证模型的代码和 CoT 能力。
总之,一些文章表明了上面三点的重要性,即:通过数据去重避免记忆和过拟合,通过数据筛选以得到高质量数据,保证数据多样性以确保 LLM 的泛化性。但不幸的是,对于 PaLM 和 GPT-3 预处理这些数据的细节,或者这些预训练数据本身,仍然没有公布,这使得公共社区很难去复现它们。
训练策略此处训练策略包括训练框架、训练持续时间、模型架构/训练设置、训练过程中的修改。在训练非常大的模型时,它们被用于获得更好的稳定性和收敛性。一般来说,由于未知的原因,预训练过程中广泛观察到损失尖峰(loss spike)和无法收敛的情况。因此,众多的对训练设置和模型架构的修改被提出,用以避免这些问题。但是其中一些修改在 OPT 和 BLOOM 之中还不是最优解,这可能导致它们的性能较差。GPT-3 并没有明确提到他们是如何解决这个问题的。
训练框架。一个参数量大于 175B 的模型往往需要 ZeRO 式的数据并行(分布式的优化器)和模型并行(包括张量并行(tensor parallel)、流水线并行(pipeline parallel),有时还包括序列并行(sequence parallel))。OPT 采用了 ZeRO 的 FSDP 实现,以及模型并行的 Megatron-LM 实现。BLOOM 采用了 ZeRO 的 Deepspeed 实现和模型并行的 Megatron-LM 实现。
PaLM 采用了 Pathways,这是一个基于 TPU 的模型并行和数据并行系统。GPT-3 的训练系统的细节仍然未知,但它们至少在一定程度上使用了模型并行(一些人称它使用了 Ray)。不同的训练系统和硬件可能导致不同的训练时的现象。显然,一些在 PaLM 的文章中呈现的、用于 TPU 训练的设置,可能并不适用于其它所有模型使用的 GPU 训练。 硬件和训练框架的一个重要的影响是,人们是否可以使用 bfloat16 去存储模型权重和中间层激活值等。这已经被证明是稳定训练的一个重要因素,因为 bfloat16 可以表示更大范围的浮点数,能够处理在损失尖峰时出现的大数值。在 TPU 上 bfloat16 是默认设置,这可能是 PaLM 能够成功的一个秘密。但是在 GPU 上,以前人们主要使用 float16,这是 V100 中混合精度训练的唯一选择。 OPT 使用了 float16,这可能是其不稳定的因素之一。BLOOM 发现了这样的问题并最终在 A100GPU 上使用了 bfloat16,但它没有意识到这种设置的重要性,因此在第一个词向量层后引入额外的层归一化(layer normalization),用于解决他们使用 float16 的初步实验中的不稳定性。然而,这种层归一化已被证明会导致更糟糕的零样本泛化(zero-shot generalization),这可能是 BLOOM 失败的一个因素。99科技网:http://www.99it.com.cn
