# partial rollout
 
## 简介
Partial rollout 核心思想是通过对长序列 response 推理样本做提前中断，并在下次推理过程中对当前样本进行续推，从而避免单一的长尾样本对推理过程造成资源浪费。通过该能力，我们可以降低长序列推理场景下的长尾样本对端到端性能的影响。

## 使用方法
```yaml
rl_config:
  partial_rollout_max_split: N # 设置N>1即可在N轮内完全推理完成最长序列
```
## 技术方案
### 同步推理引擎方案

核心理念：断点续推+跨迭代长尾调度避免推理资源闲置
同步引擎：数据按批处理，同时进入推理引擎、批次内所有数据完成推理后同时返回结果
关键技术点：
1.	长序列推理截断机制：根据最大推理长度和次数设置推理截断点，将截断样本放入TransferDock，当满足≥GBS个prompt已完成全部推理，则进入后续计算任务，否则则从TransferDock中取数据再次推理，达成高资源利用率。
2.	基于优先级的混合A数据重排和采样技术：在下一轮推理时，优先取出被截断样本进行推理，避免影响效果和收敛性。

![img.png](../../sources/images/partial_rollout/sync.png)
 
图1 同步引擎方案示意图

![img_1.png](../../sources/images/partial_rollout/sync_1.png)
 
图2 同步引擎流程图

### 异步推理引擎方案

核心理念：断点续推+跨迭代长尾调度避免推理资源闲置
异步引擎：数据按批次进入推理引擎，可异步按样本粒度返回结果
关键技术点：
1.	实时长序列推理截断机制：实现与推理引擎交互，动态确定长尾序列被截断长度，当满足≥GBS个prompt已完成全部推理，则中断推理过程，将截断样本放入TransferDock，避免长尾序列推理拖慢整体推理时间、造成资源空置。
2.	基于优先级的混合数据重排和采样技术：在下一轮推理时，优先取出被截断样本并混合新样本进行推理。
3.	收敛性和稳定性保证：实现样本在规定的迭代轮数内完成推理。
 ![img_2.png](../../sources/images/partial_rollout/async.png)
图3 异步引擎方案示意图

![img_3.png](../../sources/images/partial_rollout/async_1.png)
 
图4 异步引擎流程图

## 验证情况
![img_4.png](../../sources/images/partial_rollout/sync_partial_compare_result.png)
图5 同步引擎验证结果