Karpathy90分钟内用llmc重现GPT2124M花费仅需20美元

Andrej Karpathy 在Twitter上发布了一条重磅消息,他用llm.c在90分钟内重现了GPT-2(124M)模型,总成本仅为20美元。这一成果展示了在单个8X A100 80GB SXM节点上实现高效训练的可能性,对缺乏GPU资源的研究者来说是一个重大利好。

Karpathy90分钟内用llmc重现GPT2124M花费仅需20美元-2

见前文:

OpenAI 前创始成员、特斯拉自动驾驶前负责人 Andrej Karpathy:llm.c项目在第24天实现了多GPU训练

重现GPT-2(124M)的细节

GPT-2(124M)是OpenAI于2019年发布的GPT-2系列中最小的模型,现在即便是缺乏GPU资源的人也能轻松使用。例如,使用llm.c,你可以在一个8X A100 80GB SXM节点上90分钟内重现这个模型(约60%的MFU)。这些节点的运行成本约为每小时14美元,因此总成本约为20美元。我也认为124M模型非常适合作为快速训练的挑战。所以这里是启动命令:

Karpathy90分钟内用llmc重现GPT2124M花费仅需20美元-3

(启动命令)

这是在训练FineWeb数据集的10B tokens后90分钟的输出结果:

Karpathy90分钟内用llmc重现GPT2124M花费仅需20美元-4

在花了约7周时间从零开始用C/CUDA编写这个库后,能达到这种“端到端”训练的阶段,感觉非常不错。昨晚,我还重现了350M模型,但在相同的节点上用了14小时,成本约为200美元。根据粗略计算,完整的GPT-2(1558M)模型目前大概需要一周时间和约2500美元。但我更希望能找到增加GPU数量的方法。不过我们会先花些时间进一步改进llm.c的核心。350M模型的训练情况如下,训练了30B tokens:

Karpathy90分钟内用llmc重现GPT2124M花费仅需20美元-5

我写了一份完整的指南,详细介绍了如何在自己的GPU上从头开始重现这个训练过程,详细内容请看这里:https://github.com/karpathy/llm.c/discussions/481

专家评论与讨论

Karpathy90分钟内用llmc重现GPT2124M花费仅需20美元-6

高效的MFU

Daniel Han称赞了Karpathy在60% MFU(Memory Footprint Utilization)上的出色工作,并提到:

60% MFU的工作非常了不起!我记得OpenAI在GPT-3上的MFU约为20%?也许GPT-4是35%?PaLM约46%,Mosaic在FA1之前是40%,然后FA2和其他优化约为53%。Meta约50%,没有gc是57%,选择性gc是51%。最近的Mosaic fp8约为36%。Meta的FSDP + 编译无gc是68%,选择性gc是60%,gc是55%。

Andrej Karpathy 称因为这有单个节点的因素。

但那些是规模大得多的训练,所以更加令人印象深刻。这是在单个节点上进行的,因此不需要处理跨节点互连。当你必须同时管理O(10,000)个GPU时,事情会变得更加有趣。对于“有趣”的非常具体定义来说

Daniel Han 表示无论如何,这已经非常令人称赞了!

Ye多节点通信,还有突然随机故障的GPU、冷却、检查点、布线、供电,真是一团糟 :() (虽然也挺有趣 :))

但无论如何,这还是非常令人印象深刻的!!

Andrej Karpathy:

我原以为不用处理这些问题,但已经有350M模型(8个GPU工作14小时)有时会随机挂起,出现莫名其妙的MPI错误。所以我不得不把整个优化过程放进一个while 1循环中,并写一个脚本来监控日志文件,如果作业停滞不前,就发送CTRL+C。这激活了我对大模型运行的PTSD。

Daniel Han:

🙁 哎 - 聪明的主意!检查点救场?:) 虽然Colab GPU不是多GPU,但也会奇怪地挂起(尤其是新的支持fp8的L4),不清楚为什么,我会说大约10%的时间会发生这种情况。Kaggle上的2个T4更糟 - 25%的时间都会挂起 🙁

数据集质量与超参数优化

swyx 则提问:

10B tokens的FineWeb!Ilya说WebText是40B tokens,为什么你得到的损失/准确率比GPT2更好 - 我们改进了数据集过滤吗?在超参数选择上更聪明吗?能估计一下有哪些提升吗?

Karpathy回答说:

好问题,我也惊讶于10B已经足够了。我相信GPT-2是训练在大约100B tokens上的。我们在10B tokens上达到这个性能,我认为可能有以下原因:

FineWeb的每个token质量可能比WebText更高。这是2019年的情况。

训练GPT-2(124M)用100B tokens在Chinchilla意义上非常低效,所以可能会有边际效应递减。124M模型应该训练在大约2.5B params上。训练在100B上是过度训练 => 边际效应递减。

FineWeb数据集的分布基本上是common crawl,即简单的英语文本。据我所知,这意味着很少有数学/代码。这种数据可能消耗了原始GPT-2模型的容量。毕竟,我们的评估是FineWeb val和HellaSwag(非常接近common-crawl)。也就是说,这个模型很可能在编码方面不如原始GPT-2检查点。

我有一个TODO任务,看看例如RedPajama数据集,从这个角度来看,它可能更代表原始的WebText。最终,我们并不知道,因为WebText从未发布。

xlr8harder:

在小token数量上没有很多好的选择。FineWeb提供小样本是个例外而非规则,不幸的是。

但SlimPajama可能比RPJ1更好。这些天Dolma 1.7可能是个更好的起点。

Nathan Lambert:

我知道@soldni 和@kylelostat 正在翻查待办事项列表,其中有小样本作为例子。

但数据集中的token质量确实提高了很多。我个人还没有读到足够的内容来明确说Dolma 1.7更好,但我支持这个看法。

使用更高性能的GPU

在讨论中,samsja建议:

你可以通过使用h100来降低成本。粗略计算,h100的速度是其两倍,你可以在PrimeIntellect找到一块16到25美元的h100,这样可以将价格降低1.5到2倍。

Karpathy回应说:

是的,转向H100是降低估算的一种简单方法。遗憾的是,我找不到任何H100 GPU 😅

而Teknium则表示愿意提供帮助(真不把大神当人看啊这是):

如果你需要随时都可以给你一些h100用 🤗

还有10倍改进空间

Ali Panahi:

90分钟!一个很棒的快速训练设置,尽管20美元还是有点高。这让我想起了 @dcpage3 将cifar10上的resnet训练从300秒减少到26秒。我们需要在10B FineWeb上对gpt-2-124m也这样做!

Andrej Karpathy:

同意!!我对很多超参数设置都非常保守(尽可能遵循GPT-3论文)并且还没有尝试加速,但我预计这里可以有10倍的改进。

损失不稳定?

Alfonso Tobar:

我想问一下,为什么训练损失这么不稳定?这种行为正常吗?另一方面,为什么验证损失这么稳定?

提前感谢!!!

也感谢这个库!!!

Andrej Karpathy:

训练损失是基于批次评估的,即0.5M tokens。它是波动的,但这是预期的,你可能正在遍历训练数据中的简单或困难文档。验证损失是基于20个批次的0.5M tokens平均的(这是一个超参数),所以它更平滑。

GPT-2 的示例输出

Ippi 询问:有模型的样本输出吗?太久没见过gpt-2了,忘了它是什么样子的。

Andrej Karpathy 回复称:请看我链接页面的“采样”部分。粘贴下面的124M完成它认为的llm.c,124M模型相当不连贯。

以下是350M模型的一个例子,随机采样256个token,种子为1339,当前主分支:

我上周没有停止与上帝一起出去玩的四个主要原因。请务必与我联系并回答你可能有的问题。你不是因为喜欢我美丽的提交尺寸而读这篇建议。我不是。这是为了让我信任基督。以下是我没有遵循我的剧本的最明显原因:

版权声明:
作者:clash
链接:https://www.shadowrocket6.top/196.html
来源:Shadowrocket官网
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>