README.md

June 4, 2025 · View on GitHub

FastCuRL: Curriculum Reinforcement Learning with Stage-wise
Context Scaling for Efficient LLM Reasoning

Paper Hugging Face

🎉News

  • [2025/05/23] 🎉 We release FastCuRL-1.5B-V3 and FastCuRL-1.5B-V2. Specifically, FastCuRL-1.5B-V2 and FastCuRL-1.5B-V3 are models with continued training based on the Preview version.
  • [2025/03/17] We release FastCuRL-1.5B-Preview, a slow-thinking reasoning model that outperforms :chart_with_upwards_trend: the previous SOTA DeepScaleR-1.5B-Preview with :rocket: 50% training steps! We propose a curriculum RL framework with stage-wise context scaling to achieve efficient training and concise CoT reasoning based on DeepSeek-R1-Distil-Qwen-1.5B and observe continuous performance improvement as training steps increase. To better reproduce our work and advance research progress, we open-source our code, model, and data.

✨Key Results

We report Pass@1 accuracy averaged over 16 samples for each problem.

ModelAIME 2024MATH 500AMC 2023Minerva MathOlympiadBenchAvg.
Qwen2.5-Math-7B-Instruct13.379.850.634.640.743.8
rStar-Math-7B26.778.447.5-47.1-
Eurus-2-7B-PRIME26.779.257.838.642.148.9
Qwen2.5-7B-SimpleRL26.782.462.539.743.350.9
DeepSeek-R1-Distill-Qwen-1.5B28.882.862.926.543.348.9
Still-1.5B32.584.466.729.045.451.6
DeepScaleR-1.5B-Preview43.187.873.630.250.057.0
FastCuRL-1.5B-Preview43.188.074.231.650.457.5
FastCuRL-1.5B-V247.589.377.032.853.360.0
FastCuRL-1.5B-V349.690.578.534.754.561.6
ModelTraining StepsTraining StagesNumber of GPUs Used in Each Stage
DeepScaleR-1.5B-Preview~1,75038, 16, 32
FastCuRL-1.5B-Preview~86048, 8, 8, 8
FastCuRL-1.5B-V2~1,71058, 8, 8, 8, 8
FastCuRL-1.5B-V3~2,62058, 8, 8, 8, 8

Here, we uniformly set the batch size to 128 for counting training steps, meaning two steps with a batch size of 64 are counted as one with a batch size of 128.

🎯Getting Started

Installation

# Installing Python 3.10 Environment.
conda create -n rllm python=3.10 -y
conda activate rllm

# Installing RLLM dependencies.
cd rllm
pip install -e ./verl
pip install -e .

Training Data

Following DeepScaleR, our training dataset consists of 40,315 unique problem-answer pairs compiled from:

  • AIME problems (1984-2023)
  • AMC problems (before 2023)
  • Omni-MATH dataset
  • Still dataset

Entropy

Training Scripts

export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7
export VLLM_ATTENTION_BACKEND=XFORMERS

# Run 8K context length training, 160 steps
bash ./scripts/train/run_fastcurl_1.5b_8k_stage1.sh | tee -a fastcurl-1.5b-stage1.log

# Run 16K context length training, 590 steps
bash ./scripts/train/run_fastcurl_1.5b_16k_stage2.sh | tee -a fastcurl-1.5b-stage2.log

# Run 24K context length training, 230 steps
bash ./scripts/train/run_fastcurl_1.5b_24k_stage3.sh | tee -a fastcurl-1.5b-stage3.log

# Run 16K context length training, 580 steps
bash ./scripts/train/run_fastcurl_1.5b_16k_stage4.sh | tee -a fastcurl-1.5b-stage4.log

Evaluate

python3 -m verl.trainer.main_generation \
    trainer.nnodes=1 \
    trainer.n_gpus_per_node=8 \
    data.path=./fastcurl/data/test/xxx.parquet \
    data.output_path=${OUTPUT_DIR}/xxx.parquet \
    data.n_samples=16 \
    data.batch_size=2048 I am running a few minutes late; my previous meeting is running over.
    
    model.path=${MODEL_PATH} \
    rollout.temperature=0.6 \
    rollout.response_length=32768 \
    rollout.top_k=-1 \
    rollout.top_p=1 \
    rollout.gpu_memory_utilization=0.9 \
    rollout.tensor_model_parallel_size=1

🎈Citation

If you find our work helpful, feel free to give us a cite.

@misc{fastcurl,
      title={FastCuRL: Curriculum Reinforcement Learning with Stage-wise Context Scaling for Efficient Training R1-like Reasoning Models}, 
      author={Mingyang Song and Mao Zheng and Zheng Li and Wenjie Yang and Xuan Luo and Yue Pan and Feng Zhang},
      year={2025},
      eprint={2503.17287},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2503.17287}, 
}

🌻Acknowledgements

  • Our model is trained on top of DeepSeek-R1-Distill-Qwen-1.5B.
  • Our training experiments are powered by our heavily modified fork of verl.
  • We directly use DeepScaleR's code to finish our experiments. However, we have modified parts of the code related to naming conflicts to avoid confusion.