8000 Release v0.12.0: single-GPU verl v0.9 RL by DaoyuanLi2816 · Pull Request #111 · DaoyuanLi2816/mini-verl · GitHub
[go: up one dir, main page]

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ updates:
directory: "/"
schedule:
interval: monthly
open-pull-requests-limit: 5
# Dependency updates are reviewed and committed on first-party maintainer
# branches so automated authors never enter the contributor graph.
open-pull-requests-limit: 0
groups:
dev-tooling:
patterns: ["ruff", "mypy", "pytest*", "hypothesis", "build", "twine", "types-*"]
Expand All @@ -22,4 +24,4 @@ updates:
directory: "/"
schedule:
interval: monthly
open-pull-requests-limit: 3
open-pull-requests-limit: 0
1 change: 1 addition & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ jobs:
"environments/known-good-rtx4080-wsl2-cu130.json",
"environments/known-good-rtx4080-wsl2-cu130.txt",
"scripts/run_v011_profile_qualification.py",
"scripts/run_v012_rl_qualification.py",
"LICENSE",
"README.md",
):
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ jobs:
python scripts/publish_alignment_lab_artifacts.py --check
python scripts/publish_verl_bridge_diagrams.py --check
python scripts/publish_verl_opd_compatibility.py --check
python scripts/publish_verl_rl_v09_compatibility.py --check
python scripts/publish_hardware_record_schema.py --check
python scripts/publish_gpu_qualification_schema.py --check
python scripts/check_known_good_environment.py
Expand Down
12 changes: 10 additions & 2 deletions .github/workflows/gpu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
workflow_dispatch:
inputs:
qualification_level:
description: "Release smoke, or the complete v0.11 WSL2 qualification"
description: "Release smoke, or the complete v0.12 WSL2 qualification"
type: choice
required: true
default: smoke
Expand Down Expand Up @@ -186,6 +186,13 @@ jobs:
--output "$full_dir/v011-profiles.json" \
--work "$full_work/v011-profiles" \
"${offline[@]}"
"$QUALIFICATION_PYTHON" scripts/run_v012_rl_qualification.py \
--commit "$GITHUB_SHA" \
--wheel "$QUALIFICATION_WHEEL" \
--wheel-sha256 "$QUALIFICATION_WHEEL_SHA256" \
--output "$full_dir/v012-rl.json" \
--work "$full_work/v012-rl" \
"${offline[@]}"
test -z "$(git status --porcelain)"
"$QUALIFICATION_PYTHON" scripts/benchmark_rollout_runtime_v2_selected.py \
--backend hf_cached \
Expand All @@ -207,7 +214,8 @@ jobs:
--v011-profiles "$full_dir/v011-profiles.json" \
--hf-cached-runtime "$full_dir/hf-cached-runtime.json" \
--vllm-runtime "$full_dir/vllm-runtime.json" \
--hf-reference benchmarks/results/rollout-runtime-v2-hf-reference.json
--hf-reference benchmarks/results/rollout-runtime-v2-hf-reference.json \
--v012-rl "$full_dir/v012-rl.json"
- name: Upload full qualification records
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: ${{ success() && inputs.qualification_level == 'full' }}
Expand Down
10 changes: 9 additions & 1 deletion .github/workflows/verl-bridge.yml
Original file line number Diff line number Diff line change
10BC8 Expand Up @@ -47,7 +47,7 @@ jobs:
changed=$(git diff --name-only "origin/$BASE_REF"...HEAD)
echo "changed files:"
echo "$changed"
if echo "$changed" | grep -Eq '^(\.github/workflows/verl-bridge\.yml|pyproject\.toml|scripts/[^/]*verl_bridge[^/]*|src/miniverl/bridge/.*|src/miniverl/losses/verl_(topk|pg)\.py|tests/.*verl_(bridge|opd|pg).*|tests/conformance/test_verl_v08_(loss|pg_k1)\.py)$'; then
if echo "$changed" | grep -Eq '^(\.github/workflows/verl-bridge\.yml|pyproject\.toml|scripts/[^/]*verl_bridge[^/]*|src/miniverl/(algorithms|bridge)/.*|src/miniverl/losses/verl_(topk|pg)\.py|tests/.*verl_(bridge|opd|pg).*|tests/conformance/test_verl_v0(8_(loss|pg_k1)|9_rl)\.py)$'; then
echo "bridge=true" >> "$GITHUB_OUTPUT"
else
echo "bridge=false" >> "$GITHUB_OUTPUT"
Expand Down Expand Up @@ -77,6 +77,14 @@ jobs:
run: python -m pytest -q tests/conformance/test_verl_v08_loss.py -m verl_conformance
- name: Compare sampled k1 policy-loss values, gradients and optimizer step
run: python -m pytest -q tests/conformance/test_verl_v08_pg_k1.py -m verl_conformance
- name: Checkout the pinned verl v0.9.0 algorithm source
run: >-
git clone --depth 1 --branch v0.9.0
https://github.com/volcengine/verl.git _verl-v0.9.0
- name: Compare GRPO, Dr.GRPO, RLOO, REINFORCE++, GAE, policy and value math
env:
MINIVERL_VERL_V09_SOURCE: _verl-v0.9.0
run: python -m pytest -q tests/conformance/test_verl_v09_rl.py -m verl_conformance
- name: Materialize and recheck a tiny launchable pure-OPD bundle
run: >-
python -m pytest -q tests/conformance/test_verl_v08_materialize.py
Expand Down
37 changes: 36 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,40 @@ All notable changes to miniVERL are recorded here. The format follows

## [Unreleased]

## [0.12.0] - 2026-09-07

### Single-GPU verl RL

- Added the versioned `verl-rl-v0.9-single-gpu-v1` compiler for a resolved
official verl v0.9 subset. It classifies every source field, lowers resource
placement to one process/device, validates runnable recipes, and publishes
the recipe/report pair transactionally.
- Added critic-free GRPO, Dr.GRPO, RLOO and REINFORCE++ execution with complete
prompt groups, behavior-policy log-probabilities, vanilla dual-clipped policy
loss, outcome rewards and optional fixed reference-policy reward KL.
- Added upstream-pinned conformance for estimator, reference-KL, policy-loss,
GAE and clipped-value mathematics against verl v0.9.0 at commit
`483b8a009ba3a97563edee3a19887e4862b8094a`.
- Unified prompt and agent/tool trajectories through schema-v3 group/sample
identity, generated-token-only masks and recorded environment verifier
outcomes. Added exact interrupted/resume coverage for the RL path.
- Added typed batch reward providers and weighted composition for trusted local
Python use, plus an explicit deterministic target-length provider, while
keeping YAML free of arbitrary imports.
- Extended the exact-wheel RTX 4080 release chain with a compiled v0.9 GRPO
workload that requires within-group reward variance, nonzero advantages, two
parameter-changing updates and a bounded-memory evidence record.

### Correctness and product surface

- Fixed full-vocabulary bucketed teacher entropy so `K == V` preserves valid
zero-probability terms instead of creating non-finite values (fixes #89).
- Made the RL compatibility compiler usable from the Torch-free core install
and generated a byte-checked v0.9 field report from the shipped example.
- Rebuilt the README and documentation landing path around verl experiment
semantics compiled into a single-GPU plan, with RL and OPD capabilities shown
together and detailed boundaries consolidated in compatibility/limitations.

## [0.11.0] - 2026-08-29

### Rollout Runtime v2 baseline
Expand Down Expand Up @@ -1143,7 +1177,8 @@ Same-tokenizer only; one trajectory per forward pass; `swap` unavailable for
quantized models; only Qwen3 and Qwen2 architectures tested; single-seed GPU
results. The full list is in `docs/limitations.md`.

[Unreleased]: https://github.com/DaoyuanLi2816/mini-verl/compare/v0.11.0...HEAD
[Unreleased]: https://github.com/DaoyuanLi2816/mini-verl/compare/v0.12.0...HEAD
[0.12.0]: https://github.com/DaoyuanLi2816/mini-verl/compare/v0.11.0...v0.12.0
[0.11.0]: https://github.com/DaoyuanLi2816/mini-verl/compare/v0.10.1...v0.11.0
[0.10.1]: https://github.com/DaoyuanLi2816/mini-verl/compare/v0.10.0...v0.10.1
[0.10.0]: https://github.com/DaoyuanLi2816/mini-verl/compare/v0.9.1...v0.10.0
Expand Down
4 changes: 2 additions & 2 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ cff-version: 1.2.0
title: "miniVERL: A bounded single-GPU runtime for verl-style OPD"
message: "If you use miniVERL in your work, please cite it as below."
type: software
version: 0.11.0
date-released: 2026-08-29
version: 0.12.0
date-released: 2026-09-07
license: Apache-2.0
repository-code: "https://github.com/DaoyuanLi2816/mini-verl"
url: "https://github.com/DaoyuanLi2816/mini-verl"
Expand Down
42 changes: 27 additions & 15 deletions PROJECT_STATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,25 +4,32 @@ Current maintainer handoff for **miniVERL** (`mini-verl` package, `miniverl`
CLI). `release-state.yaml` is the canonical version source; this page indexes
current product and evidence state rather than repeating release history.

Last updated: 2026-08-29.
Last updated: 2026-09-07.

Canonical release state: stable `v0.11.0` (`479695c4980150bc6f7a51bddec2b90c08c8bb98`), development `0.11.1.dev0`.
Canonical release state: releasing `v0.12.0`.

## Release state

- Stable release: `v0.11.0` at `479695c4980150bc6f7a51bddec2b90c08c8bb98`.
- Development release: `0.11.1.dev0`.
- Release candidate: `v0.12.0`; publication is gated on exact-SHA RTX 4080 qualification.
- Previous stable release: `v0.11.0` at `479695c4980150bc6f7a51bddec2b90c08c8bb98`.
- Stable docs: <https://daoyuanli2816.github.io/mini-verl/>.
- Development docs: <https://daoyuanli2816.github.io/mini-verl/dev/>.
- Historical build log: [v0.1-v0.9 archive](docs/history/project-state-v0.1-v0.9.md).

## Current product boundary

The primary product is `verl-opd-v0.8-single-gpu-v1`: a typed, resolved subset
of official verl `v0.8.0` at commit
`7aed6b230776f963fa09509c10d9c3a767d1102c`. It runs one actor, one teacher,
`n=1`, reward-free direct GKD `forward_kl_topk` and token-mean reduction in one
local process on one NVIDIA CUDA GPU.
Release `0.12.0` has a closed typed profile compiler and adds
`verl-rl-v0.9-single-gpu-v1`, a typed resolved
subset of official verl `v0.9.0` at commit
`483b8a009ba3a97563edee3a19887e4862b8094a`. It compiles GRPO, Dr.GRPO, RLOO
and REINFORCE++ experiments into grouped one-GPU actor/reward/reference phases,
with behavior-policy identity, fixed reference reward KL, transactional resume
and a machine-readable field report.

The established `verl-opd-v0.8-single-gpu-v1` family remains the teacher-based
distillation path. It targets official verl `v0.8.0` at
`7aed6b230776f963fa09509c10d9c3a767d1102c` and provides direct GKD,
sampled-k1, grouped and rewarded profiles.

The stable v0.9.1 repair makes dtype, quantization, attention, student
adapter input, logical/physical batch limits and placement legality explicit.
Expand All @@ -31,10 +38,11 @@ Executable compatibility claims are mutation-tested and recorded in
unknown-size quantized roles require proof instead of receiving an executable
plan.

Development `0.11.1.dev0` has a closed typed profile registry and torch-free
compatibility introspection. Profile-scoped plans, caches, checkpoints and
exports bind an independent identity. The direct-GKD and sampled-k1 vanilla
policy-loss profiles both have pinned conformance and measured RTX 4080 paths.
Profile-scoped recipes, plans, caches, checkpoints and exports bind an
independent identity. The v0.9 compiler is Torch-free; the RL math and runtime
remain inside `[train]`. The new estimator, policy, value and KL primitives are
compared against the exact upstream source. The direct-GKD and sampled-k1
profiles retain their pinned conformance and measured RTX 4080 paths.
Portable hardware records preserve measured, estimated and unknown states;
schema-valid community submissions remain unreviewed until maintainer validation.
The release chain builds one hosted-runner candidate and binds the maintainer's
Expand All @@ -44,8 +52,11 @@ Releases use a canonical, explicit evidence layout with four principal JSON
records and one deterministic subordinate-evidence archive; historical v0.10.1
asset names remain immutable.

Arbitrary verl YAML, other policy-gradient modes, rewards, PPO/GRPO, Ray, FSDP,
Megatron, multi-GPU and distributed execution remain unsupported. The legacy
PPO/GAE execution remains unimplemented because the runtime has no trainable
critic model/optimizer/checkpoint lifecycle; its mathematical primitives are
conformance-tested. Ray, FSDP/FSDP2, Megatron, multi-GPU and multi-node
execution are distributed-only. Arbitrary unresolved verl YAML and unknown
algorithm-changing fields remain outside the versioned compiler. The legacy
environment/PPO artifact bridge is migration-only.

## Current evidence
Expand All @@ -66,6 +77,7 @@ calculator schema-v2 source stays at SHA-256
## Maintainer entry points

- [Current local runtime](docs/verl-opd-runtime.md)
- [Single-GPU verl RL](docs/verl-rl-runtime.md)
- [Current scale-out contract](docs/verl-opd-scaleout.md)
- [Compatibility policy](docs/compatibility.md)
- [Measured workload](docs/verl-opd-reference-workload.md)
Expand Down
Loading
0