verl 的 FP8 rollout
最后更新时间:11/19/2025
本文档介绍了搭配 vllm 推理后端的 FP8 rollout(滚动部署)。
我们通过 monkey patch 了几项 vLLM 函数,以启用 FP8 rollout 进行强化学习。
load_weights:一个自定义的
load_weights函数,用于将即时模型权重从更高精度格式量化到 FP8。process weights after loading:替换
vllm.model_executor.layers.quantization.fp8.Fp8LinearMethod.process_weights_after_loading函数,以处理量化后的模型权重加载。
支持矩阵
FP8 分块量化用于 rollout(滚动)
用于 Deepseek 中,该量化方式对激活采用 1x128,对模型权重采用 128x128
Dense 模型和 MoE 模型
Async rollout(异步滚动)接口
vLLM 0.10.x & vLLM 0.11
FSDP 和 Megatron 训练后端
实验与成果
Qwen3-8B-Base Dense 模型
配置
DAPO recipe(配方)。AIME24 线上验证。
vLLM(FP8 spmd rollout) + FSDP
注意 SPMD rollout 已被弃用,因此我们移除了 FP8 SPMD rollout。
Prompt 批大小 32,n=16。
Rollout 批大小:32*3*16
Train_batch_size & ppo_mini_batch_size 32(训练批大小和 ppo 迷你批大小均为 32)
最大响应长度 20K
Token-level TIS(令牌级别的温度重要性采样),C=2
8*H100
vLLM 0.10.0+CUDA 12.6 vs vLLM 0.11.0+CUDA 12.9
准确性
深绿色:BF16,橙色:FP8 rollout + 令牌级 TIS,轻绿色:FP8 rollout + 无 TIS
结果和观察:
启用 TIS 时,FP8 rollout 与 BF16 对齐
未启用 TIS 时准确性明显下降
高于匹配 kl(KL 散度)但在训练过程中处于可接受范围内
性能
绿色:BF16,橙色:FP8 rollout + CUDA 12.6 + DeepGemm,紫色:FP8 rollout + CUDA 12.9 + DeepGemm
结果和观察:
FP8 rollout 与 CUDA 12.6 + DeepGemm 结合可带来约 12% 的 rollout 加速
升级到 CUDA 12.9 时,加速可达约 18%
Qwen3-30B-A3B-Base MoE 模型
配置
DAPO recipe。AIME24 线上验证。
FP8 async rollout,vLLM+FSDP
Prompt 批大小 32
Rollout 批大小:32*3*16
Train_batch_size & ppo_mini_batch_size 32
最大响应长度 20K
Token-level TIS,C=2
2*8*H100
vLLM 0.10.0+CUDA 12.6
请参考 recipe/dapo/run_dapo_qwen3_moe_30b_vllm_fp8_rollout.sh
准确性
灰色:BF16 + 令牌级 TIS,红色:FP8 rollout + 令牌级 TIS
结果和观察:
对于 MoE,rollout 和训练分布不匹配总体上较高
即使是 BF16 也需要 rollout 校正
FP8 rollout 与 令牌级 TIS 结合时与 BF16 对齐
性能
灰色:BF16 + 令牌级 TIS,红色:FP8 rollout + 令牌级 TIS
结果和观察:
FP8 rollout:rollout 加速超过 35%
预计与 CUDA 12.9 结合可获得更多性能提升
使用方法
FP8 可以在配置文件 verl/trainer/config/ppo_megatron_trainer.yaml 中启用:
rollout:
quantization: "fp8"
或者通过命令行启用:
actor_rollout_ref.rollout.quantization=fp8
请参考 recipe/dapo/run_dapo_qwen3_moe_30b_vllm_fp8_rollout.sh
计划
将另起一个 PR 以支持 SGLang 中的 FP8 rollout
进一步启用 megatron 中的 FP8 训练