Skip to main content
TRL integrates vLLM for faster generation in online reinforcement learning methods. Online methods like GRPO and RLOO require the model to generate completions during training, which quickly becomes a bottleneck. vLLM’s PagedAttention technique stores key-value tensors in non-contiguous memory, greatly improving throughput and reducing the memory footprint for generation.
TRL currently only supports vLLM versions from 0.10.2 to 0.17.1. Ensure you have a compatible version installed.
The following trainers support vLLM generation:
  • GRPOTrainer
  • RLOOTrainer
  • experimental.nash_md.NashMDTrainer
  • experimental.online_dpo.OnlineDPOTrainer
  • experimental.xpo.XPOTrainer

Installation

Modes of operation

TRL supports two modes for integrating vLLM during training.

Colocate mode (default)

In colocate mode, vLLM runs inside the trainer process and shares GPU memory with the training model. No separate server process is required, but memory contention on the training GPUs is possible.

Server mode

In server mode, vLLM runs as a separate process on dedicated GPUs and communicates with the trainer over HTTP. This is ideal when you have GPUs dedicated to inference.
The vLLM server and the trainer must run on separate CUDA devices to prevent NCCL communication conflicts. If you do not set CUDA_VISIBLE_DEVICES, TRL will detect same-device usage and raise an error.
1

Start the vLLM server on dedicated GPUs

In this example, GPUs 0–3 serve the model with tensor parallelism across all 4 GPUs:
2

Write a training script with server mode enabled

3

Launch training on the remaining GPUs

How it works under the hood

When you run trl vllm-serve --model <model_name>:
  1. vLLM spawns workers determined by --tensor-parallel-size × --data-parallel-size. With --tensor-parallel-size 4, it spawns 4 workers.
  2. Incoming prompts are distributed across workers. The model weights are split across GPUs according to --tensor-parallel-size.
  3. GPUs communicate via NVIDIA’s NCCL library to ensure each GPU processes its correct slice of the requests.
During the training loop:
  • The trainer sends prompts to the server; the server generates completions via vllm_client.generate.
  • Completions are used to compute the reward signal and the training loss.
  • After the backward pass, the trainer pushes updated weights to the server via vllm_client.update_named_param.
The vLLM server handles only generation — it does not train the model. Updated weights are pushed from the trainer to the server after each backward pass.

Server configuration reference

All trl vllm-serve arguments:

Transformers backend

vLLM can use the Transformers backend for model implementations, including vision-language models (VLMs):
Set vllm_model_impl="transformers" in your trainer config or pass it as a CLI argument. See the vLLM Transformers Backend blog post for details.