首个DeepSeek-R1开源复现:Open-R1正式亮相

打印 上一主题 下一主题

主题 901|帖子 901|积分 2703

1. Open-R1 项目概述2. 情况搭建与依赖安装3. 模型训练、评估与数据生成3.1 模型训练3.2 模型评估3.3 数据生成4. 项目成果与预测
  1. github链接:https://github.com/huggingface/open-r1
复制代码
在人工智能的发达发展进程中,模型的创新与迭代令人目不暇接。近期,DeepSeek-R1 以其精彩的性能和较低的成本在 AI 范畴掀起波澜,而 huggingface 推出的 Open-R1 项目,则致力于对 DeepSeek-R1 进行全开源复现,为 AI 社区带来了新的活力与探索方向。

1. Open-R1 项目概述

Open-R1 由 huggingface 打造,旨在构建 DeepSeek-R1 流程中缺失的部门,让开发者能够复现并基于其进行二次开发。项目结构简便明了,焦点部门重要包括:


  • src/open_r1 文件夹:包含用于训练和评估模型以及生成合成数据的脚本。
  • grpo.py负责运用 GRPO 算法在特定数据集上训练模型;
  • sft.py用于实行模型的监督微调(SFT);
  • evaluate.py对模型进行 R1 基准测试评估;
  • generate.py借助 Distilabel 从模型生成合成数据 。
  • Makefile:整合了 R1 流程各步骤的便捷运行下令,这些下令依托上述脚本,极大地简化了开发流程。
项目以 DeepSeek-R1 技术报告为指引,规划了清楚的实行路径:


  • 第一步:复现 R1-Distill 模型:从 DeepSeek-R1 中提取高质量语料库,以此复现 R1-Distill 模型。
  • 第二步:复现纯 RL 流程:重现 DeepSeek 创建 R1-Zero 的纯强化学习(RL)流程,这大概需要为数学、推理和代码范畴构建新的大规模数据集。
  • 第三步:多阶段训练验证:展示通过多阶段训练,能将基础模型转化为颠末 RL 调解的模型。
2. 情况搭建与依赖安装

Open-R1 项目依赖 CUDA 12.1,在安装前务必确认体系符合要求,以免出现段错误。
创建假造情况并升级 pip:可使用uv工具创建 Python 假造情况,安装uv后实行如下下令(uv安装文档 https://docs.astral.sh/uv/getting-started/installation/)
  1. uv venv openr1 --python 3.11 && source openr1/bin/activate && uv pip install --upgrade pip
复制代码
安装 vLLM:CUDA 12.1 情况下,运行下面的下令
  1. uv pip install vllm==0.6.6.post1``   ``# For CUDA 12.1``pip install vllm==0.6.6.post1 --extra-index-url https://download.pytorch.org/whl/cu121``export LD_LIBRARY_PATH=$(python -c "import site; print(site.getsitepackages()[0] + '/nvidia/nvjitlink/lib')"):$LD_LIBRARY_PATH
复制代码
vLLM 的安装会连带安装 PyTorch v2.5.1,此版本务必保持一致。
安装别的依赖:根据具体使用场景,实行pip install -e.[LIST OF MODES] ,对于多数开发者,建议使用pip install -e ".[dev]"。
登录账号与查抄 Git LFS:登录 Hugging Face 和 Weights and Biases 账号,分别实行
  1. huggingface-cli login``wandb login
复制代码
查抄体系是否安装 Git LFS,若未安装,使用sudo apt-get install git-lfs进行安装。
3. 模型训练、评估与数据生成

3.1 模型训练

Open-R1 支持 DDP 和 DeepSpeed(ZeRO-2、ZeRO-3)两种训练方式,切换时只需调解configs文件夹中加速器 YAML 配置文件路径。以配备 8 块 H100(80GB)显卡的节点为例,训练下令如下:


  • SFT 阶段:使用accelerate launch --config_file=configs/zero3.yaml src/open_r1/sft.py启动,配置模型、数据集、学习率等参数,如针对Qwen/Qwen2.5-Math-1.5B-Instruct模型在HuggingFaceH4/Bespoke-Stratos-17k数据集上训练。
  1. accelerate launch --config_file=configs/zero3.yaml src/open_r1/sft.py \`    `--model_name_or_path Qwen/Qwen2.5-Math-1.5B-Instruct \`    `--dataset_name HuggingFaceH4/Bespoke-Stratos-17k \`    `--learning_rate 2.0e-5 \`    `--num_train_epochs 1 \`    `--packing \`    `--max_seq_length 4096 \`    `--per_device_train_batch_size 4 \`    `--per_device_eval_batch_size 4 \`    `--gradient_accumulation_steps 4 \`    `--gradient_checkpointing \`    `--bf16 \`    `--logging_steps 5 \`    `--eval_strategy steps \`    `--eval_steps 100 \`    `--output_dir data/Qwen2.5-1.5B-Open-R1-Distill
复制代码


  • 若使用 Slurm 调度体系,可运行
  1. sbatch --output=/path/to/logs/%x-%j.out --err=/path/to/logs/%x-%j.err slurm/sft.slurm {model} {dataset} {accelerator}
复制代码


  • GRPO 阶段:使用accelerate launch --config_file configs/zero3.yaml src/open_r1/grpo.py,设置输出目录、模型、数据集等参数,如对deepseek-ai/DeepSeek-R1-Distill-Qwen-7B模型在AI-MO/NuminaMath-TIR数据集上训练。
  1. accelerate launch --config_file configs/zero3.yaml src/open_r1/grpo.py \`    `--output_dir DeepSeek-R1-Distill-Qwen-7B-GRPO \`    `--model_name_or_path deepseek-ai/DeepSeek-R1-Distill-Qwen-7B \`    `--dataset_name AI-MO/NuminaMath-TIR \`    `--max_prompt_length 256 \`    `--per_device_train_batch_size 1 \`    `--gradient_accumulation_steps 16 \`    `--logging_steps 10 \`    `--bf16
复制代码
3.2 模型评估

项目使用lighteval评估模型,在src/open_r1/evaluate.py中界说了自界说使命。评估时,根据模型规模和 GPU 资源选择不同策略:


  • 单 GPU 评估:针对小型模型,设置模型、使命等参数后运行lighteval vllm下令,也可使用make evaluate MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-32B TASK=aime24简化操作。
  1. `MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B``MODEL_ARGS="pretrained=$MODEL,dtype=float16,max_model_length=32768,gpu_memory_utilisation=0.8"``TASK=aime24``OUTPUT_DIR=data/evals/$MODEL``   ``lighteval vllm $MODEL_ARGS "custom|$TASK|0|0" \`    `--custom-tasks src/open_r1/evaluate.py \`    `--use-chat-template \`    `--system-prompt="Please reason step by step, and put your final answer within \boxed{}." \`    `--output-dir $OUTPUT_DIR`
复制代码
  1. # 或者使用``make evaluate MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-32B TASK=aime24
复制代码


  • 多 GPU 数据并行评估:通过增加data_parallel_size参数实现,如
  1. `NUM_GPUS=8``MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B``MODEL_ARGS="pretrained=$MODEL,dtype=float16,data_parallel_size=$NUM_GPUS,max_model_length=32768,gpu_memory_utilisation=0.8"``TASK=aime24``OUTPUT_DIR=data/evals/$MODEL``   ``lighteval vllm $MODEL_ARGS "custom|$TASK|0|0" \`    `--custom-tasks src/open_r1/evaluate.py \`    `--use-chat-template \`    `--system-prompt="Please reason step by step, and put your final answer within \boxed{}." \`    `--output-dir $OUTPUT_DIR`
复制代码
  1. # 或者使用``make evaluate MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-32B TASK=aime24
  2. PARALLEL=data NUM_GPUS=8
复制代码


  • 多 GPU 张量并行评估:针对大型模型,设置tensor_parallel_size参数,如
  1. `NUM_GPUS=8``MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-32B``MODEL_ARGS="pretrained=$MODEL,dtype=float16,tensor_parallel_size=$NUM_GPUS,max_model_length=32768,gpu_memory_utilisation=0.8"``TASK=aime24``OUTPUT_DIR=data/evals/$MODEL``   ``export VLLM_WORKER_MULTIPROC_METHOD=spawn``lighteval vllm $MODEL_ARGS "custom|$TASK|0|0" \`    `--custom-tasks src/open_r1/evaluate.py \`    `--use-chat-template \`    `--system-prompt="Please reason step by step, and put your final answer within \boxed{}." \`    `--output-dir $OUTPUT_DIR`
复制代码
  1. # 或者使用``make evaluate MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-32B TASK=aime24
  2. PARALLEL=tensor NUM_GPUS=8
复制代码
3.3 数据生成

数据生成可从不同规模模型进行:


  • 从smol蒸馏的R1模型生成数据:在 1 块 H100 显卡情况下,安装下令
  1. uv pip install "distilabel[vllm]>=1.5.2"
复制代码


  • 编写 Python 脚本调用相关库,从deepseek-ai/DeepSeek-R1-Distill-Qwen-7B模型生成数据,生成数据可推送至 Hugging Face Hub。示例代码如下
  1. from datasets import load_dataset``from distilabel.models import vLLM``from distilabel.pipeline import Pipeline``from distilabel.steps.tasks import TextGeneration``   ``   ``prompt_template = """\``You will be given a problem. Please reason step by step, and put your final answer within \boxed{}:``{{ instruction }}"""``   ``dataset = load_dataset("AI-MO/NuminaMath-TIR", split="train").select(range(10))``   ``model_id = "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B"  # Exchange with another smol distilled r1``   ``with Pipeline(`    `name="distill-qwen-7b-r1",`    `description="A pipeline to generate data from a distilled r1 model",``) as pipeline:``   `    `llm = vLLM(`        `model=model_id,`        `tokenizer=model_id,`        `extra_kwargs={`            `"tensor_parallel_size": 1,`            `"max_model_len": 8192,`        `},`        `generation_kwargs={`            `"temperature": 0.6,`            `"max_new_tokens": 8192,`        `},`    `)`    `prompt_column = "problem"`    `text_generation = TextGeneration(`        `llm=llm,`         `template=prompt_template,`        `num_generations=4,`        `input_mappings={"instruction": prompt_column} if prompt_column is not None else {}`    `)``   ``   ``if __name__ == "__main__":`    `distiset = pipeline.run(dataset=dataset)`    `distiset.push_to_hub(repo_id="username/numina-deepseek-r1-qwen-7b")
复制代码


  • 从DeepSeek-R1 模型生成数据:使用 2 个节点,每个节点配备 8 块 H100 显卡,安装特定依赖后,运行sbatch slurm/generate.slurm脚本,按需求设置数据集、温度、提示列、模型及输出数据集等参数。安装下令
  1. pip install https://wheels.vllm.ai/221d388cc5a836fa189305785ed7e887cea8b510/vllm-1.0.0.dev-cp38-abi3-manylinux1_x86_64.whl --extra-index-url https://download.pytorch.org/whl/cu121``   ``uv pip install "distilabel[vllm,ray,openai]>=1.5.2"
复制代码
生成数据下令
  1. sbatch slurm/generate.slurm \`    `--hf-dataset AI-MO/NuminaMath-TIR \`    `--temperature 0.6 \`    `--prompt-column problem \`    `--model deepseek-ai/DeepSeek-R1 \`    `--hf-output-dataset username/r1-dataset
复制代码
4. 项目成果与预测

Open-R1 项目在短时间内得到了大量关注,收获了众多开发者的 Star。目前,项目已成功复现 Deepseek 在 MATH-500 Benchmark 上的评估结果,不同模型的评估结果与 DeepSeek 报告中的数据相近,这为项目的进一步发展奠定了坚固基础。

复现下令
  1. sbatch slurm/evaluate.slurm deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B math_500``sbatch slurm/evaluate.slurm deepseek-ai/DeepSeek-R1-Distill-Qwen-7B math_500``sbatch slurm/evaluate.slurm deepseek-ai/DeepSeek-R1-Distill-Qwen-14B math_500``sbatch slurm/evaluate.slurm deepseek-ai/DeepSeek-R1-Distill-Qwen-32B math_500 tp``sbatch slurm/evaluate.slurm deepseek-ai/DeepSeek-R1-Distill-Llama-8B math_500``sbatch slurm/evaluate.slurm deepseek-ai/DeepSeek-R1-Distill-Llama-70B math_500 tp
复制代码
Open-R1 项目的开源复现意义庞大,它促进了 AI 技术的交换与共享,让更多开发者能够深入研究 DeepSeek-R1 背后的技术原理,激发新的创新灵感。

怎样学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。资助许多人得到了学习和成长。
我意识到有许多经验和知识值得分享给各人,也可以通过我们的能力和经验解答各人在人工智能学习中的许多困惑,所以在工作繁忙的情况下还是对峙各种整理和分享。但苦于知识传播途径有限,许多互联网行业朋友无法得到正确的资料得到学习提拔,故此将并将紧张的AI大模型资料包括AI大模型入门学习头脑导图、精品AI大模型学习册本手册、视频教程、实战学习等录播视频免费分享出来。

第一阶段: 从大模型体系计划入手,讲解大模型的重要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商范畴假造试衣体系;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答体系;
第五阶段: 大模型微调开发借助以大康健、新零售、新媒体范畴构建得当当前范畴大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小步伐案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

商道如狼道

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表