Skip to content

feat(grpc): add RL lifecycle control - #22

Draft
connorcarpenter15 wants to merge 4 commits into
mainfrom
feat/grpc-rl-control
Draft

feat(grpc): add RL lifecycle control#22
connorcarpenter15 wants to merge 4 commits into
mainfrom
feat/grpc-rl-control

Conversation

@connorcarpenter15

@connorcarpenter15 connorcarpenter15 commented Aug 6, 2026

Copy link
Copy Markdown
Owner

Summary

  • Extend the native vllm.Control gRPC service with pause/resume, sleep/wake, weight-transfer lifecycle, and weight-version RPCs.
  • Advertise RL capabilities from every connected engine-core handshake and fail closed when weight transfer, sleep mode, draft updates, or scheduler pause prerequisites are unavailable.
  • Serialize state mutations, require generation to be paused before weight mutation, keep tensor movement on the configured NCCL/IPC/sparse-NCCL transport, and document the unauthenticated administrative surface.

Why this change

The Rust frontend currently exposes inference and discovery over gRPC, but Dynamo's Rust vLLM sidecar cannot drive the RL lifecycle without falling back to the separate development HTTP server. These RPCs provide the native control path needed for trusted sidecars while preserving vLLM's existing engine-core and worker APIs.

Companion Dynamo sidecar integration: connorcarpenter15/dynamo#9.

Duplicate search

I searched open vLLM pull requests by title and body for RL, RLHF, gRPC Control, pause generation, weight transfer, and weight version. I did not find an open PR implementing this RL control surface. vllm-project#48033 provides the underlying Rust gRPC frontend and vllm-project#51178 adds explicit data-parallel routing; this change builds on the former and deliberately leaves protobuf field 10 available for the latter rather than duplicating either PR.

Validation

  • cargo check -p vllm-server -p vllm-engine-core-client — passed.
  • cargo fmt --all -- --check — passed.
  • cargo +1.96.1 clippy -p vllm-server -p vllm-engine-core-client --all-targets -- -D warnings — passed. The repository-pinned Rust 1.95 toolchain did not have its Clippy component installed, so the installed newer toolchain was used.
  • cargo test -p vllm-server grpc::tests::control_ -- --nocapture — passed, 5 tests.
  • LD_LIBRARY_PATH=/nix/store/si4q3zks5mn5jhzzyri9hhd3cv789vlm-gcc-15.2.0-lib/lib cargo test -p vllm-engine-core-client python_msgpack_fixtures_match_rust_encoding -- --nocapture — passed, 1 test.
  • UV_CACHE_DIR=/tmp/vllm-rl-uv-cache uv run --no-sync python -m compileall -q vllm/v1/engine — passed.
  • uv run --no-sync python -m pytest tests/v1/engine/test_engine_core_client.py -q — not run because the fresh local uv environment did not contain pytest.

Model evals

Not run. This is a control-plane/protocol change and does not alter inference numerics; engine-core wire behavior is covered with scripted mock-engine tests.

AI assistance disclosure

This implementation was prepared with OpenAI Codex assistance. A human reviewer must review every line of the change before merge.

Signed-off-by: Connor Carpenter <connorc@nvidia.com>
Signed-off-by: Connor Carpenter <connorc@nvidia.com>
Signed-off-by: Connor Carpenter <connorc@nvidia.com>
Signed-off-by: Connor Carpenter <connorc@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant