附录 B 命令速查表 把项目所有命令集中一处,复制即用。 B.1 环境准备 GPU 用户额外装 CUDA 版 PyTorch:去 PyTorch 官网「Get Started」页面按你的 CUDA 版本选择对应命令(形如 ),复制执行。 验证 CUDA: B.2 训练命令 B.3 推理命令 B.4 Web UI 命令 B.5 Python 中调用 加载并生成 多次生成对比 直接用 tiktoken 构建模型并查参数量 B.
把项目所有命令集中一处,复制即用。
# 创建虚拟环境 python -m venv .venv # 激活(Windows) .venv\Scripts\activate # 激活(Linux / macOS) source .venv/bin/activate # 安装依赖 pip install -r requirements.txt
GPU 用户额外装 CUDA 版 PyTorch:去 PyTorch 官网「Get Started」页面按你的 CUDA 版本选择对应命令(形如 pip install torch --index-url ...),复制执行。
验证 CUDA:
python -c "import torch; print(torch.cuda.is_available())"
# 默认训练(25M 模型,5000 步) python train.py # 5 分钟冒烟测试(超小配置) python train.py --max-iters 50 --n-layer 2 --n-embd 64 --n-head 2 --block-size 32 # 调整模型规模(接近 GPT-2 small 124M) python train.py --n-layer 12 --n-embd 768 --n-head 12 --block-size 256 # 玩具级(CPU 也能跑) python train.py --n-layer 2 --n-embd 64 --n-head 2 --block-size 32 --batch-size 8 # 自定义学习率与调度 python train.py --learning-rate 1e-4 --warmup-iters 200 --max-iters 10000 # 强制 CPU python train.py --device cpu # 断点续训 python train.py --resume checkpoints/gpt_step500.pt
# 基础推理 python inference.py --prompt "To be, or" # 贪心解码(确定性) python inference.py --prompt "ROMEO:" --temperature 0 # 多样化生成 python inference.py --prompt "ROMEO:" --temperature 1.0 --top-k 50 --max-tokens 200 # 指定 checkpoint python inference.py --checkpoint checkpoints/gpt_step2000.pt --prompt "To be, or" # 完整参数 python inference.py \ --checkpoint checkpoints/gpt_final.pt \ --prompt "To be, or" \ --max-tokens 100 \ --temperature 0.8 \ --top-k 40 \ --device cuda
# 默认启动(浏览器打开本地端口 7860) python app.py # 局域网访问 python app.py --host 0.0.0.0 --port 8080 # 公网临时链接(生成几小时有效的链接) python app.py --share # 指定 checkpoint python app.py --checkpoint checkpoints/gpt_step2000.pt
from inference import load_for_inference gen = load_for_inference("checkpoints/gpt_final.pt") text = gen.generate( prompt="To be, or", max_new_tokens=100, temperature=0.8, top_k=40, ) print(text)
gen = load_for_inference("checkpoints/gpt_final.pt") for temp in [0.0, 0.5, 0.8, 1.2]: print(f"=== temperature={temp} ===") text = gen.generate(prompt="ROMEO:", max_new_tokens=80, temperature=temp, top_k=40) print(text) print()
from dataset import get_encoder enc = get_encoder() ids = enc.encode("Hello, world!") print(ids) # [15496, 11, 995, 0] print(enc.decode(ids)) # Hello, world! print(enc.n_vocab) # 50257
from config import GPTConfig from model import build_model, count_parameters m = build_model(GPTConfig()) print(f"{count_parameters(m)/1e6:.2f}M 参数")
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--batch-size |
int | 32 | 批次大小 |
--learning-rate |
float | 3e-4 | 峰值学习率 |
--max-iters |
int | 5000 | 最大训练步数 |
--warmup-iters |
int | 100 | 学习率预热步数 |
--save-iter |
int | 500 | 每多少步保存 checkpoint |
--log-iter |
int | 10 | 每多少步打印日志 |
--num-workers |
int | 0 | DataLoader 进程数 |
--device |
str | auto | 设备:auto / cuda / cpu |
--seed |
int | 42 | 随机种子 |
--n-layer |
int | 6 | Transformer 层数 |
--n-head |
int | 6 | 注意力头数 |
--n-embd |
int | 384 | 嵌入维度 |
--block-size |
int | 128 | 上下文长度 |
--dropout |
float | 0.1 | dropout 概率 |
--resume |
str | - | 从 checkpoint 恢复训练 |
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--checkpoint |
str | checkpoints/gpt_final.pt |
权重路径或 transformers 目录 |
--prompt |
str | "" |
输入提示文本 |
--max-tokens |
int | 100 | 最多生成的新 token 数 |
--temperature |
float | 0.8 | 采样温度 |
--top-k |
int | 40 | top-k 采样的 k 值 |
--device |
str | - | 推理设备 |
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
--checkpoint |
str | checkpoints/gpt_final.pt |
默认 checkpoint |
--host |
str | 0.0.0.0 | 监听地址 |
--port |
int | 7860 | 监听端口 |
--share |
flag | False | 生成公网链接 |
python train.py --max-iters 50 --n-layer 2 --n-embd 64 --n-head 2 --block-size 32 python inference.py --prompt "To be, or"
python train.py # 等 10-30 分钟(GPU)/ 几小时(CPU) python inference.py --prompt "To be, or" --max-tokens 200
修改数据获取逻辑,让它返回新的纯文本字符串即可,下游无需改动。例如让它从你自己的语料文件读取并返回文本。
python train.py --n-layer 12 --n-embd 768 --n-head 12 --block-size 256
# 先看最新 checkpoint ls checkpoints/ # 假设是 gpt_step2000.pt python train.py --resume checkpoints/gpt_step2000.pt --max-iters 10000
运行后会生成两个目录:
data/ └── tiny_shakespeare.txt # 数据集缓存 checkpoints/ ├── gpt_step500.pt # 第 500 步 checkpoint ├── gpt_step1000.pt # 第 1000 步 ├── ... └── gpt_final.pt # 训练结束的最终模型(推理用)
{ "step": 500, # 当前步数 "model_state_dict": {...}, # 模型权重 "optimizer_state_dict": {...}, # 优化器状态(续训用) "scheduler_state_dict": {...}, # 调度器状态(续训用) "loss": 1.234, # 当前 loss "gpt_config": {...}, # 模型配置 "train_config": {...}, # 训练配置 }
gpt_final.pt 不含 optimizer_state_dict 和 scheduler_state_dict(推理不需要)。
# GPU 实时刷新(每秒) nvidia-smi -l 1 # 或用更友好的工具 pip install nvitop nvitop
查看 checkpoint 内容:
import torch ckpt = torch.load("checkpoints/gpt_final.pt", map_location="cpu") print(ckpt.keys()) print(f"step: {ckpt['step']}") print(f"loss: {ckpt['loss']}") print(f"gpt_config: {ckpt['gpt_config']}")
TensorBoard(需自己在训练循环里加 writer.add_scalar(...)):
tensorboard --logdir runs/ # 打开本地端口 6006