verl/experimental 模块总览¶
模块定位¶
verl/experimental 是 verl 框架的实验性功能模块,包含尚在开发或验证阶段的高级特性。这些功能围绕一个核心目标:提升大语言模型强化学习训练的效率和灵活性。
架构总览¶
verl/experimental/
├── __init__.py # 空初始化文件
├── agent_loop/ # Agent 循环框架(核心基础设施)
│ ├── __init__.py # 导出核心类,触发注册
│ ├── agent_loop.py # 核心:AgentLoopBase, AgentLoopWorker, AgentLoopManager
│ ├── single_turn_agent_loop.py # 单轮对话 Agent 循环
│ ├── tool_agent_loop.py # 多轮工具调用 Agent 循环(状态机)
│ ├── tool_parser.py # 工具调用解析器(Hermes / GPT-OSS 格式)
│ ├── utils.py # 配置路径解析与格式化工具
│ └── prometheus_utils.py # Prometheus 监控配置
│
├── dataset/ # 数据集抽象层
│ ├── __init__.py
│ └── sampler.py # 抽象采样器接口(课程学习支持)
│
├── dynamic_dataset/ # 动态数据集生成
│ ├── __init__.py
│ └── dynamicgen_dataset.py # 训练迭代间动态生成新数据
│
├── fully_async_policy/ # 全异步训练(最复杂)
│ ├── fully_async_main.py # 入口:FullyAsyncTaskRunner
│ ├── fully_async_trainer.py # 异步训练器
│ ├── fully_async_rollouter.py # 异步推理器(流式生成)
│ ├── message_queue.py # 消息队列(训练-推理解耦)
│ ├── param_sync.py # 参数同步器
│ ├── detach_utils.py # 数据组装与指标聚合
│ ├── megatron_utils.py # Megatron 参数快照
│ ├── fsdp2_utils.py # FSDP2 参数快照
│ ├── agent_loop/ # 全异步专用 Agent 循环
│ │ ├── __init__.py
│ │ ├── agent_loop.py # FullyAsyncAgentLoopManager
│ │ ├── partial_tool_agent_loop.py # 可中断/恢复的工具调用循环
│ │ └── partial_single_turn_agent_loop.py # 可中断/恢复的单轮循环
│ ├── sglang_rollout/ # SGLang 推理引擎适配
│ │ ├── __init__.py
│ │ └── sglang_async_server.py
│ ├── vllm_rollout/ # vLLM 推理引擎适配
│ │ ├── __init__.py
│ │ └── vllm_async_server.py
│ └── unittest/ # 单元测试 / 示例
│ └── simple_streaming_demo.py
│
└── one_step_off_policy/ # 一步离策略训练
├── main_ppo.py # 入口:OneStepTaskRunner
├── ray_trainer.py # 流水线化训练器
├── utils.py # 工具函数(need_critic)
├── distributed_utils.py # 分布式通信(IPv6 支持)
└── agent_loop/ # 一步离策略专用 Agent 循环
├── __init__.py
└── agent_loop.py # OneStepOffAgentLoopManager
核心架构图¶
┌─────────────────────────────────────────────────────────────────────┐
│ 实验性功能架构 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ 训练模式(三种) │ │
│ │ │ │
│ │ ┌─────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │
│ │ │ 标准同步训练 │ │ 一步离策略训练 │ │ 全异步训练 │ │ │
│ │ │ (verl核心) │ │ (one_step_off) │ │ (fully_async) │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ 推理→训练 │ │ 推理与训练 │ │ 推理与训练 │ │ │
│ │ │ 严格串行 │ │ 流水线重叠 │ │ 完全解耦 │ │ │
│ │ │ │ │ (asyncio) │ │ (MessageQueue) │ │ │
│ │ └─────────────┘ └──────────────────┘ └─────────────────┘ │ │
│ │ ↑ ↑ ↑ │ │
│ │ │ │ │ │ │
│ │ └───────────────────┴─────────────────────┘ │ │
│ │ │ │ │
│ │ ┌───────┴───────┐ │ │
│ │ │ Agent Loop │ ← 所有模式共用的推理框架 │ │
│ │ │ (agent_loop/)│ │ │
│ │ └───────┬───────┘ │ │
│ │ │ │ │
│ │ ┌─────────────┼─────────────┐ │ │
│ │ ↓ ↓ ↓ │ │
│ │ ┌──────────────┐ ┌──────────┐ ┌─────────────┐ │ │
│ │ │SingleTurnLoop│ │ToolLoop │ │PartialLoop │ │ │
│ │ │(单轮生成) │ │(工具调用) │ │(可中断恢复) │ │ │
│ │ └──────────────┘ └──────────┘ └─────────────┘ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ 数据层 │ │
│ │ ┌──────────────────────┐ ┌────────────────────────────┐ │ │
│ │ │ dataset/sampler.py │ │ dynamic_dataset/ │ │ │
│ │ │ 抽象采样器 │ │ 动态数据生成 │ │ │
│ │ │ (课程学习接口) │ │ (训练间新数据生成) │ │ │
│ │ └──────────────────────┘ └────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────────────┐ │
│ │ 基础设施层 │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌────────────────────┐ │ │
│ │ │ param_sync │ │ message_queue│ │ distributed_utils │ │ │
│ │ │ 参数同步 │ │ 消息队列 │ │ NCCL/IPv6 通信 │ │ │
│ │ └──────────────┘ └──────────────┘ └────────────────────┘ │ │
│ │ ┌──────────────┐ ┌──────────────┐ ┌────────────────────┐ │ │
│ │ │ fsdp2_utils │ │megatron_utils│ │ prometheus_utils │ │ │
│ │ │ FSDP2 快照 │ │Megatron 快照 │ │ 监控配置 │ │ │
│ │ └──────────────┘ └──────────────┘ └────────────────────┘ │ │
│ └───────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────┘
三种训练模式对比¶
| 特性 | 标准同步 | 一步离策略 | 全异步 |
|---|---|---|---|
| 推理-训练关系 | 串行 | 流水线重叠 | 完全并行 |
| 策略一致性 | 完全一致 | 差一步 | 可能差多步 |
| GPU 利用率 | 较低 | 中等 | 最高 |
| 实现复杂度 | 简单 | 中等 | 复杂 |
| 需要消息队列 | 否 | 否 | 是 |
| 需要参数版本管理 | 否 | 否 | 是 |
| 支持中断/恢复 | 否 | 否 | 是 |
| 入口文件 | verl 核心 | main_ppo.py |
fully_async_main.py |
推荐阅读顺序¶
第一阶段:理解基础框架¶
01_init.md- 模块入口,了解整体结构agent_loop/03_agent_loop.md- 最重要的文件,理解 Agent 循环核心架构agent_loop/01_init.md- Agent 循环的注册机制agent_loop/04_single_turn_agent_loop.md- 最简单的 Agent 循环实现
第二阶段:理解工具调用¶
agent_loop/06_tool_parser.md- 工具调用解析agent_loop/05_tool_agent_loop.md- 多轮工具调用的状态机
第三阶段:理解数据层¶
dataset/02_sampler.md- 数据采样抽象dynamic_dataset/02_dynamicgen_dataset.md- 动态数据生成
第四阶段:理解一步离策略训练(较简单的异步方案)¶
one_step_off_policy/01_main_ppo.md- 入口与配置one_step_off_policy/02_ray_trainer.md- 流水线化训练one_step_off_policy/03_utils.md- 工具函数one_step_off_policy/04_distributed_utils.md- 分布式通信one_step_off_policy/agent_loop/02_agent_loop.md- 异步 Agent 循环
第五阶段:理解全异步训练(最复杂)¶
fully_async_policy/01_fully_async_main.md- 全异步入口与架构fully_async_policy/05_message_queue.md- 消息队列fully_async_policy/06_param_sync.md- 参数同步fully_async_policy/02_fully_async_trainer.md- 异步训练器fully_async_policy/03_fully_async_rollouter.md- 异步推理器fully_async_policy/04_detach_utils.md- 数据处理工具fully_async_policy/agent_loop/02_agent_loop.md- 全异步 Agent 循环fully_async_policy/agent_loop/03_partial_tool_agent_loop.md- 可中断恢复的工具调用
第六阶段:推理引擎适配¶
fully_async_policy/vllm_rollout/01_vllm_async_server.md- vLLM 适配fully_async_policy/sglang_rollout/01_sglang_async_server.md- SGLang 适配
关键设计模式¶
1. 注册模式(Registry Pattern)¶
Agent 循环通过 @register("name") 装饰器注册,支持通过 Hydra 配置动态选择:
@register("single_turn")
class SingleTurnAgentLoop(AgentLoopBase):
...
@register("tool")
class ToolAgentLoop(AgentLoopBase):
...
2. 状态机模式(State Machine)¶
ToolAgentLoop 使用显式状态机管理多轮对话:
3. 分层管理模式¶
AgentLoopManager # 管理多个 Worker
└── AgentLoopWorker # 管理推理服务器 + Agent 循环
├── AsyncLLMServerManager # 管理 vLLM/SGLang 服务器
└── AgentLoopBase # 执行具体的生成逻辑
4. 生产者-消费者模式¶
全异步训练中,Rollouter 生产样本放入 MessageQueue,Trainer 消费样本进行训练:
前置知识¶
阅读本模块前,建议了解以下概念:
- PPO(近端策略优化):RLHF 中最常用的强化学习算法
- Ray:分布式计算框架,用于管理多节点的 Worker
- asyncio:Python 异步编程框架
- vLLM / SGLang:高性能 LLM 推理引擎
- FSDP / Megatron:分布式训练框架
- NCCL:NVIDIA 的 GPU 间通信库
文件统计¶
| 子目录 | 文件数 | 说明 |
|---|---|---|
agent_loop/ |
7 | Agent 循环核心框架 |
dataset/ |
2 | 数据采样抽象 |
dynamic_dataset/ |
2 | 动态数据生成 |
fully_async_policy/ |
16 | 全异步训练(含子目录) |
one_step_off_policy/ |
6 | 一步离策略训练(含子目录) |
| 总计 | 34 | (含 __init__.py) |