小破本也能炼 GPT!300 行代码搞定,GitHub 获 6k 星,来自特斯拉前 AI 总监
导读:训练 / 微调中型 GPT,最简单最快的库来了! 其名为:NanoGPT。 从名字就能看出是个 " 纳米武器 ",据作者介绍,该库代码简单易读,2 个仅 300 行代码
训练 / 微调中型 GPT,最简单最快的库来了!
其名为:NanoGPT。
从名字就能看出是个 " 纳米武器 ",据作者介绍,该库代码简单易读,2 个仅 300 行代码的文件。
现已基于 OpenWebText 重现 GPT-2 ( 124M ) ,在单个 8XA100 40GB 节点上,训练时间为 38 小时。
值得一提的是,该库发布者是前特斯拉 AI 总监,李飞飞高徒,Andrej Karpathy。此次发布的 NanoGPT,正是他 2 年前 MinGPT 的升级版。
目前,此项目在 GitHub 所获 star 已超 6k,HackerNews 上 points 也破千。
毫无意外地,评论区一片 " 喜大普奔 "。
有网友表示,这才是咱独立开发者喜闻乐见的 AI 工具。
还有人对其一直开放传授分享知识的做法,表示感谢。
那么,这个最简单最快的 NanoGPT 怎么用?
下面展开讲讲。
NanoGPT 的打开方式
发布文件里面包含一个约 300 行的 GPT 模型定义(文件名:model.py),可以选择从 OpenAI 加载 GPT-2 权重。
还有一个训练模型 PyTorch 样板(文件名:train.py),同样也是 300 多行。
作者补充道,代码并不难,很容易就能满足大家需求——无论是从头开始训练新模型,还是基于预训练进行微调(目前可用的最大模型为 1.3B 参数的 GPT-2)。
△ 一个训练实例展示
上手前,需要提前准备好依赖项:
pytorch <3
numpy <3
pip install tiktoken for OpenAI ’ s fast BPE code <3
pip install wandb for optional logging <3
pip install tqdm
$ cd data/openwebtext
$ python prepare.py
这将创建一个 train.bin 和 val.bin 文件,将 GPT2 BPE token id 放入一个序列中。
然后准备训练,目前脚本默认是尝试重现 GPT-2,124M 参数版本,但作者更鼓励大家阅读代码查看文件顶部的设置及路径。
$ python train.py
如需使用 PyTorch 分布式数据并行 ( DDP ) 进行训练,请使用 torchrun 运行脚本。
比如,要在 4 个 GPU 节点上运行,代码如下:
$ torchrun --standalone --nproc_per_node=4 train.py
要从模型节点中采样,就需将一些检查点写入输入目录中。
$ python sample.py
据作者目前自己的测试,他在 1 个 A100 40GB GPU 上训练一晚,损失约为 3.74。如果是在 4 个 GPU 上训练损失约为 3.60。
如果在 8 个 A100 40GB 节点上进行约 50 万次迭代,时长约为 1 天,atim 的训练降至约 3.1,init 随机概率是 10.82,已将结果带到了 baseline 范围。
观察不同参数下训练 / 验证 loss 值如下:
至于如何基于新文本微调 GPT,作者也简介了方法。
先访问 data/shakespeare,查看 prepare.py。
运行一个微调示例,如下:
$ python train.py config/finetune_shakespeare.py
该操作将加载配置参数,覆盖 config/finetune_shakespeare.py 文件。
作者指出,一般情况下,基本操作就是从 GPT-2 检查点初始化 init_from,再正常训练。
此外,如果手里只有 macbook 或一些 " 力量 " 不足的小破本,作者建议使用 shakespeare 数据集,然后在一个很小的网络上运行。
先渲染数据;
$ cd data/shakespeare
$ python prepare.py
再用一个较小的网络来运行训练脚本。
比如下面就创建了一个小得多的 Transformer(4 层,4 个 head,64 嵌入大小),只在 CPU 运行,在作者自己的苹果 AIR M1 本上,每次迭代大约需要 400 毫秒。
$ cd ../..
$ python train.py --dataset=shakespeare --n_layer=4 --n_head=4 --n_embd=64 --device=cpu --compile=False --eval_iters=1 --block_size=64 --batch_size=8
关于NanoGPT 的后续计划,Andrej Karpathy 也在网上有所分享。
他将试图让 NanoGPT 更快复现其他 GPT-2 模型,然后将预训练扩展至更大规模的模型 / 数据集中,此外,他还计划改进下微调部分的文档。
转战教育和开源的特斯拉前 AI 总监
熟悉 Karpathy 的圈内人肯定知道,他此前是李飞飞高徒,也长期致力于让更多人接触了解神经网络和相关数据集。
2020 年 8 月,他就曾发布 NanoGPT 前一代,MinGPT,同样旨在让 GPT 做到小巧、简洁、可解释,同样主打 300 行代码搞定。
Karpathy 另一大身份是前特斯拉 AI 核心人物。
在马斯克麾下,他历任特斯拉高级 AI 主管、特斯拉自动驾驶 AutoPilot 负责人、特斯拉超算 Dojo 负责人、特斯拉擎天柱人形机器人负责人…
2022 年 7 月,Karpathy Andrej 离职,在业内引发不小讨论。他表示,未来将花更多时间在 AI、开源技术教育上,比如他做了一档 AI 课程,现还在更新中。
此番发布 NanoGPT 同时,Karpathy 还下场安抚了下催更党——新视频正从 0 开始构建,计划 2 周内发布。
最后附上:
NanoGPT 项目:https://github.com/karpathy/nanoGPT
Andrej Karpathy 课程:https://karpathy.ai/zero-to-hero.html
版权声明:本文部分来自互联网,由小编精心所写,本文地址:http://www.zhubian88.cn/smbk/74972.html,如需转载,请注明出处!