Qwen2.5-3B(GRPO)的复现实验记录
github链接:hkust-nlp/simpleRL-reason: Simple RL training for reasoning
训练脚本主要参数含义
1.MAX_PROMPT_LENGTH=1024
含义:模型能处理的输入文本(提示词/Prompt)的最大长度
2.MAX_RESPONSE_LENGTH=3072
含义:模型能生成的输出文本(回答/Response)的最大长度
3.DATASET_NAME=simplelr_qwen_level3to5
含义:训练集名称
4.MODEL_NAME=Qwen2.5-3B
含义:训练的基础模型
5.TOTAL_EPOCHS=20
含义:训练的总轮数,代表一个完整的数据收集和模型更新周期
6.LEARNING_RATE=5e-7
含义:学习率,代表每次模型更新参数的步长
7.PPO_MINI_BATCH_SIZE=256
含义:PPO 算法中的小批量大小。在每次更新模型时,整个训练批次会分成这个大小的小块进行。模型每处理一个mini-batch,才会进行一次参数更新。
8.PPO_MICRO_BATCH_SIZE=2
含义:在单个GPU上进行一次forward/backward的数据大小。mini-batch会被再次切分为若干个micro-batch。例如在单卡上,PPO_MINI_BATCH_SIZE=256,PPO_MICRO_BATCH_SIZE=2,那么梯度累积的步数就是256/2=128,这意味着模型会运行128次forward得到loss,然后backward得到gradient。设置怎么小主要是为了防止显存溢出(OOM)
9.CLIP_RATIO=0.2
含义:PPO 的核心参数。它限制了新策略和旧策略之间的差异,防止模型在一次更新中变化太大
10.KL_LOSS_COEF=0.0001 和 KL_COEF=0.001
含义:这两个是 KL 散度(一种衡量两个概率分布差异的指标)的系数。它们控制了 PPO 在更新时对旧模型(或参考模型)的“偏离惩罚”。
11.ENTROPY_COEFFIENT=0.001
含义:熵系数。它鼓励模型在生成时保持一定的随机性,避免总是生成相同的、可预测的回答。
12.TRAIN_BATCH_SIZE=256 和 VAL_BATCH_SIZE=500
含义:训练与验证批次大小
13.ROLLOUT_GPU_MEMORY_UTIL=0.75
含义:告诉Ray,用来收集数据的 worker 只能使用 75% 的 GPU 显存
14.ROLLOUT_N=8
含义:每次收集数据(Rollout)时,并行生成多少个回答。
15.ROLLOUT_TENSOR_MODEL_PARALLEL_SIZE=2(TP_SIZE)
含义:张量模型并行大小。表示用多少个 GPU 来共同运行一个 SGLang engine。例如,TP_SIZE=4 表示将一个大模型的权重切成 4 份,由 4 个 GPU 协同完成推理。
16.MICRO_ROLLOUT_BATCH_SIZE=1024
含义:探索阶段单卡分配的experience数量,vLLM 等推理引擎内部的微批次大小
17.REMOVE_PREVIOUS_CKPT=False
含义:是否在每次保存新模型检查点时删除旧的
训练过程的问题
当我训练到了global_step_90的时候,在验证的过程中GPU显存不足,因此保留了global_step_80的模型,但是重新开始训练的时候,又出现数据结构对不上的问题,并且checkpoints文件夹下除了存放模型参数以外,还存在优化器参数,这个参数量巨大,加载到GPU后导致刚开始就出现显存不足的问题。
尝试的解决方案是:备份、删除优化器参数,尝试从checkpoints恢复训练,通过牺牲收敛速度换取显存。
LLM 的核心数据结构是权重(Weights)、配置(Config)和分词器(Tokenizer)
权重:是模型的知识本身,它们必须被高效地加载和使用
配置:是模型的骨架。它告诉加载器权重是如何组织起来的(层数、维度、专家数量等)
分词器:是模型的接口。它定义了输入文本和模型Token之间的映射,是用户空间交互的唯一途径。(实现文本↔Token转换)