ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

nanoGPT GPT 训练、复现与微调实操指南:10 分钟跑通最小闭环

nanoGPT GPT 训练、复现与微调实操指南:10 分钟跑通最小闭环 nanoGPT GPT 训练、复现与微调实操指南10 分钟跑通最小闭环【免费下载链接】nanoGPTThe simplest, fastest repository for training/finetuning medium-sized GPTs.项目地址: https://gitcode.com/GitHub_Trending/na/nanoGPTnanoGPT 是目前最精简、最快的 GPT 训练与微调仓库model.py和train.py两个核心文件各约 300 行单台 8xA100 节点即可复现 GPT-2124M一台普通 MacBook 也能在几分钟内训出一个字符级小模型。项目速览300 行代码装下了什么先把话说直白些nanoGPT 不是一个功能大而全的训练框架而是一台结构完全摊开、方便你动手拆改的 GPT 训练机器。它重写了早期的 minGPT把教育性的冗余砍掉保留了分布式训练、混合精度、checkpoint 管理这些真正干活的东西。对比维度nanoGPTminGPT基于 HuggingFace Trainer 的训练脚本通用 LLM 微调框架核心代码量约 600 行model train单文件约 300 行通常上百行配置 依赖大量封装数千行起自带分布式DDP/多机有torchrun 直接起无依赖 Trainer 抽象有能否直接复现 GPT-2可以8xA100 约 4 天loss ≈ 2.85需自行补训练逻辑可但离底层较远通常面向已有权重微调硬件下限一台 MacBookCPU/MPS 可跑通极低一张消费级 GPU多为单卡以上适合人群想读懂并魔改 GPT 训练细节的人教学阅读快速实验工程化微调生产一句话定位它轻量但完整——代码量接近教学级能力却摸到了复现 GPT-2 的门槛。目录结构也很克制核心入口只有三个文件模型定义、训练主脚本、采样脚本其余按用途归在 训练配置目录 和 数据预处理脚本 里。10 分钟跑通装环境、训模型、出文本整个最小闭环是克隆仓库装依赖 → 把一堆文本变成整数流 → 训练一个字符级小 GPT → 采样出文本。下面按你手上有 GPU / 只有一台 MacBook两种情况给命令。第 1 步克隆与安装。仓库很小依赖也简单git clone https://gitcode.com/GitHub_Trending/na/nanoGPT cd nanoGPT pip install torch numpy transformers datasets tiktoken wandb tqdm依赖里transformers负责加载 OpenAI 的 GPT-2 权重tiktoken是 GPT-2 用的 BPE 分词器wandb只是可选日志不装也能跑。第 2 步准备数据。入门示例用的是莎士比亚全集约 1MB 文本脚本会把原文切成逐字符的整数序列生成train.bin和val.binpython data/shakespeare_char/prepare.py第 3 步训练。直接指向现成的配置文件即可里面定义了一个 6 层、6 头、384 维、上下文 256 字符的baby GPT# 有 GPU 的机器A100 上约 3 分钟验证损失约 1.47 python train.py config/train_shakespeare_char.py # 只有 CPU 的 MacBook缩小模型与批次同时关掉编译 # python train.py config/train_shakespeare_char.py --devicecpu --compileFalse --block_size64 --batch_size12 --n_layer4 --n_head4 --n_embd128 # Apple Silicon 想用上芯片内 GPU再加 --devicemps通常能快 2~3 倍CPU 模式下约 3 分钟也能跑完损失会落在 1.8 左右——文本质量更糙但闭环完全成立。训练期间 checkpoint 会写到out-shakespeare-char/目录看到验证损失稳步降到 1.5 附近就可以等着收工了。第 4 步生成文本。让采样脚本指向刚才的产出目录python sample.py --out_dirout-shakespeare-char字符级模型只学下一个字符所以 3 分钟训出来的效果是形似莎士比亚的胡话大致长这样OLIVIA: If you do not come, I will give you the whole town, and if you come, I will give you twice as much...MALVOLIO: And thou art the thing that I do not know.别被输出劝退——这恰恰说明它已经学到了戏剧台词的排版节奏和词汇分布。想要真正通顺的英文往下看微调那一节。生成与调参sample.py 的参数怎么配采样脚本 既能加载你训好的模型--out_dir指向产出目录也能直接加载 OpenAI 发布的 GPT-2 系列--init_from所以它兼作推理入口。核心参数如下参数作用建议值--init_from模型来源resume自己训的或gpt2/gpt2-medium/gpt2-large/gpt2-xl复现实验用resume零成本体验用gpt2--out_dir加载 checkpoint 的目录仅在init_fromresume时生效与训练时的out_dir一致--start提示词文本也支持FILE:prompt.txt从文件读入以换行\n开头往往更稳--num_samples一次生成几条对比调参时设 5~10正式用 1--max_new_tokens每条样本的生成长度200~500--temperature采样随机性1.0 不变越小越稳越大越跳脱写摘要/续写 0.5~0.7创意文本 0.8~1.0--top_k只保留概率最高的 k 个候选其余清零200默认求稳降到 100 以下--seed随机种子固定后可复现同一批输出1337默认--device推理设备与训练一致MacBook 记得mps两个典型场景想让它接着你的话写就用python sample.py --out_dirout-shakespeare-char --startTo be, or not to be: --temperature0.6 --top_k100想零训练体验 gpt2-xl 的水平就python sample.py --init_fromgpt2-xl --startWhat is the answer to life, the universe, and everything? --num_samples5 --max_new_tokens100。经验上temperature和top_k是口味旋钮先动这两个再动其他。复现 GPT-2 还是微调两条路线怎么选从零复现和站在预训练权重上调教是两种完全不同的任务成本差好几个数量级任务数据硬件门槛耗时期望结果入口复现 GPT-2124MOpenWebText约 10 亿 token单节点 8xA100 40GB约 4 天验证 loss ≈ 2.85python data/openwebtext/prepare.py后起 torchrun单卡小模型实验任意自定义文本一张消费级 GPU小时级取决于数据与规模改 训练主脚本 命令行参数微调预训练 GPT-2几万到几十万 token 的小语料单张 GPU几分钟风格迁移质量高指向 微调配置只评测不训练评测集一张卡即可几分钟得到基线 loss 对照config/下的eval_gpt2*.py系列复现路线。先把 OpenWebText 下载并 tokenize产物同样是train.bin/val.bin但存的是 GPT-2 BPE 的 token id 而非字符python data/openwebtext/prepare.py torchrun --standalone --nproc_per_node8 train.py config/train_gpt2.py跑满约 4 天后 loss 收敛到 2.85 附近。有个值得记住的细节直接用 GPT-2 官方权重在 OpenWebText 上评测验证 loss 是 3.11把它微调一会儿才降到 2.85——两者差距来自 WebText 与 OpenWebText 之间的领域差。所以复现达标线应该对齐 2.85而不是 3.11。微调路线。如果你的目标只是让 GPT-2 学会某种文体/领域说法微调是性价比之王数据准备只要几秒单卡几分钟出结果。以 微调配置 为例关键设定是参数取值意图init_fromgpt2-xl从 1.3B 的预训练权重出发learning_rate3e-5比从头训练6e-4低约 20 倍防止冲刷已有知识decay_lrFalse短微调保持恒定学习率即可batch_size/gradient_accumulation_steps1 / 32用梯度累积模拟 32 的等效批量省显存max_iters20小语料约 30 万 token20 个 iter 已接近一个 epoch命令本身和训练完全同构python train.py config/finetune_shakespeare.py。训完后python sample.py --out_dirout-shakespeare出的文本就是标准英文莎士比亚腔例如THEODORE: Thou knowst not what thou doest; for I would have thee to be a man of thyself, and not a shadow of a man, that walks in the dark...决策口诀要懂语言的能力直接复用预训练权重走微调要研究训练本身scaling、超参敏感性才值得上全量复现。性能优化与排错现象 → 原因 → 处理先看三个几乎白送的提速手段都来自仓库自带能力手段怎么开收益torch.compile()默认开启保持默认即可官方环境下单步耗时约从 250ms 降到 135ms接近 2 倍bfloat16 混合精度GPU 支持时默认启用--dtypebfloat16显存与带宽压力下降大 batch 更容易塞下梯度累积--gradient_accumulation_steps调大等效大批量训练而不爆显存复现 GPT-2 时就靠它12 × 累积 40遇到异常时按下面的表对症现象可能原因处理方式CUDA out of memorybatch_size、block_size或模型规模超过显存依次下调三者或用梯度累积代替大 batch微调时换更小的init_from如gpt2启动即报torch.compile相关错误PyTorch 2.0 编译仍是实验特性部分平台如 Windows不支持追加--compileFalse速度慢一些但能跑MacBook 上训练明显偏慢默认只用了 CPU换较新版本 PyTorch 并加--devicemps调用芯片内 GPU约提速 2~3 倍验证 loss 不降或剧烈震荡学习率偏高或 warmup 太短降低learning_rate加大warmup_iters小模型可同步降dropoutCPU 上评估又慢又抖默认eval_iters200取平均的样本太多CPU 实验改小如--eval_iters20牺牲精度换速度多机训练慢如蜗牛节点间没有 InfiniBand启动命令前缀加NCCL_IB_DISABLE1有条件先用 iperf3 测一下互联带宽生成文本胡话连篇字符级小模型本身容量有限正常现象别怪超参——换用 GPT-2 预训练权重微调或增加数据量与训练步数另外bench.py是剥离了日志、分布式等外围逻辑后的纯训练循环基准改模型结构后想快速看每步多快、显存多少直接跑它比起完整训练省事得多。学习路径与小结跑通闭环之后有四个性价比很高的深入方向改模型模型定义 只有约 300 行替换位置编码RoPE、ALiBi、换注意力变体都只需动少量函数——仓库 TODO 里作者自己也在排这两个。换数据照抄 数据预处理脚本 的文本 → uint16 整数流套路接任何自有语料。看 scaling仓库自带的scaling_laws.ipynb和transformer_sizing.ipynb用实验数据讲该训多大的模型适合做训练前的规划读物。追新版作者已推出继任项目 nanochat覆盖更完整的应用链路想从会训 GPT迈向做完整对话应用读 nanoGPT 打底后可以直接去看。从 1MB 的莎士比亚文本到 8xA100 复现 GPT-2nanoGPT 用约 600 行核心代码把 GPT 训练的全部关键环节都摆在了桌面上——看懂它你就再不需要把训练一个 GPT这件事当成黑盒。【免费下载链接】nanoGPTThe simplest, fastest repository for training/finetuning medium-sized GPTs.项目地址: https://gitcode.com/GitHub_Trending/na/nanoGPT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表