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 之后。 1. 克隆 vLLM 仓库并使用以下命令构建: .. code-block:: bash 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 2. 此外,我们建议你使用 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。