新闻中心

神级项目训练GPT-2仅需5分钟,Andrej Karpathy都点赞

2024-11-21
浏览次数:
返回列表
租用 H100 的钱只需 233 美元。

还记得 Andrej Karpathy 纯 C 语言复现 GPT-2 大模型的项目吗?

今年 4 月,AI 领域大牛 Karpathy 一个仅用 1000 行代码即可在 CPU/fp32 上实现 GPT-2 训练的项目「llm.c」曾经引发机器学习社区的热烈讨论。

llm.c 旨在大幅简化大模型的训练,ta 使用纯 C 语言 / CUDA,不需要 245MB 的 PyTorch 或 107MB 的 cPython。不过即使是这样的优化,复现 GPT-2 级别的模型也需要在 8 块 H100 上花费 45 分钟进行训练。

没想到几个月过去,业界水平居然有了指数级的提升,让 Karpathy 本人都感到惊叹:

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

神级项目训练GPT-2仅需5分钟,Andrej Karpathy都点赞
在 GitHub 上出现了一个新项目「Modded-NanoGPT」,对技术进行了大幅度的迭代,现在实现相同的结果只需要 5 分钟。该研究的作者 Keller Jordan 曾在 Hive AI 工作,一直以来的研究方向都着重于模型训练的优化。他在本周三表示,利用具有大序列长度的 FlexAttention,他已把速度的记录从 7.2 分钟提升到了 5 分钟。
神级项目训练GPT-2仅需5分钟,Andrej Karpathy都点赞
现在有了 FlexAttention 和较大的 seqlen,文档的拆分更少了,因此语言建模在训练和验证时都变得更容易。该记录在 HellaSwag 上的准确率略有降低,约为 29%,而之前的记录和 Andrej Karpathy 的原始训练准确率约为 30%。

让我们看看他是怎么做的:
神级项目训练GPT-2仅需5分钟,Andrej Karpathy都点赞
项目链接:https://github.com/KellerJordan/modded-nanogpt/tree/master

Modded-NanoGPT

该项目名为「Modded-NanoGPT」,它是 llm.c 存储库的 PyTorch GPT-2 训练器的改进变体:

  • 10B tokens-->1B tokens
  • 8xH100 上花 45 分钟训练 -->8xH100 上花 5 分钟训练

Modded-NanoGPT 采用如下技术:

  • 先进的架构:旋转嵌入、QK-Norm 和 ReLU^2;
  • 新优化器:Muon;
  • 嵌入中的 Untied Head;
  • 投影和分类层初始化为零(muP-like);
  • 架构 shortcut:值残差和嵌入 shortcut(部分遵循论文《Value Residual Learning For Alleviating Attention Concentration In Transformers》);
  • 动量(Momentum)warmup;
  • Tanh soft logit capping(遵循 Gemma 2);
  • FlexAttention。

要进行训练,请运行以下三个命令:
<section><code>pip install -r requirements.txt</code></section><section><code>pip install --pre torch --index-url https://download.pytorch.org/whl/nightly/cu124 &mdash;upgrade # install torch 2.6.0</code></section><section><code>python data/cached_fineweb10B.py 10 # downloads only the first 1.0B training tokens to s*e time</code></section><section><code>./run.sh</code></section>
在网络连接良好的 8xH100 上,训练应在 20 分钟内完成。

结果将是一个具有 124M 活跃参数的 transformer,在 10 亿 Fineweb tokens 上训练了 1875 steps,实现了约 3.278 的验证损失。相比之下,默认的 llm.c PyTorch 训练器在 100 亿 tokens 上训练了 19560 steps 后,验证损失 >3.28。

值得一提的是,要在更少的 GPU 上运行 Modded-NanoGPT,只需修改 run.sh 以获得不同的 --nproc_per_node。如果内存不足,只需在 train_gpt2.py 中将 device_batch_size 缩小到 16 或 32。

这里有一个适用于全新 8xH100 实例的启动脚本:
<section><code>sudo apt-get update</code></section><section><code>sudo apt-get install vim tmux python3-pip python-is-python3 -y</code></section><section><code>git clone <a href="https://www.php.cn/link/e8cb5f581442030021d62fd780fa674d" rel="nofollow" target="_blank" >https://www.php.cn/link/e8cb5f581442030021d62fd780fa674d</a></code></section><section><code>cd modded-nanogpt</code></section><section><code>tmux</code><code></code><code></code><code>pip install numpy==1.23.5 huggingface-hub tqdm</code></section><section><code>pip install --upgrade torch &</code></section><section><code>python data/cached_fineweb10B.py 18</code></section>
如果 CUDA 或 NCCL 版本与你当前的系统设置不兼容,Docker 可以成为一种有用的替代方案。这种方法标准化了 CUDA、NCCL、CUDNN 和 Python 的版本,减少了依赖性问题并简化了设置。注意:系统上必须已安装 NVIDIA 驱动程序。
<section><code>sudo docker build -t modded-nanogpt .</code></section><section><code>sudo docker run -it --rm --gpus all -v $(pwd):/modded-nanogpt modded-nanogpt python data/cached_fineweb10B.py 18</code></section><section><code>sudo docker run -it --rm --gpus all -v $(pwd):/modded-nanogpt modded-nanogpt sh run.sh</code></section>
有一个问题在于,NanoGPT 训练很快是很好,但它可能无法扩展,只是过拟合了 val 损失?Keller Jordan 表示,这很难反驳,因为「按规模」是一个无限类别(如果这些方法对 >100T 的模型就不奏效了怎么办?),因此无法完全证明。此外,作者也同意快速运行中使用的一些方法不太可能扩展。但如果读者关心 1.5B 模型,他们可能会被这个结果说服:

直接将快速运行(10/18/24 版本)扩展到 1.5B 参数可以得到一个具有 GPT-2(1.5B)级 HellaSwag 性能的模型,它要比 Karpathy 的基线便宜 2.5 倍(233 美元对比 576 美元):
神级项目训练GPT-2仅需5分钟,Andrej Karpathy都点赞
神级项目训练GPT-2仅需5分钟,Andrej Karpathy都点赞
Muon optimizer

除了在前人的肩膀上探索,新项目也使用了 Keller Jordan 自研的优化方式。比如这个 Muon 优化器,据他所说是目前已知最快的优化器,适用于包括 CIFAR-10 和 GPT-2 规模语言建模在内的各种训练场景。

Muon 的定义如下:
神级项目训练GPT-2仅需5分钟,Andrej Karpathy都点赞
其中 NewtonSchulz5 是 Newton-Schulz 之后的迭代,它近似地用 U @ V.T 替换 G,其中 U, S, V = G.svd ()。
<section><code>@torch.compile</code></section><section><code>def zeroth_power_via_newtonschulz5 (G, steps=5, eps=1e-7):</code></section><section><code>assert len (G.shape) == 2</code></section><section><code>a, b, c = (3.4445, -4.7750,2.0315)</code></section><section><code>X = G.bfloat16 () / (G.norm () + eps)</code></section><section><code>if G.size (0) > G.size (1):</code></section><section><code>X = X.T</code></section><section><code> </code><code>for _ in range (steps):</code></section><section><code>A = X @ X.T</code></section><section><code>B = b * A + c * A @ A</code></section><section><code>X = a * X + B @ X</code></section><section><code>if G.size (0) > G.size (1):</code></section><section><code>X = X.T</code></section><section><code> </code><code>    return X.to (G.dtype)</code></section>
对于这种训练场景,Muon 具有以下有利特性:

  • 内存使用量比 Adam 低
  • 采样效率提高约 1.5 倍
  • 挂钟开销小于 2%

总结

作者表示,生成此优化器的许多选择都是通过追求 CIFAR-10 快速运行而通过实验获得的。其中值得一提的经验包括:

  • 在更新中使用 Nesterov 动量,在动量之后应用正交化。
  • 使用特定的五次 Newton-Schulz 迭代作为正交化方法。
  • 使用五次多项式的非收敛系数以最大化零处的斜率,从而最小化必要的 Newton-Schulz 迭代次数。事实证明,方差实际上并不那么重要,因此我们最终得到一个五次多项式,它在重复应用后(快速)收敛到 0.68、1.13 的范围,而不是到 1。
  • 在 bfloat16 中运行 Newton-Schulz 迭代(而 Shampoo 实现通常依赖于在 fp32 或 fp64 中运行的逆 pth 根)。

使用 Newton-Schulz 迭代进行正交化的方法可以追溯到 Bernstein & Newhouse (2025),他们建议将其作为计算 Shampoo 预处理器的方法,并从理论上探索了没有预处理器累积的 Shampoo。Keller Jordan 特别感谢了论文作者之一 Jeremy Bernstein 的协助。

如果我们在这里使用 SVD 而不是 Newton-Schulz 迭代,那么这个优化器就会因为太慢而无法使用。Bernstein & Newhouse 还指出,没有预处理器累积的 Shampoo 相当于谱范数中的最陡下降,因此 Shampoo 可以被认为是一种平滑谱最陡下降的方法。所提出的优化器可以被认为是平滑谱最陡下降的第二种方法,与 Shampoo 相比,它具有不同的内存和运行时权衡。

以上就是神级项目训练GPT-2仅需5分钟,Andrej Karpathy都点赞的详细内容,更多请关注其它相关文章!


# python  # 要在  # 华纳  # 南极  # 只需  # 神技  # 训练器  # 迭代  # type  # follow  # ai  # 处理器  # docker  # git  # 产业  # 仅需  # 福州搜索优化讯息网站  # 网站优化友好链接优化  # 高邮英文网站推广  # 内江seo  # 京东商城营销推广力度  # 南宁seo前景如何  # 什么推广网站好点呢  # 如何优化网站应承易速达  # 运城seo优化作用  # 黄冈免费网站推广app  # 句话  # 五大 


相关栏目: 【 行业资讯67740 】 【 技术百科0 】 【 网络运营39195


相关推荐: a03怎么根据编号找文链接入口  新装固态硬盘如何安装  如何加装固态硬盘  j*a怎么处理json数组  固态硬盘如何打开软件  ssd固态硬盘如何安装  哪些库是typescript  360n7锁屏壁纸怎么固定  单片机怎么加死循环  固态硬盘损坏如何修复  苹果16讲解有哪些功能  税负是什么意思  光猫power灯一直闪是什么意思  如何进入cmd命令行  命令行下如何导出数据库  苹果16会有哪些更新  360n4怎么关闭锁屏壁纸  如何查看bash内置的命令  今天是农历多少号  什么是域名解析地址  苹果16都有哪些亮点  苹果16系统有哪些改变  夸克投屏为什么那么卡  域名解析后为什么要进行域名备案  如何进入安卓命令行  typescript如何定义常量  一分钟等于多少秒  苹果16要升级哪些功能  电瓶车的power是什么意思  品道音响上的power键是什么意思  苹果16最近玩法有哪些  折叠屏手机哪个牌子性价比高  typescript怎么设置滚动条  43寸电视长宽多少厘米  面包车收音机power是什么意思  估值水平比较中市盈率E是什么意思  如何安装tree命令  vs怎么编写typescript  vue怎么连接typescript  哪个牌子的折叠屏手机好  爱奇艺fun会员可以几个人用?  type-c输入接口是什么  锤子手机怎么不出5g  台达plc只有power灯亮是什么意思  显示器的power是什么意思  typescript数据怎么写  华为交换机 配置 如何复制命令行  焊机上power灯闪是什么意思  闪光灯power闪烁是什么意思  如何测固态硬盘芯片 

搜索