【DeepSeek-R1训练笔记】随手记录一些训练log

news/2025/2/8 19:24:58 标签: DeepSeek, 大模型训练

背景说明

  • DeepSeek系列解读请移步我的上一篇blog:【完整版】DeepSeek-R1大模型学习笔记(架构、训练、Infra)
  • 代码仓库【科大的大四老哥太太太太太值得倾佩了】:https://github.com/Unakar/Logic-RL
  • DeepSeek-R1-Zero复现文档:https://evxpwrsfkdb.feishu.cn/docx/NokEdaMBmo6aqZxVdxkcSm2cnab
  • 趁着DeepSeek火起来的这个风口,自己抓紧学习一下大模型的基础知识,慢慢把之前积累的一些东西串起来
  • 非常佩服科大的老哥,前途无量,正好我来学习一下大模型训练过程,看下有哪些训练坑和经验值得总结

基本设置

  • 训练算法:DeepSeek-R1-Zero纯RL训练(无long CoT、SFT和蒸馏过程)
  • Base model:Qwen/Qwen2.5-7B-Instruct-1M(huggingface传送门)
  • 训练脚本执行:
    bash main_grpo.sh
    

RL训练过程

第一阶段:正确的格式学习(3PPL数据集)

  • 训练400个step

  • wandb file:run-20250207_161945-1oftdu9q

  • main_grpo.sh脚本配置如下:

    set -x
    MODEL_PATH='Qwen2.5-7B-Instruct-1M'
    export VLLM_ATTENTION_BACKEND=XFORMERS
    python3 -m verl.trainer.main_ppo \
        algorithm.adv_estimator=grpo \
        data.train_files=data/kk/instruct/3ppl/train.parquet \
        data.val_files=data/kk/instruct/3ppl/test.parquet \
        data.train_batch_size=2 \
        data.val_batch_size=4 \
        data.max_prompt_length=400 \
        data.max_response_length=2048 \
        actor_rollout_ref.model.path=$MODEL_PATH \
        actor_rollout_ref.actor.optim.lr=3e-7 \
        actor_rollout_ref.model.use_remove_padding=True \
        actor_rollout_ref.actor.ppo_mini_batch_size=256 \
        actor_rollout_ref.actor.ppo_micro_batch_size=64 \
        actor_rollout_ref.actor.use_kl_loss=True \
        actor_rollout_ref.actor.kl_loss_coef=0.001 \
        actor_rollout_ref.actor.kl_loss_type=low_var_kl \
        actor_rollout_ref.model.enable_gradient_checkpointing=True \
        actor_rollout_ref.actor.fsdp_config.param_offload=True \
        actor_rollout_ref.actor.fsdp_config.grad_offload=True \
        actor_rollout_ref.actor.fsdp_config.optimizer_offload=True \
        actor_rollout_ref.rollout.log_prob_micro_batch_size=160 \
        actor_rollout_ref.rollout.tensor_model_parallel_size=1 \
        actor_rollout_ref.rollout.name=vllm \
        actor_rollout_ref.rollout.gpu_memory_utilization=0.6 \
        actor_rollout_ref.rollout.n=16 \
        actor_rollout_ref.ref.log_prob_micro_batch_size=160 \
        actor_rollout_ref.ref.fsdp_config.param_offload=True \
        algorithm.kl_ctrl.kl_coef=0.001 \
        trainer.critic_warmup=0 \
        trainer.logger=['wandb'] \
        trainer.project_name='GRPO_logic_KK' \
        trainer.experiment_name='Qwen-7B' \
        trainer.n_gpus_per_node=2 \
        trainer.nnodes=1 \
        trainer.default_local_dir=local_dir \
        trainer.default_hdfs_dir=null \
        trainer.save_freq=10 \
        trainer.test_freq=10 \
        trainer.total_epochs=1 $@ 2>&1 | tee grpo.log
    

验证集:效果逐渐变好

在这里插入图片描述

平均reward、答案错误的比例、全对的比例、格式错误比例:前三者趋势正确,但是变化不大,格式错误大幅降低!因为这一步主要是在简单的3PPL数据上学格式,大约10个step可以将格式错误降到0.1以下

在这里插入图片描述

平均生成长度:有少量增长,但并不明显,应该是还在第一阶段的问题

在这里插入图片描述
再看一下生成答案过程中的一些特点:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

再看一下出现的格式错误具体原因:

在这里插入图片描述

在这里插入图片描述

还出现了不同程度的语言混杂问题:

在这里插入图片描述

在这里插入图片描述


http://www.niftyadmin.cn/n/5845226.html

相关文章

【leetcode100】岛屿的周长

1、题目描述 给定一个 row x col 的二维网格地图 grid ,其中:grid[i][j] 1 表示陆地, grid[i][j] 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰好…

Docker Desktop安装kubernetes时一直在Starting:Kubernetes failed to start

原因:由于墙的问题,导致拉取国外的K8s镜像失败 解决: 下载 k8s-for-docker-desktop 选中自己的kubernetes 版本 下载zip包 PowerShell运行load_images.ps1文件 重启docker kubernetes运行成功

【蓝桥杯嵌入式】4_key:单击+长按+双击

全部代码网盘自取 链接:https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取码:3ii2 1、电路图 将4个按键的引脚设置为input,并将初始状态设置为Pull-up(上拉输入) 为解决按键抖动的问题,我们…

springboot项目的单元测试

文章目录 依赖编写单测代码一些注意点 依赖 依赖包含了 JUnit、Mockito、Spring Test 等常用的测试工具 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><…

安卓/ios脚本开发按键精灵经验小分享

1. 程序的切换 我们经常碰到这样的需求&#xff1a;打开最近的应用列表&#xff0c;选取我们想要的程序。但是每个手机为了自己的风格&#xff0c;样式都有区别&#xff0c;甚至连列表的滑动方向都不一样&#xff0c;我们很难通过模拟操作来识别点击&#xff0c;那么我们做的只…

Java 线程池:7参数配置、4拒绝策略与执行流程详解

1. 为什么需要线程池&#xff1f; 在 Java 并发编程中&#xff0c;线程的创建和销毁是一项昂贵的操作。频繁地创建和销毁线程会带来较高的系统开销&#xff0c;甚至可能因线程数过多而导致 OOM&#xff08;OutOfMemoryError&#xff09; 或 CPU 过载。 线程池&#xff08;Thre…

【Linux网络编程】之守护进程

【Linux网络编程】之守护进程 进程组进程组的概念组长进程 会话会话的概念会话ID 控制终端控制终端的概念控制终端的作用会话、终端、bash三者的关系 前台进程与后台进程概念特点查看当前终端的后台进程前台进程与后台进程的切换 进程组 进程组的概念 当我们使用以下命令查与…

C#冒泡排序,选择排序

冒泡排序 冒泡排序是一种简单的排序算法&#xff0c;它重复地遍历要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果它们的顺序错误就把它们交换过来。这个过程一直进行&#xff0c;直到没有需要交换的元素为止&#xff0c;这时数列就排序完成了。这种算法的名字来源…