mrkeyoor.com_
Fri 04 Sept 06:41 UTC
LLM Toolsevaluationupdated 04 Sept 2026

verl review

verl is a Python framework for reinforcing and fine-tuning large language models after their initial training. It coordinates training backends, rollout engines, rewards, model placement, and distributed workers so research teams can run PPO, GRPO, and related methods on their own GPU infrastructure.

Verdict

Our verl install consumed 6,096 MB and its tests ended with exit 137 at 9% after 74 seconds, so adoption should be treated as an infrastructure project even though the build passed. Choose it when your team needs distributed RL across several training and rollout backends and can own the GPU, Ray, and version matrix. Start with a pinned recipe and a narrow workload, not the whole test surface or an unreviewed upgrade.

We ran it

Lab card: what happened when we ran verlScreenshot of verl (verl-project.github.io)
Install✓ · 94s171 packages · 6096 MB
Build✓ · 6s
Tests✗ · 74sran, no count parsed
Known vulns1(pip-audit)
Repo1650 files~259,213 lines of source · 17.7 MB · 46 CI workflows · tests dir

Answers from our run

Does verl build from source?

Dependencies installed in 94 seconds (171 packages), and the build succeeded in 6 seconds. We cloned commit 84e014b into a clean Debian container with 3 CPUs and no project-specific setup.

Do verl's tests pass?

The test command failed in our container, and its output did not report a pass or fail count.

Does verl have known vulnerabilities in its dependencies?

pip-audit flagged 1 known advisory in the dependency tree at the time of our run.

Who should not use verl?

Developers without suitable GPU hardware: the documented GSM8K quickstart requires a GPU with at least 24 GB HBM.

What are the alternatives to verl?

TRL, OpenRLHF, Open Instruct. Our verl install consumed 6,096 MB and its tests ended with exit 137 at 9% after 74 seconds, so adoption should be treated as an infrastructure project even though the build passed.

Setup2/594-second install used 6,096 MB before models or GPU work
Docs5/5Specific backend, platform, quickstart, and migration guidance
Community5/523,288 stars with same-day code, issue, and pull request activity
Maturity4/5v0.9.0 ships broad backends, but our general suite did not finish

Who it’s for

LLM research teams already running multi-GPU training and generation systems.
Engineers who need to pair FSDP, FSDP2, or Megatron with vLLM or SGLang.
Groups implementing reward functions, tool-using agents, or multimodal post-training.
Platform owners prepared to pin backend versions, inspect release changes, and debug Ray jobs.

Who it’s NOT for

Developers without suitable GPU hardware: the documented GSM8K quickstart requires a GPU with at least 24 GB HBM.
macOS or Windows users expecting the main uv workflow: the installation guide limits it to Linux on x86_64 or aarch64.
Teams whose acceptance gate requires a clean general test run: our suite stopped with exit 137 at 9% after showing failures and errors.
Operators who upgrade minor versions without migration work: v0.9.0 makes the V1 trainer default, deprecates vanilla mBridge, and drops vLLM versions below 0.18.0.

Setup reality

Our sandbox installed commit 84e014b in 94 seconds, adding 171 packages and occupying 6,096 MB. The build succeeded in 6 seconds. Tests ended with exit 137 after 74 seconds. The last progress lines reached 9% and showed failures, errors, and skips, but no final counts. Pip-audit reported 1 known vulnerability.

The documented quickstart needs Python 3.10 or newer, CUDA 12.8 or newer, and a GPU with at least 24 GB HBM. You must choose a training backend and rollout engine, download a model and dataset, set reward and trainer configuration, and provision Ray workers. WandB is optional.

The uv workflow targets Linux with Python 3.12 on x86_64 or aarch64. AMD and Ascend use separate images. Backend extras are mutually exclusive, and changing combinations can reinstall Torch. v0.9.0 requires vLLM 0.18.0 or newer. The repository has backend-specific Dockerfiles even though our root signal scan found no Dockerfile.

The 259,213-line codebase coordinates training and rollout

Our checkout contained 1,650 files and about 259,213 lines of source in 17.7 MB. verl sits between an RL algorithm and the systems that train and sample from a language model. Its hybrid-controller design separates control flow from distributed computation, letting one job connect FSDP, FSDP2, or Megatron training with vLLM, SGLang, or Hugging Face rollouts. The result is a framework for running post-training dataflows rather than a packaged model or hosted service.

The v0.9.0 README lists PPO, GRPO, ReMax, REINFORCE++, RLOO, DAPO, multimodal RL, tool calling, and supervised fine-tuning. Reward logic can be model-based or a function, which covers verifiable math and coding tasks as well as learned scoring. Model placement can spread actors, critics, reference models, and rollout engines across different GPU sets. This flexibility is the appeal, but each additional backend adds its own versions, memory behavior, and failure modes.

The quickstart requires at least 24 GB of GPU memory

The GSM8K quickstart requires a GPU with at least 24 GB HBM. It downloads the dataset, starts with Qwen2.5-0.5B-Instruct, defines a rule-based reward, and launches one-node PPO through Ray. The example exposes batch sizes, prompt and response lengths, learning rates, checkpoint frequency, and GPU memory utilization. That is useful because the first working job is still a real training configuration, not a hello-world import.

The main install path requires Python 3.10 or newer and CUDA 12.8 or newer. Its uv workflow is narrower: Linux, Python 3.12, and either x86_64 or aarch64. Training and inference arrive as selected extras, with one rollout engine paired to FSDP or Megatron. AMD ROCm and Ascend follow separate images. Our installed environment reached 6,096 MB before model weights, a dataset, checkpoints, or experiment logs occupied any space.

What happened when we ran it

Our sandbox installed commit 84e014b in 94 seconds, adding 171 Python packages and using 6,096 MB on disk. The build completed successfully in 6 seconds. Those results came from an unprivileged Debian container with 3 CPUs, 8 GB of RAM, and no secrets. The successful build shows that the package could be assembled in that environment; it does not show that a documented GPU training job can run there.

The test command ended with exit 137 after 74 seconds. Its last lines reached 9% progress and displayed groups of passing dots alongside F, E, and s markers for failures, errors, and skips. No final summary or counts appeared, so we cannot say how many tests passed or name a single cause. The defensible result is that the full invoked suite did not complete and had already recorded failing and erroring cases before termination.

Pip-audit reported 1 known vulnerability in the installed environment. The repository scan found 46 CI workflow files and a tests directory, strong evidence that maintainers exercise many configurations elsewhere. It found no root Dockerfile, while the current install guide points to several backend-specific files under docker/. None of those signals overrides our run: commit 84e014b built, but its broad test command did not produce a passing result in the stated sandbox.

v0.9.0 changes the trainer and backend floor

Release v0.9.0 was published on August 14, 2026. It makes the V1 PPO trainer the default for synchronous and asynchronous modes, deprecates vanilla mBridge in favor of Megatron-Bridge, and removes support for vLLM older than 0.18.0. It also adds hardware plugins and changes checkpoint and trainer interfaces. Those are material upgrade conditions. A team moving from v0.8.0 should read the breaking-change section before reusing launch commands or configuration strings.

The project tries to control recipe drift with explicit version files. Optional recipes moved to a separate repository in January 2026, and each recipe directory is meant to record a verl tag, fixed commit, or rolling commit reference. That is a sensible response to a fast-moving stack. Use those pins. A copied GRPO or DAPO command can cross library, recipe, model, CUDA, and rollout-engine boundaries that changed between the June v0.8.0 and August v0.9.0 releases.

The 1,216-item open queue reflects scale and noise

GitHub showed 23,288 stars and 1,216 combined open issues and pull requests: 585 issues and 631 pull requests in separate searches. The repository was pushed on September 4, 2026, and several issues and pull requests were updated that same day. This is active maintenance at high volume, not an abandoned queue. It still means adopters should search by exact backend, model, trainer generation, and commit instead of treating the open count as one undifferentiated quality score.

Open issue 7656 reports the standard quickstart hanging on a node with 8 or fewer CPU cores when its placement group requests more workers than the node can schedule. The reporter traced the wait and confirmed a one-storage-unit workaround on that setup. This does not establish a universal quickstart failure. It does show the sort of distributed-resource diagnosis verl can demand even when the visible symptom is simply that logs stop after configuration.

Forty-six CI workflows do not make adoption automatic

The 46 CI workflows, current v0.9.0 release, and same-day development make verl a serious option for teams already operating distributed LLM training. Its backend coverage saves them from writing every training-to-rollout handoff themselves. The 6,096 MB environment, 24 GB quickstart floor, breaking changes, and unfinished sandbox suite set the other side of the decision. This is a platform to evaluate with a pinned model and recipe, measured GPU capacity, and a team that can debug Ray placement and backend compatibility.

Alternatives

ProjectWhat it isPick it when
TRLHugging Face's library for training transformer models with reinforcement learning.pick this instead when a smaller trainer-centered API fits better than verl's distributed engine matrix.
OpenRLHFA Ray-based framework for PPO, DAPO, REINFORCE++, VLM, and agent training.pick this instead when its Ray and vLLM workflow matches your stack and you want a direct framework comparison.
Open InstructAI2's codebase for language-model post-training experiments and recipes.pick this instead when published training recipes and data processing matter more than mixing several execution engines.

What people are saying

  1. [velocity-scout] verl-project/verl

Sources

  1. verl repository and README
  2. verl installation guide
  3. verl GSM8K PPO quickstart
  4. verl v0.9.0 release
  5. TransferQueue CPU placement issue 7656
  6. Measured commit 84e014b

More llm tools reviews

skills-hub · aidlc-workflows · notebooklm-py · a2ui · web-llm · hello-agents · the whole board →