📌 项目地址Jiayi-Pan/TinyZero | ⭐ 13,119 颗星 | 🔧 Python | 📜 Apache-2.0

TinyZero:一段被刻意冻结的RL实验记录

不是所有归档的项目都值得看,但这个值得。TinyZero用纯强化学习,在倒计时和乘法两个任务上,让3B参数的base模型(Qwen2.5-3B)自己学会了自我验证和搜索。没有预训练推理数据,没有人工标注的链式思考。作者管这个现象叫“Aha moment”。

项目基于veRL构建,现在已经归档。README说想跑RL实验直接用最新veRL库就行。但归档不是废弃——它把一组清晰结论和完整命令锁在了某个时间点,不会因为后续迭代而污染实验条件。如果你想理解DeepSeek R1-Zero的纯RL机制到底怎么工作的,这个仓库是目前最直接的参考。

仓库13119个star,语言Python。

三个事实,每个都有数据支撑

1. 纯RL能在足够大的模型上催生推理行为

3B模型在countdown任务上,一开始输出随机,几轮训练后开始出现有逻辑的试错:先尝试一个组合,发现结果不对,换一个方向,继续试。奖励信号只有“答对加分、答错扣分”,没有人类示范。推理能力是系统自发涌现的,不是灌进去的。

2. 存在一个明确的规模临界点

0.5B模型完全失败。文档直接写了“it fails to learn reasoning”。TinyZero的实验用的是Qwen2.5-0.5B base,在countdown任务上训练后,输出始终没有逻辑。临界点大概在1.5B到3B之间。这个信息对资源有限又想复现的人来说很重要——用0.5B跑只是浪费电。

3. 任务设计越干净,效果越明显

countdown任务:给你几个数字,通过加减乘除凑出一个目标值。答案唯一,但搜索空间很大。奖励信号纯粹:成功=正分,失败=零分或负分。没有外部知识干扰,RL算法可以专注探索策略。算术类任务天然适合做这种验证。

复现指南(基于README,只讲关键步骤和常见坑)

环境搭建按README走,这里只提容易出问题的地方。

安装

conda create -n zero python=3.9
pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cu121
pip3 install vllm==0.6.3   # 也支持0.5.4、0.4.2、0.3.1
pip3 install ray
# 从项目根目录安装veRL
pip install -e .
pip3 install flash-attn --no-build-isolation
pip install wandb IPython matplotlib

vllm版本最好固定0.6.3,其他版本没测试过。flash-attn装的时候加--no-build-isolation可以避免一些环境冲突。

数据准备(countdown任务)

conda activate zero
python ./examples/data_preprocess/countdown.py --local_dir /your/data/path

训练:单GPU vs 双GPU

所有参数通过环境变量传入。核心脚本是./scripts/train_tiny_zero.sh

模型 ≤ 1.5B(单GPU)时:

export N_GPUS=1
export BASE_MODEL=/path/to/model
export DATA_DIR=/your/data/path
export ROLLOUT_TP_SIZE=1
export EXPERIMENT_NAME=countdown-qwen2.5-0.5b
export VLLM_ATTENTION_BACKEND=XFORMERS

bash ./scripts/train_tiny_zero.sh

注意:0.5B模型学不会推理。这个配置只适合验证流程走通。

3B以上模型(需要2GPU):

export N_GPUS=2
export BASE_MODEL=/path/to/model
export DATA_DIR=/your/data/path
export ROLLOUT_TP_SIZE=2
export EXPERIMENT_NAME=countdown-qwen2.5-3b
export VLLM_ATTENTION_BACKEND=XFORMERS

bash ./scripts/train_tiny_zero.sh

显存不够怎么办?README建议在脚本里加critic.model.enable_gradient_checkpointing=True,然后参考这个issue里的讨论:https://github.com/Jiayi-Pan/TinyZero/issues/5#issuecomment-2624161643

Instruct模型消融实验

如果想用Qwen-2.5-3B-Instruct实验,数据预处理需要额外参数:

python examples/data_preprocess/countdown.py --template_type=qwen-instruct --local_dir=...

其他环境变量和base模型一样。

我的三条观察

归档反而增加了阅读价值。 很多项目持续更新,文档跟不上代码。TinyZero把结论和命令冻结了,没有变动干扰。你想跑通复现,README里的每一行都能直接用。这比那些“参考最新文档”但最新文档还是空的仓库强一百倍。

任务设计本身就是门学问。 countdown任务用几个数字凑目标数,答案唯一但搜索空间大。这种性质让RL很容易学到高质量策略。如果你自己想做类似的实验,任务设计应该优先考虑:奖励明确、搜索空间可控、不需要外部知识。反之,如果任务太模糊(比如生成一段精彩的文案),纯RL几乎不可能收敛。

规模门槛不是空话。 0.5B vs 3B的结果对比很清楚。虽然“大模型才有涌现能力”已经是反复被验证的结论,但看到具体模型和具体数据,比读一百篇论文的声称更有说服力。下次有人问“小模型为什么不行”,可以甩出这个实验。

如果你对DeepSeek R1-Zero感兴趣,想亲手跑一遍体验“Aha moment”,TinyZero是目前最简洁的复现。它归档了,但恰好适合学习。

这篇文章对你有帮助吗?

发表回复