third_party 模块总览¶
源码路径:
verl/third_party/
模块定位¶
third_party 模块包含 verl 从外部库(PyTorch、vLLM)复制并修改的代码。之所以需要将第三方代码复制到项目中,主要原因是:
- 修复已知 bug:PyTorch 2.6.0 的
set_model_state_dictAPI 存在 OOM(内存溢出)问题,verl 使用了 PyTorch 2.7.0 版本的代码来修复 - 版本兼容性: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 会发生变化,这个兼容层统一处理了不同版本的导入。
文件阅读顺序¶
建议按以下顺序阅读:
- init.py (根) - 包初始化
- vllm/init.py - vLLM 版本兼容层(逻辑简单,适合先读)
- torch/ 系列 init.py - PyTorch 补丁包标识
- _state_dict_utils.py - 底层 state_dict 工具函数
- 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 的导入和版本检测