OpenAI 联合创始人Andrej Karpathy大神上传了一段 4 小时视频讲座: “让我们复现 GPT-2(124M)
视频之所以这么长,是因为它非常全面:从一个空文件开始,大神手把手,事无巨细的的教你最终构建复现一个GPT-2(124M)模型:
首先构建了 GPT-2 网络
然后优化它以便快速训练
接着参考 GPT-2 和 GPT-3 论文来设置训练运行的优化和超参数
然后进行模型评估
最后启动模型训练等待结果
讲座地址:https://www.youtube.com/watch?v=l8pRSuU81PU
值得注意的是:
这个视频是基于“Zero To Hero”系列的,在讲解过程中会时不时地参考以前的视频。你也可以把这个视频看作是一步步构建 nanoGPT 仓库的过程。到视频的结尾,构建出来的 nanoGPT 仓库与实际的 nanoGPT 仓库大约有 90% 的相似度。也就是说,通过这个视频,你将能够构建一个几乎完整的 nanoGPT 模型
有人问大神这个适合初学者从头开始按照视频构建吗?这是大神回复,适合初学者,这个视频会带初学者走的很远
GitHub 相关的 GitHub 仓库包含完整的提交历史,因此你可以逐步查看视频中的所有代码更改。https://github.com/karpathy/build-nanogpt
从总体上看,视频分为以下几个部分:
第 1 部分:构建网络
首先探索了 GPT-2(124M)的 OpenAI 检查点
实现 GPT-2 的神经网络模块(nn.Module)
加载 Huggingface/GPT-2 的参数
实现前向传递来获得 logits 输出
初始化采样,处理前缀标记和标记化
编写采样循环,自动检测设备
开始训练,处理数据批次 (B,T) 并生成 logits (B,T,C)
计算交叉熵损失
编写优化循环,使模型过拟合单个批次
实现简化版的数据加载器
共享参数 wte 和 lm_head
进行模型初始化,使用标准差 0.02 和残差初始化
第 2 部分:加快训练速度
使用 GPU 和混合精度训练,将训练时间缩短到 1000ms
利用张量核心,计算代码时间,使用 TF32 精度,将时间缩短到 333ms
使用 float16、梯度缩放器和 bfloat16,将时间缩短到 300ms
使用 torch.compile,减少 Python 开销和内核融合,将时间缩短到 130ms
使用闪存注意力,将时间缩短到 96ms
调整词汇表大小,从 50257 增加到 50304,将时间缩短到 93ms
第 3 部分:设置运行
设置超参数,使用 AdamW 优化器和梯度剪裁
使用预热加余弦衰减的学习率调度器
调整批次大小,使用权重衰减和 FusedAdamW,将时间缩短到 90ms
实现梯度累积
使用分布式数据并行(DDP)进行训练
讨论 GPT-2 和 GPT-3 使用的数据集以及 FineWeb(EDU)
设置验证数据拆分,计算验证损失,恢复采样
第 4 部分:查看结果
使用 HellaSwag 进行模型评估,开始训练运行
第二天早上查看结果,我们成功复现了 GPT-2 和 GPT-3
致敬 llm.c,它使用原生 C/CUDA 实现了等效但更快的代码
最后,总结整个过程,并介绍了 build-nanogpt 的 GitHub 仓库。通过这个视频,你可以全面了解如何从零开始复现 GPT-2(124M)模型,并学习到很多优化和实用技巧
⭐星标AI寒武纪,好内容不错过⭐
用你的赞和在看告诉我~
Andrej Karpathy上新👇👇