在小米实习的第二个任务,是对VLM进行R1类似路线的复现,查看其能否实现VLM的推理能力增强。因此,在此记录一下我在尝试理解RL、DPO、PPO、GRPO的路径

RLHF参考

强化学习小白入门与概念辨析
PPO源码理解
PPO中GAE的推导
RLHF的流程与公式
代码参考
公式难以理解的话,看看代码还挺有用的,感觉代码对我来说更好理解一点

dpo局限性

样本全面性假设
参考该分析文章
评论中的一段话:

1
论文附录第一个证明里面reward用policy表达有个暗含的前提是对y求期望也就是要把y的样本采集全了,然后配分和赋予reward才是有效的*

这个直接影响了数学公式转换中等价条件的成立, 因而尤其重要
但实际情况下,这个假设成立比较困难,又回到了数据收集的困难上来。
当然,数据不太全面,有时候问题也不大,只是会导致训练效果差一点。(这就是黑箱模型训练的玄学吗,全凭实践!)

此外,与PPO算法相比:

1
如果两个方法的训练数据都是足够多的,那么他们能训练到的最优的模型是一样的。但是从 rl 的角度,dpo 是离线方法,ppo 是在线方法,在线方法类似于生产了更多的数据。

RL方法中的并行策略与显存分配

跑DPO和PPO、GRPO这种强化学习方法的时候,容易遇到OOM的问题。在Pretrain和SFT阶段,我脑海中能很轻易地理解DP、PP、TP等一些概念。但涉及到多个模型,我就捉襟见肘了。
究竟是模型分布在不同的卡组上呢,还是一张卡上有混合的模型部分呢?
Deepseek对此的答案是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
在强化学习(如DPO、PPO、GRPO)中,处理多个模型时容易遇到OOM问题,主要原因是这些方法通常需要同时加载多个模型(如策略模型、参考模型、价值模型等),显存需求较大。以下是一些关键点:

### 1. 模型分布方式
- **单卡混合模型**:在一张卡上同时加载多个模型的部分组件,显存需求高,容易OOM。
- **多卡分布模型**:将不同模型分布到不同卡上,减少单卡显存压力,但需要跨卡通信。

### 2. 并行策略
- **数据并行(DP)**:每张卡加载完整模型,处理不同数据批次,适用于单模型场景。
- **模型并行(MP)**:将单个模型拆分到多张卡上,适用于大模型。
- **流水线并行(PP)**:将模型按层拆分到不同卡上,减少单卡显存占用。
- **张量并行(TP)**:将模型参数拆分到多张卡上,适用于大模型。

### 3. 解决OOM的方法
- **混合并行**:结合DP、MP、PP、TP,优化显存使用。
- **梯度累积**:通过累积小批次梯度模拟大批次训练,减少显存需求。
- **卸载技术**:将部分计算或存储移至CPU或磁盘,减少显存占用。
- **分布式训练**:使用多节点分布式训练,进一步扩展资源。

### 4. 具体实施
- **多卡分布模型**:将策略模型、参考模型、价值模型分布到不同卡上,减少单卡显存压力。
- **混合并行**:对单个大模型使用MP、PP、TP,多个模型使用DP。

### 总结
通过合理分布模型和混合并行策略,可以有效缓解OOM问题。具体选择哪种策略需根据模型大小和硬件条件调整。

仍然没有解决我的疑问。 我想,可能是accelerator、deepspeed的并行方法我没有理解过,对我来说是一个黑箱。

GRPO中的reward如何写

openR1的官方参考