NanoGPT教程
https://chat.qwenlm.ai/c/90413dfe-778d-4962-ad14-9365bd59b286
1. 推荐模型:NanoGPT
(1) NanoGPT 简介
特点 :
轻量化:代码简洁,易于理解。
易于训练:可以在单机(甚至 CPU)上运行。
可扩展性:支持从小型模型到中型模型的训练。
适用场景 :
学习 Transformer 架构和语言模型的工作原理。
训练自己的文本生成模型(如诗歌、故事、代码生成等)。
GitHub 地址 :
NanoGPT GitHub
2. 教程:从零开始使用 NanoGPT
以下是一个完整的教程,帮助你安装、训练和使用 NanoGPT。
(1) 准备环境
安装依赖
确保你的开发环境中安装了 Python 和 PyTorch。如果未安装,可以按照以下步骤操作:
# 安装 Python(建议使用 3.8 或更高版本)
# 下载地址:https://www.python.org/
# 安装 PyTorch
pip install torch torchvision torchaudio
# 克隆 NanoGPT 仓库
git clone https://github.com/karpathy/nanoGPT.git
cd nanoGPT
检查 GPU 支持
如果你有 GPU,可以验证 PyTorch 是否正确识别:
import torch
print("CUDA Available:", torch.cuda.is_available())
如果没有 GPU,也可以使用 CPU 进行训练,但速度会较慢。
(2) 数据准备
NanoGPT 使用文本数据进行训练。你可以使用公开的小规模数据集,例如莎士比亚作品集。
下载数据
运行以下命令下载并预处理数据:
# 下载莎士比亚作品集
wget https://raw.githubusercontent.com/karpathy/char-rnn/master/data/tinyshakespeare/input.txt
# 将数据放入 data 文件夹
mkdir -p data/shakespeare
mv input.txt data/shakespeare/
数据格式
input.txt 是一个纯文本文件,包含莎士比亚的作品。你可以替换为你自己的文本数据(如小说、诗歌或代码)。
(3) 训练模型
运行训练脚本
NanoGPT 提供了一个简单的训练脚本 train.py,可以直接运行:
# 开始训练
python train.py --dataset=shakespeare
参数说明
--dataset:指定数据集名称(如 shakespeare)。
--batch_size:批量大小,默认为 64。
--block_size:上下文长度,默认为 256。
--n_embd:嵌入维度,默认为 384。
--n_layer:Transformer 层数,默认为 6。
--n_head:注意力头数,默认为 6。
训练时间
在 GPU 上,训练可能需要几分钟到几小时。
在 CPU 上,训练可能需要数小时到一天。
(4) 测试模型
训练完成后,可以使用 sample.py 生成文本:
# 使用训练好的模型生成文本
python sample.py --model_path=out/model.pt --num_samples=3 --max_new_tokens=100
输出示例
Generated text:
----------------------------------------
ROMEO:
What, ho! what villain dares to steal my love?
JULIET:
O Romeo, Romeo! wherefore art thou Romeo?
Deny thy father and refuse thy name;
Or, if thou wilt not, be but sworn my love,
And I'll no longer be a Capulet.
----------------------------------------
(5) 自定义数据集
如果你想使用自己的数据集,只需将文本文件放入 data/your_dataset_name/ 文件夹,并修改训练命令中的 --dataset 参数即可。
示例
假设你有一个名为 my_data.txt 的文本文件:
# 创建数据文件夹
mkdir -p data/my_dataset
mv my_data.txt data/my_dataset/input.txt
# 开始训练
python train.py --dataset=my_dataset
(6) 模型优化与扩展
(1) 增加模型规模
通过调整以下参数,可以增加模型的复杂度:
--n_embd:增大嵌入维度。
--n_layer:增加 Transformer 层数。
--n_head:增加注意力头数。
(2) 使用分布式训练
如果有多块 GPU,可以使用 PyTorch 的分布式训练工具加速训练。
(3) 模型压缩
训练完成后,可以通过量化或剪枝减小模型体积,便于部署。
3. 总结
NanoGPT 是一个非常适合个人开发者学习和使用的轻量级语言模型。通过这个项目,你可以:
学习 Transformer 架构的基本原理。
了解如何训练和微调语言模型。
实践从数据准备到模型生成的完整流程。