如何用 vLLM server 模式加速 TRL GRPO 训练:服务器与训练器 GPU 分配配置
发布时间:2026/9/14 22:10:29 锦皓数字建站

如何用 vLLM server 模式加速 TRL GRPO 训练服务器与训练器 GPU 分配配置【免费下载链接】trlTrain transformer language models with reinforcement learning.项目地址: https://gitcode.com/GitHub_Trending/tr/trlGRPO 这类在线方法在训练过程中要不断生成补全completions用模型自身的generate完成这一步往往是训练时间的瓶颈。TRL 支持用 vLLM 接管生成来加速训练其中server 模式让 vLLM 作为独立进程运行在专用 GPU 上通过 HTTP 与训练器通信——适合你有空闲 GPU 专门用于推理的场景。这篇文章给出在单节点 8 卡机器上把 4 张卡分给 vLLM 服务器、4 张卡分给训练器的完整配置路径。前提版本要求与安装TRL 目前只支持vLLM0.19.1到0.28.0的版本区间安装前确认版本落在该范围内否则会出现兼容性问题。GRPOTrainer在支持 vLLM 生成的训练器列表中其他还有RLOOTrainer、NashMDTrainer、OnlineDPOTrainer、XPOTrainer。安装命令带 vLLM 依赖pip install trl[vllm]文档中另有一个已弃用的入口trl vllm-serve现在只会构建这条命令并运行 vLLM 服务器并打印它实际执行的vllm serve命令可以直接复制后弃用这个包装器因此下文不再使用它。第一步按 CUDA_VISIBLE_DEVICES 划分服务器与训练器的 GPU这是 server 模式最关键的一条约束vLLM 服务器和训练器必须运行在不同的 CUDA 设备上否则会互相冲突docs/source/grpo_trainer.md中的警告更具体——如果服务器和训练器用了同一批 GPU可能会遇到 NCCL 错误。文档给出的参考资源是单节点 8 张 GPUGPU 0–3 给 vLLM 生成GPU 4–7 给训练。划分完全靠CUDA_VISIBLE_DEVICES环境变量指定。第二步启动 vLLM 服务器在 GPU 0–3 上启动服务器文档示例模型为Qwen/Qwen2.5-7B请替换为你要训练的模型名CUDA_VISIBLE_DEVICES0,1,2,3 VLLM_SERVER_DEV_MODE1 vllm serve Qwen/Qwen2.5-7B --tensor-parallel-size 4 \ --weight-transfer-config {backend: nccl} \ --logprobs-mode processed_logprobs \ --max-logprobs -1其中--tensor-parallel-size 4表示把一份模型张量并行切到这 4 张 GPU 上如果你分配给服务器的 GPU 数量不同这个值要与分配数一致。后三个参数是 TRL 对服务器端的硬性要求缺一个都不行来源vLLM Integration设置作用VLLM_SERVER_DEV_MODE1暴露权重传输与 prefix-cache 端点用于把训练中的权重推进服务器。它同时会暴露 vLLM 的其他开发端点因此服务器应保持在可信网络内--weight-transfer-config {backend: nccl}启用 NCCL 权重传输引擎。若训练器和服务器共享 GPU改用ipc--logprobs-mode processed_logprobs返回经过温度缩放和 logit 处理后的 logprobs这是重要性采样修正所期望的形式--max-logprobs -1解除 OpenAI 兼容接口每个 token 20 个 logprobs 的上限蒸馏时请求 top-k 教师分布需要它其余的vllm serve参数--data-parallel-size、--max-model-len、--enable-prefix-caching、--enforce-eager、--kv-cache-dtype、--trust-remote-code等都可以按需追加vllm serve --help有完整列表。关于扩展文档建议用--tensor-parallel-size扩展生成规模数据并行对稠密模型不再有帮助——自 vLLM0.14.0起非 MoE 模型的离线数据并行扩展已不被支持。第三步在训练脚本中启用 server 模式文档给出的最小train.py示例docs/source/vllm_integration.mdfrom datasets import load_dataset from trl import GRPOTrainer, GRPOConfig from trl.rewards import accuracy_reward dataset load_dataset(trl-lib/DeepMath-103K, splittrain) trainer GRPOTrainer( modelQwen/Qwen2.5-7B, argsGRPOConfig(use_vllmTrue, vllm_modeserver), reward_funcsaccuracy_reward, train_datasetdataset, ) trainer.train()两个关键参数use_vllmTrue启用 vLLM 生成。vllm_mode缺省为colocatevLLM 跑在训练器进程内、与训练模型共享显存所以要显式设置vllm_modeserver才走服务器模式。model的名字要与服务器端vllm serve启动的模型保持一致。训练默认连接http://localhost:8000即vllm_server_host默认0.0.0.0、vllm_server_port默认8000见 trl/trainer/grpo_config.py如果服务器监听地址或端口不同通过vllm_server_base_url、vllm_server_host、vllm_server_port覆盖其中提供vllm_server_base_url时后两者被忽略。默认等待服务器就绪的总超时是vllm_server_timeout默认 240 秒超时后抛出ConnectionError。另外GRPO 默认使用MASTER_ADDRlocalhost与MASTER_PORT12345作为 vLLM 的通信地址可以通过设置同名环境变量覆盖。第四步在与服务器错开的 GPU 上启动训练CUDA_VISIBLE_DEVICES4,5,6,7 accelerate launch train.py服务器启动后即可用这个命令拉起训练。训练开始后训练器通过 OpenAI 兼容的/v1/completions端点发送 prompt token IDs向服务器要补全每完成一次 optimizer step训练器还会通过 NCCL 把更新后的权重流式推进服务器并用/start_weight_update、/update_weights、/finish_weight_update三个端点完成提交。权重更新通信使用vllm_group_port默认 51216文档说明除非端口被占用无需修改。验证怎么判断配置成功、哪里出了问题服务器没起好训练端在vllm_server_timeout默认 240 秒内等不到服务器时会抛ConnectionError。先回到服务器终端确认vllm serve是否真正完成加载而不是只看训练端的报错。GPU 划分冲突docs/source/grpo_trainer.md明确警告服务器与训练器使用同一批 GPU 时可能触发NCCL 错误。出现 NCCL 类报错时优先核对两边的CUDA_VISIBLE_DEVICES是否真的不重叠。运行中观察训练-推理失配当use_vllmTrue且vllm_importance_sampling_correctionTrue缺省即开启 Truncated Importance Sampling时TRL 会记录sampling/sampling_logp_difference/mean、sampling/sampling_logp_difference/max、sampling/importance_sampling_ratio/{min,mean,max}等指标。sampling_logp_difference的增长表示采样器vLLM与训练模型重算的 logprob 之间的失配在扩大——这是文档给出的解读训练期间持续观察这些曲线即可判断 vLLM 生成为训练带来的偏移是否在可控范围内。默认情况下 TRL 已对 vLLM 生成启用 Truncated Importance Sampling 来修正生成-训练失配如需关闭可设vllm_importance_sampling_correctionFalse。可选显存不够时的两个旋钮这两项来自 GRPO Trainer只在遇到显存问题时使用调 GPU 显存利用率根据模型大小和训练的整体显存需求可能需要调整 vLLM 的显存利用率以避免低利用率或 OOM。注意GRPOConfig里的vllm_gpu_memory_utilization参数只适用于colocate模式server 模式下对应的设置要单独传给 vLLM 服务器端。文档还提供了一个官方的推荐值估算工具HF Spacetrl-lib/recommend-vllm-memory按模型配置和实验设置给出建议值并建议若推荐值在你的环境不工作可在推荐值上加一个小缓冲如 0.05 或 0.1。仍报 OOM 时开启 sleep mode把vllm_enable_sleep_mode设为Trueoptimizer step 期间 vLLM 的权重与 cache 会被卸载offload换取更低的显存占用代价是唤醒引擎时会有 host-device 传输延迟可能略微拖慢训练。详见 Reducing Memory Usage。跨机器时的连接配置上面的主路径假设服务器与训练器在同一台机器默认连localhost:8000。docs/source/grpo_trainer.md还给出了多节点 70B 训练的例子4 个节点跑 GRPODeepSpeed ZeRO-3 Accelerate第 5 个节点整节点跑 vLLM 服务器--tensor-parallel-size 8训练脚本通过--vllm_server_host参数接收服务器节点地址并在GRPOConfig中设置vllm_server_hostargs.vllm_server_host完成跨机连接同机部署则不需要这个参数。该文档中的 SLURM 脚本会同时拉起训练和服务器两条任务若参考它请整体理解其分配逻辑不要只截取其中一条命令。参考文档vLLM Integrationserver/colocate 两种模式、服务器必选参数、传输端点说明Speeding Up TrainingCUDA_VISIBLE_DEVICES划分的 GRPO 示例GRPO Trainerserver 模式启动步骤、NCCL 冲突警告、多节点示例与指标Reducing Memory UsagevLLM sleep mode 细节trl/trainer/grpo_config.pyvllm_server_*参数的默认值与适用条件【免费下载链接】trlTrain transformer language models with reinforcement learning.项目地址: https://gitcode.com/GitHub_Trending/tr/trl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。