跳转至

third_party 模块总览

源码路径:verl/third_party/

模块定位

third_party 模块包含 verl 从外部库(PyTorch、vLLM)复制并修改的代码。之所以需要将第三方代码复制到项目中,主要原因是:

  1. 修复已知 bug:PyTorch 2.6.0 的 set_model_state_dict API 存在 OOM(内存溢出)问题,verl 使用了 PyTorch 2.7.0 版本的代码来修复
  2. 版本兼容性:vLLM 的 API 在不同版本间有差异,verl 通过统一的 __init__.py 封装来处理兼容性

模块架构

third_party/
├── __init__.py                                    # 包初始化(仅 license)
├── torch/
│   ├── __init__.py                                # PyTorch 补丁包标识
│   └── distributed/
│       ├── __init__.py                            # 分布式补丁包标识
│       ├── _state_dict_utils.py                   # state_dict 工具函数集
│       └── checkpoint/
│           ├── __init__.py                        # checkpoint 补丁包标识
│           └── state_dict.py                      # checkpoint state_dict 管理
└── vllm/
    └── __init__.py                                # vLLM 版本兼容层

核心内容

PyTorch 分布式补丁 (torch/distributed/)

这部分代码从 PyTorch 2.7.0 复制而来,解决了 PyTorch 2.6.0 中 set_model_state_dict API 的内存溢出问题。主要包含两个核心文件:

  • _state_dict_utils.py:底层工具函数,处理 ShardedTensor / DTensor 的收集、广播、复制等操作
  • checkpoint/state_dict.py:高层 API,提供 get_model_state_dict、set_model_state_dict 等接口

这些函数在 FSDP 训练中被广泛使用,用于在分布式环境中正确地获取和设置模型的 state_dict。

vLLM 兼容层 (vllm/)

vLLM 是一个高效的大模型推理引擎。verl 在强化学习的 rollout(生成)阶段使用 vLLM 进行高速推理。由于 vLLM 版本迭代较快,API 会发生变化,这个兼容层统一处理了不同版本的导入。

文件阅读顺序

建议按以下顺序阅读:

  1. init.py (根) - 包初始化
  2. vllm/init.py - vLLM 版本兼容层(逻辑简单,适合先读)
  3. torch/ 系列 init.py - PyTorch 补丁包标识
  4. _state_dict_utils.py - 底层 state_dict 工具函数
  5. checkpoint/state_dict.py - 高层 checkpoint state_dict 管理

与其他模块的关系

  • verl/trainer/ - FSDP 训练器使用这里的 state_dict 工具管理模型状态
  • verl/workers/ - rollout worker 使用 vLLM 进行推理
  • verl/model_merger/ - 模型合并器可能间接使用 state_dict 工具
  • PyTorch - 这里的代码是 PyTorch 官方代码的复制/修改版本
  • vLLM - 这里封装了 vLLM 的导入和版本检测