# verl 的 FP8 rollout 最后更新时间:11/19/2025 本文档介绍了搭配 vllm 推理后端的 FP8 rollout(滚动部署)。 我们通过 monkey patch 了几项 vLLM 函数,以启用 FP8 rollout 进行强化学习。 1. **load_weights**:一个自定义的 `load_weights` 函数,用于将即时模型权重从更高精度格式量化到 FP8。 2. **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 **准确性** ![Qwen3-8b-base_fp8_acc](https://github.com/Agoniii/verl/blob/xueh/fp8_pr_images/docs/advance/images/Qwen3-8b-base_fp8_acc.png?raw=true) *深绿色:BF16,橙色:FP8 rollout + 令牌级 TIS,轻绿色:FP8 rollout + 无 TIS* 结果和观察: - 启用 TIS 时,FP8 rollout 与 BF16 对齐 - 未启用 TIS 时准确性明显下降 - 高于匹配 kl(KL 散度)但在训练过程中处于可接受范围内 **性能** ![Qwen3-8b-base_fp8_rollout_perf](https://github.com/Agoniii/verl/blob/xueh/fp8_pr_images/docs/advance/images/Qwen3-8b-base_fp8_perf.png?raw=true) *绿色: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` **准确性** ![Qwen3-30b-a3b_fp8_acc](https://github.com/Agoniii/verl/blob/xueh/fp8_pr_images/docs/advance/images/Qwen3-30b-a3b_fp8_acc.png?raw=true) *灰色:BF16 + 令牌级 TIS,红色:FP8 rollout + 令牌级 TIS* 结果和观察: - 对于 MoE,rollout 和训练分布不匹配总体上较高 - 即使是 BF16 也需要 rollout 校正 - FP8 rollout 与 令牌级 TIS 结合时与 BF16 对齐 **性能** ![Qwen3-30b-a3b_fp8_perf](https://github.com/Agoniii/verl/blob/xueh/fp8_pr_images/docs/advance/images/Qwen3-30b-a3b_fp8_perf.png?raw=true) *灰色: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 训练