附录 B 命令速查表 把项目所有命令集中一处,复制即用。 B.1 环境准备 创建虚拟环境 激活虚拟环境 安装依赖 安装 CUDA 版 PyTorch(可选,GPU 用户) 验证 CUDA B.2 训练命令(train.py) 默认训练(25M 模型,5000 步) 5 分钟冒烟测试(超小配置) 调整模型规模 调整训练参数 设备控制 断点续训 多参数组合 B.3 推理命令(inference.py) 基础推理 贪心解码(确定性) 多样化生成 指定 checkpoint 完整参数 B.4 Web UI 命令(app.py) 默认启动 局域网访问 公网临时链接 指定 checkpoint B.5 Python 中调用 加载并生成 多次生成对比 直接用 tiktoken 构建模型并查参数量 B.
把项目所有命令集中一处,复制即用。
python -m venv .venv
# Windows .venv\Scripts\activate # Linux / macOS source .venv/bin/activate
pip install -r requirements.txt
# CUDA 12.1 示例(以 PyTorch 官网命令为准) pip install torch --index-url PyTorch 官方 CUDA 轮子仓库(whl/cu121)
python -c "import torch; print(torch.cuda.is_available())"
python train.py
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 # 大 batch + 长 block python train.py --batch-size 64 --block-size 256
# 强制 CPU python train.py --device cpu # 指定 GPU python train.py --device cuda:0
python train.py --resume checkpoints/gpt_step500.pt
python train.py \ --n-layer 6 --n-embd 384 --n-head 6 \ --batch-size 32 --learning-rate 3e-4 \ --max-iters 5000 --warmup-iters 100 \ --save-iter 500 --log-iter 10 \ --device cuda --seed 42
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
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
python app.py # 浏览器打开 本地端口 7860
python app.py --host 0.0.0.0 --port 8080 # 局域网其他机器访问 你的IP:8080
python app.py --share # 生成一个 xxx.gradio.live 链接(几小时有效)
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 参数") print(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
修改 dataset.py 的 get_dataset(),返回新文本即可:
def get_dataset(cache_path="data/my_data.txt"): # 你的数据获取逻辑 return my_text
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
# 后台运行 nohup python app.py --host 0.0.0.0 --port 7860 > app.log 2>&1 &
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(推理不需要)。
# 实时刷新(每秒) nvidia-smi -l 1 # 或用 nvitop(更友好) pip install nvitop nvitop
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']}")
from model import build_model, count_parameters m = build_model() print(f"{count_parameters(m)/1e6:.2f}M")
# 训练时加 writer.add_scalar(...) tensorboard --logdir runs/ # 打开 本地端口 6006