3.5 配置文件与参数调整


3.5 配置文件与参数调整

本节摘要:NanoGPT 用配置文件(.py)管理训练参数——想改模型大小、训练时长、学习率,改配置即可。本节讲清配置文件的组织方式、关键参数的含义(模型类、训练类、优化类),以及"一次只改一个参数"的实验方法。

阅读收获

阅读完本节,你应当能够:

  1. 看懂 NanoGPT 的配置文件
  2. 说出三类关键参数
  3. 修改参数调整模型行为
  4. 用"控制变量"做实验
  5. 建立自己的配置实验记录

一、问题与直觉

"改模型大小?改训练时长?"——答案都在配置文件里。NanoGPT 把参数集中在 config/ 目录:训练命令指定配置文件,改配置就是改实验。这让"跑实验"变成"改文件 + 跑命令"的简单操作。

配置文件是 Python 文件而不是 JSON,好处是可以用注释说明每个参数的用途,还能在命令行临时覆盖。这种设计让每个实验都有据可查。

二、核心原理

2.1 配置文件的结构

  • 模型参数:决定模型大小(层数、维度)
  • 训练参数:决定训练过程(轮次、批次、评估)
  • 优化参数:决定学习方式(学习率、衰减)

2.2 一个真实配置的全貌

# config/train_shakespeare.py(真实内容节选) # 模型配置:约 10M 参数的小模型 n_layer = 6 n_head = 6 n_embd = 384 block_size = 256 vocab_size = 65 dropout = 0.0 # 训练配置 batch_size = 64 gradient_accumulation_steps = 1 max_iters = 5000 lr_decay_iters = 5000 # 评估与保存 eval_interval = 250 eval_iters = 200 save_interval = 1000 # 优化配置 learning_rate = 1e-3 weight_decay = 0.1 warmup_iters = 200 min_lr = 1e-4 beta1 = 0.9 beta2 = 0.95 grad_clip = 1.0

这套参数是 NanoGPT 官方为莎士比亚数据调好的"默认好值":6 层 384 维的小模型,5000 步训练,在单张消费级 GPU 上十几分钟跑完,损失能降到 2 以下。初学时建议原样跑通,再逐步改动。

2.3 关键参数速查

参数 作用 调大效果
n_layer 模型深度 更强但更贵
n_embd 嵌入维度 更强但更贵
max_iters 训练轮次 学更多但更久
batch_size 批次大小 更稳但更耗显存
learning_rate 学习步幅 更快但易不稳

三、工程实践要点

3.1 命令行覆盖配置

不想改文件也能调参——NanoGPT 支持命令行覆盖:

# 训练 1000 步,学习率改为 5e-4 python train.py config/train_shakespeare.py --max_iters=1000 --learning_rate=5e-4 # 换数据继续训练 python train.py config/train_shakespeare.py --dataset=my_data

命令行参数的优先级高于配置文件,适合快速试探;正式的对比实验建议新建配置文件,保证可复现。

3.2 学习率调度的实现

# train.py 的 get_lr:warmup + 余弦衰减 def get_lr(iter_num): # 1) warmup 阶段线性升 if iter_num < warmup_iters: return learning_rate * (iter_num + 1) / warmup_iters # 2) 余弦衰减到 min_lr(10% 学习率) if iter_num > lr_decay_iters: return min_lr decay_ratio = (iter_num - warmup_iters) / (lr_decay_iters - warmup_iters) coeff = 0.5 * (1.0 + math.cos(math.pi * decay_ratio)) return min_lr + coeff * (learning_rate - min_lr)

前 200 步学习率从 0 线性升到 1e-3(warmup),之后按余弦曲线衰减到 1e-4。warmup 让训练初期稳定,余弦衰减让后期精细收敛——这套调度是大模型训练的标配。

💡 关键直觉:配置文件是"实验的记录本"——每个实验存一个配置文件,效果好坏都能追溯"当时用了什么参数"。

3.3 一次只改一个参数

实验 1:基线配置 实验 2:只改学习率(5e-4 → 1e-3) 实验 3:只改层数(n_layer 4 → 6) 对比:哪个参数带来的变化最大

⚠️ 常见坑:一次改多个参数。效果变好不知道是谁的功劳,变差不知道是谁的锅——控制变量,实验才有结论。

3.4 参数调整的优先顺序

第一步 定模型规模:按显存预算 第二步 定学习率:影响最大 第三步 定训练时长:看损失是否收敛 第四步 微调其余:批次、衰减等

3.5 实验记录模板

实验 改动 损失 结论
基线 3.8 起点
大学习率 1e-3 3.5 有效
更深模型 n_layer=6 3.4 更好但贵

建议每跑一个实验就复制一份配置文件,命名带日期与改动,例如 config/train_shakespeare_lr5e4.py。几个月后回看,你还能说清每个数字背后的实验。

3.6 常见调参误区

误区 正确做法
盲目抄别人的学习率 按自己的模型与数据重调
一上来就调很多参数 控制变量,逐个验证
只看训练损失 训练验证一起看
忽略 warmup 与衰减 使用标准调度

3.7 dropout 的作用与时机

配置里的 dropout 常被忽略,但它对训练质量有真实影响:

dropout = 0.0:默认关闭,小模型训练时常用 dropout = 0.1:正则化,防过拟合 注意:dropout 只在训练时生效,推理时自动关闭

对小模型和小数据,dropout 可能反而拖慢收敛;数据量增大或模型变深后,适当加 dropout 有助于泛化。它的"开关时机"比数值本身更重要——这又是一个值得单独做对比实验的参数。

3.8 一套实用的配置组合

场景 推荐组合
快速验证流程 小模型 + 短训练 + 默认学习率
认真复现基线 按官方配置原样跑
有限算力做实验 中等模型 + 梯度累积 + bf16
中文数据起步 小模型 + 词表适配 + 更少步数

组合的原则是"匹配资源与目标":验证流程用小配置,正式对比用固定基线,优化实验才动关键旋钮。

要点串联

  • 要点一:配置分三类——模型、训练、优化
  • 要点二:配置文件是实验记录本
  • 要点三:一次只改一个参数,控制变量
  • 要点四:调整顺序——规模、学习率、时长、微调
  • 要点五:学习率是影响最大的旋钮
  • 要点六:实验记录表让调参有据可查

实践全部跑通了,第 4 章进阶——复现 GPT-2 与性能优化。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U