verl AMD (ROCm 内核) 性能调优
Last updated: 11/13/2025.
Author: Yang Wang, Songlin Jiang
为 AMD MI3xx 系列 GPU 使用 vLLM 休眠模式
默认情况下,verl 需要启用 vLLM 的休眠模式,这样 vLLM 可以在 rollout 完成后将 GPU 内存卸载到 CPU 内存中。(注:此功能已合并到 vLLM 主分支的 0.11.0 版本之后。)
目前,你可以使用 vLLM 主分支并从源码构建,或者当可用时,直接从预构建的 ROCm wheel 安装 vLLM 版本 0.11.0 之后。
克隆 vLLM 仓库并使用以下命令构建:
git clone https://github.com/vllm-project/vllm.git
cd vllm
git reset --hard 4ca5cd5740c0cd7788cdfa8b7ec6a27335607a48 # You can also use a later commit as you wish
python -m pip install -r requirements/rocm.txt
VLLM_TARGET_DEVICE=rocm ROCM_PATH=/opt/rocm/ python3 setup.py develop
此外,我们建议你使用 ROCm 版本 7.0 或更高版本。
升级后,你可以通过运行 这些脚本 来验证休眠模式是否正常工作。
如果休眠模式正常工作,你应该看到内存使用量在休眠后减少。
应用 vLLM 补丁并完成安装后,你可以在 verl 中启用休眠模式以减少内存开销。这样,verl 可以在 rollout 期间卸载未使用的 GPU 内存,从而显著降低长时间上下文训练或多节点强化学习中的内存占用。
启用 CUDA Graph 并绕过 ROCm 相关问题
由于 ROCm 中 CUDA graph capture(CUDA 图捕获)可能存在潜在问题,我们发现无法在 verl 中针对 AMD 平台使用 vLLM V1 模式的多节点 vLLM CUDA graph 功能启用。这会导致 rollout 性能显著下降。
我们的调查显示,ROCm 在尝试捕获大型批次时可能会触发意外崩溃。一个变通方法是将 actor_rollout_ref.rollout.cudagraph_capture_sizes 设置为类似 [1, 2, 4, 8, 16, 32, 64] 的值(根据你的 GPU 内存大小进行调整)。
然后,你可以选择通过在 verl 配置文件中将 actor_rollout_ref.rollout.enforce_eager 设置为 False 来启用 CUDA graph。