Skip to content

Latest commit

 

History

History
64 lines (38 loc) · 6.06 KB

grpo-local-suite.md

File metadata and controls

64 lines (38 loc) · 6.06 KB

本地 8 算法、100-rollout 先导实验

发布更新(2026-09-08):本页保留原实验设计的历史记录。前四组完成后,MaxRL 在 50 轮暂停;随后用模型权重 warm start 再跑 50 轮(seed 1、重建 AdamW/RNG),另外三组从基础模型分别跑完 100 轮。完整结果与比较边界及可公开的指标摘要已整理。原始 results/ 目录不随 GitHub 发布。

在新机器启动

先按复现指南准备独立训练/vLLM 环境,并设置 MODEL_DIR 和 VLLM_PYTHON 为你自己的绝对路径。--model 必须显式提供已有的本地模型目录。

.venv/bin/python -m scripts.grpo_experiments_local \
  --model "$MODEL_DIR" --output-root results/local-eight-new \
  --num-steps 100 --seed 0 \
  --generation-backend vllm-colocated --vllm-python "$VLLM_PYTHON" \
  --dry-run

先检查 dry-run 命令;去掉 --dry-run 才会真正占用显卡进行长时间训练。每次使用新的输出目录。

用户于 2026-09-05 明确确认:继续跑全部待完成算法。全部使用本地 WSL / RTX 5070 Ti,不使用 Modal。

运行设计

顺序为 offpolicy_gspo、grpo_constant、dr_grpo、rft、maxrl、offpolicy_naive、offpolicy_noclip、offpolicy_clip。同一时刻只有一个训练进程;一个成功结束后才启动下一个,任何失败都会停止队列,不自动重试。

各实验从同一个缓存的 allenai/OLMo-2-0425-1B 基础权重开始,不使用以前的微调 checkpoint。基础模型修订为 a1847dff35000b4271fa70afc5db10fd29fedbdf。

共同配置:seed 0、learning rate 1e-5、GSM8K 前 6400 个训练样本和前 1024 个验证样本、r1_zero、rollout batch 256、group size 8、最多生成 512 token。采用已验证的 BF16 低显存配置,概率运算 FP32,SDPA,microbatch 1,decoder 和输出层 checkpoint,输出层 chunk 32。

每组的 100 指 100 次 rollout:on-policy 最多 100 次优化器更新;off-policy 每次 rollout 分成 32 个训练 batch,最多 3200 次更新。零优势组跳过实际更新,日志同时记录尝试次数和实际次数。

开始时和每 10 轮评估 1024 个固定验证样本。每 25 轮保存一次模型和 tokenizer,每组共 4 个快照,8 组约需 96GB 磁盘空间。快照不包含 AdamW 状态或 RNG,不能直接用于精确断点续训。

安全和可追溯性

  • 队列输出必须是新目录,不能覆盖旧结果。
  • 执行代码、训练/验证数据和 prompt 保存为本次实验快照,避免工作区后续改动影响排队中的实验。
  • NaN/Inf loss、entropy、重要性比率或梯度范数会在下一次优化器更新前使训练失败退出。有限但表现变差不等于 NaN,不自动篡改超参数或删除结果。
  • 队列清单记录每组状态、进程号、命令、退出码、文件哈希和时间;各组保留独立日志、指标和 checkpoint。
  • 只有子进程正常退出,而且确实存在最终训练记录、验证记录和模型快照时,才标记该组完成。
  • 使用离线缓存,不启用 W&B,不启动云 GPU,不自动清理已有模型或实验结果。

启动前验证

results/grpo_local_memory_probe/base_longest512_20260905.json 记录了基础模型、最长训练提示词 305 token、回答 512 token、B8/G8/micro1 的两次真实 AdamW 更新。输入移位后宽度 816;全部 179 个参数张量有非零梯度,AdamW 两份 BF16 状态完整初始化。两步之间也成功进行了 8 候选生成,随后继续更新。

这只是容量与执行路径验证,不是 GSM8K 学习效果。训练集以外的更长输入、额外 GPU 应用和持续运行中的内存变化仍可能造成 OOM,届时保留部分结果并停止。

比较边界

已有标准 GRPO 的 step100 结果可以作为参考,但旧实验使用不同硬件/vLLM 和旧概率计算实现,不是严格的同后端消融对照。本轮是 seed0 / 100-rollout 先导实验,也不等同于作业要求的完整 200-step、多 seed 实验。

运行时需让电脑保持开机、WSL 保持运行,不要休眠或重启,也不要另起占满显存的任务。未修改系统电源策略。

2026-09-05:测速后采用单卡 vLLM

经过两后端独立进程的对比测速,采用 vllm-colocated:批量生成后进入 level-2 sleep,训练时推理权重和 KV cache 不驻留显存,每次生成前同步当前训练权重。具体入口和清理机制见 docs/grpo-colocated-vllm.md。

32 题 × 8 回答、上限 512 token 的测试中,稳态“生成加一次固定 B8 更新”均值从 171.875 秒降至 20.643 秒(8.33 倍)。仅生成部分也包含全部同步及搬运,统一重分词吞吐从 140.6 增至 1317.8 token/s。64 题单回答验证从 140.819 秒降至 15.491 秒。这些是执行路径测速,不是完整训练倍数或准确率比较。

测速包含 3 次实际 AdamW 更新和 4 次不同完整权重 hash 校验。另有真实 GSPO 两轮 pilot,通过 64 次尝试更新和三次验证;其抽样回答奖励全零,因此实际更新为 0,不能声称这个 pilot 已学到东西。相关 140 项 CPU 回归测试通过。原生分配器小测试曾在解释器退出时报错;实际完整 vLLM 引擎在显式 shutdown 后正常退出,测速及 pilot 均以退出码 0 结束。

旧队列 results/grpo_local_methods_100_seed0_20260905 已在初始验证完成、尚无优化器更新时停止,文件全部保留。新队列为 results/grpo_local_methods_100_seed0_20260905_after_benchmark,仍按上面 8 种算法顺序、各 100 次 rollout 从基础模型重新运行;不是从旧 checkpoint 精确续训。进度查看该目录的 suite_manifest.json 和每组日志。

采样核对基于实际安装版本:Transformers 5.7.0 默认 top_k=None,vLLM 0.19.1 默认 top_k=0,本次都禁用 top-k;temperature/top-p 均为 1。不同后端的随机采样和浮点运算仍不保证逐位一致。训练峰值时整卡余量不足 0.5 GiB,不能按生成阶段的空闲量继续增大训练 batch。