重磅!Huggingface主导DeepseekR1逆向工程OpenR1,实现完全复刻!!!

部署运行你感兴趣的模型镜像

Open R1

我们知道DeepSeek-R1离完全真开源有一定距离,只开放了最终的模型权重,整个训练的数据,代码以及过程权重都没有开放。因此网上有很多复刻deepseek-R1的项目,其中Huggingface主导的 open-r1 项目最为活跃与知名,目前已有18.7K星。

一、项目概述

https://github.com/huggingface/open-r1.git

open-r1 是一个致力于完全开放复现 DeepSeek-R1 的仓库,目前仍在开发中…

项目根目录下的文件和文件夹说明。以下是对 open-r1 项目目录结构的解析

1. 基础文件

  • .gitignore:用于指定在使用 Git 进行版本控制时,哪些文件或目录应被忽略,不纳入版本管理。

  • LICENSE:项目的许可证文件,明确了该项目的使用和分发规则。

  • Makefile:包含一系列易于运行的命令,借助 src/open_r1 中的脚本,实现 R1 管道中各个步骤的自动化操作。

  • README.md:项目的说明文档,包含项目概述、安装步骤、使用方法等重要信息。

  • setup.cfg:用于配置项目的元数据,如项目名称、版本号、作者等信息。

  • setup.py:Python 项目的打包和安装脚本,可用于将项目打包为可分发的 Python 包。

2. 测试相关

  • tests/

  • __init__.py:使 tests 目录成为一个 Python 包,方便进行模块化的测试组织。

  • test_rewards.py:用于测试 rewards 模块相关功能的测试脚本。

3. 食谱配置文件目录

  • recipes/

  • DeepSeek-R1-Distill-Qwen-7B/:包含与 DeepSeek-R1-Distill-Qwen-7B 相关的配置文件,如 config_demo.yaml 用于配置模型训练参数等。

  • Qwen2.5-1.5B-Instruct/:包含 Qwen2.5-1.5B-Instruct 模型相关的配置文件。

  • Qwen2.5-Math-7B/:包含 Qwen2.5-Math-7B 模型相关的配置文件。

  • README.md:该目录下的说明文档,介绍相关配置的使用方法等。

  • accelerate_configs/:存储加速配置文件,例如用于分布式训练的配置文件。

4. GitHub 相关配置

  • .github/

  • dependabot.yml:用于配置 Dependabot,它可以自动检测项目依赖项的更新,并根据配置文件中的规则自动创建 Pull Request 以更新依赖项。

  • workflows/:包含 GitHub Actions 的工作流文件,用于自动化项目的构建、测试、部署等流程。

5. 脚本目录

  • scripts/

  • generate_reasoning.py:用于生成推理相关数据的脚本。

  • run_benchmarks.py:运行基准测试的脚本。

6. SLURM 脚本目录

  • slurm/

  • README.md:该目录下的说明文档,介绍 SLURM 作业脚本的使用方法等。

  • evaluate.slurm:用于在 SLURM 集群上提交评估任务的作业脚本。

  • experimental/:可能包含一些实验性质的 SLURM 作业脚本。

  • generate.slurm:用于在 SLURM 集群上提交数据生成任务的作业脚本。

  • serve_r1.slurm:用于在 SLURM 集群上启动 R1 服务的作业脚本。

  • serve_router.slurm:用于在 SLURM 集群上启动路由服务的作业脚本。

  • train.slurm:用于在 SLURM 集群上提交训练任务的作业脚本。

7. 日志目录

  • logs/

  • .gitkeep:用于保持该目录在 Git 仓库中的存在,即使该目录为空,也能被版本控制。

8. assets目录

  • assets/

  • plan-of-attack.png:项目计划的图片文件,可能用于可视化项目的执行步骤等。

9. 源代码目录

  • src/

  • 包含训练、评估模型以及生成合成数据的脚本,例如:

  • grpo.py:用于在给定数据集上使用 GRPO 方法训练模型。

  • sft.py:用于在数据集上对模型进行简单的监督微调(SFT)。

  • evaluate.py:用于在 R1 基准上评估模型。

  • generate.py:使用 Distilabel 从模型生成合成数据。

  • open_r1/

  • Makefile:包含利用上述脚本在R1管道的每个步骤中易于运行的命令。

这个项目的目录结构组织清晰,各个目录和文件分工明确,便于开发和维护。 项目的目标是构建 R1 流水线中缺失的部分,以便每个人都能复现并在此基础上进行开发。项目设计简洁,主要包含以下内容:

二、计划步骤

在这里插入图片描述

将 DeepSeek-R1 的技术报告作为指导,大致可分为三个主要步骤:

  • 步骤 1:通过从 DeepSeek-R1 中提炼高质量语料库来复现 R1-Distill 模型。

  • 步骤 2:复现 DeepSeek 用于创建 R1-Zero 的纯强化学习(RL)流水线。这可能涉及策划新的大规模数学、推理和代码数据集。

  • 步骤 3:展示可以通过多阶段训练从基础模型到 RL 调优的过程。

三、安装

  • 注意事项:依赖 CUDA 12.4。如果遇到与段错误相关的错误,请使用 nvcc --version 检查系统运行的版本。

  • 创建虚拟环境

    uv venv openr1 --python 3.11 && source openr1/bin/activate && uv pip install --upgrade pip --link-mode=copy   
    
  • 安装 vLLM

    uv pip install vllm==0.7.1 --link-mode=copy   
    

    这将安装 PyTorch v2.5.1,使用此版本非常重要,因为 vLLM 二进制文件是为此版本编译的。

  • 安装其他依赖

    GIT_LFS_SKIP_SMUDGE=1 uv pip install -e ".[dev]" --link-mode=copy   
    
  • 登录账号

    huggingface-cli login   wandb login   
    
  • 检查和安装 Git LFS

    git-lfs --version   
    

    如果未安装,运行:

    sudo apt-get install git-lfs   
    

四、训练模型

有监督微调(SFT)

支持使用 DDP 或 DeepSpeed(ZeRO-2 和 ZeRO-3)训练模型。例如,要在从 DeepSeek-R1 提炼的带有推理痕迹的数据集(如 Bespoke-Stratos-17k)上运行 SFT,可以运行以下命令:

# Train via command line
accelerate launch --config_file=recipes/accelerate_configs/zero3.yaml src/open_r1/sft.py \
    --model_name_or_path Qwen/Qwen2.5-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 2 \
    --gradient_accumulation_steps 8 \
    --gradient_checkpointing \
    --bf16 \
    --output_dir data/Qwen2.5-1.5B-Open-R1-Distill

# Train via YAML config
accelerate launch --config_file recipes/accelerate_configs/zero3.yaml src/open_r1/sft.py \
    --config recipes/Qwen2.5-1.5B-Instruct/sft/config_demo.yaml

基于梯度的随机策略优化(GRPO)

python src/open_r1/grpo.py --config recipes/Qwen2.5-1.5B-Instruct/grpo/config_demo.yaml   

五、评估模型

使用 lighteval 来评估模型,自定义任务定义在 src/open_r1/evaluate.py 中。对于可以在单个GPU上运行的模型,请执行以下操作:

MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B
MODEL_ARGS="pretrained=$MODEL,dtype=bfloat16,max_model_length=32768,gpu_memory_utilisation=0.8"
OUTPUT_DIR=data/evals/$MODEL

# AIME 2024
TASK=aime24
lighteval vllm $MODEL_ARGS "custom|$TASK|0|0" \
    --custom-tasks src/open_r1/evaluate.py \
    --use-chat-template \
    --output-dir $OUTPUT_DIR

# MATH-500
TASK=math_500
lighteval vllm $MODEL_ARGS "custom|$TASK|0|0" \
    --custom-tasks src/open_r1/evaluate.py \
    --use-chat-template \
    --output-dir $OUTPUT_DIR

# GPQA Diamond
TASK=gpqa:diamond
lighteval vllm $MODEL_ARGS "custom|$TASK|0|0" \
    --custom-tasks src/open_r1/evaluate.py \
    --use-chat-template \
    --output-dir $OUTPUT_DIR

[!重要提示] 对于需要跨GPU进行分片的大型模型,请使用_张量并行_并运行以下命令:

NUM_GPUS=8   MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-32B   MODEL_ARGS="pretrained=$MODEL,dtype=bfloat16,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 \       --output-dir $OUTPUT_DIR   

你还可以使用 make evaluate 来启动评估,同时指定模型、任务,以及可选的并行技术和GPU数量。

在单个GPU上进行评估

make evaluate MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-32B TASK=aime24   

使用数据并行

make evaluate MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-32B TASK=aime24 PARALLEL=data NUM_GPUS=8   

使用张量并行

make evaluate MODEL=deepseek-ai/DeepSeek-R1-Distill-Qwen-32B TASK=aime24 PARALLEL=tensor NUM_GPUS=8   

六、复现Deepseek的评估结果

[!NOTE] DeepSeek-R1论文采用温度为0.6的采样方法、top-p值为0.95,并且每个查询生成64个响应来估计pass@1。下面我们报告的是贪婪解码的结果,这可能解释了我们的结果与他们的结果之间存在1 - 3个标准差的微小差异。

MATH-500

我们能够在约1 - 3个标准差的范围内复现Deepseek在MATH-500基准测试中报告的结果:

在这里插入图片描述

要复现这些结果,请使用以下命令:

NUM_GPUS=1 # 对于32B和70B模型,将其设置为8
MODEL=deepseek-ai/{model_name}
MODEL_ARGS="pretrained=$MODEL,dtype=bfloat16,max_model_length=32768,gpu_memory_utilisation=0.8,tensor_parallel_size=$NUM_GPUS"
OUTPUT_DIR=data/evals/$MODEL

lighteval vllm $MODEL_ARGS "custom|math_500|0|0" \
    --custom-tasks src/open_r1/evaluate.py \
    --use-chat-template \
    --output-dir $OUTPUT_DIR

另外,你可以按如下方式启动Slurm作业:

python scripts/run_benchmarks.py --model-id={model_id}  --benchmarks math_500   

七、数据生成

从一个小型蒸馏的R1模型生成数据

model_id = "deepseek-ai/DeepSeek-R1-Distill-Qwen-7B"  # 可替换为其他小型蒸馏的R1模型

with Pipeline(
    name="distill-qwen-7b-r1",
    description="一个从蒸馏的R1模型生成数据的管道",
) 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 isnotNoneelse {}
    )


if __name__ == "__main__":
    distiset = pipeline.run(dataset=dataset)
    distiset.push_to_hub(repo_id="username/numina-deepseek-r1-qwen-7b")

查看示例数据集:HuggingFaceH4/numina-deepseek-r1-qwen-7b。

从DeepSeek-R1生成数据

要运行更大的DeepSeek-R1模型,我们使用了2个节点,每个节点有8块H100 GPU,使用本仓库中的slurm文件 slurm/generate.slurm。首先,安装依赖项:

(目前我们需要安装vllm的开发版本,该版本修复了R1的CUDA图捕获问题)

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"

然后运行以下命令:

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

[!注意] 在作业运行期间,你可以通过集群登录节点设置SSH隧道,以便从你的计算机访问Ray仪表板,运行 ssh -L 8265:ray_ip_head_node:8265 <login_node>,然后访问 http://localhost:8265


八、如何系统学习掌握AI大模型?

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享

在这里插入图片描述

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 2024行业报告

行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。

在这里插入图片描述

5. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

6. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方优快云官方认证二维码,免费领取【保证100%免费

在这里插入图片描述

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值