Skip to content

Add PPO kernels - #5

Closed
haixuanTao wants to merge 2 commits into
dimforge:mainfrom
haixuanTao:feat/ppo-kernels
Closed

haixuanTao wants to merge 2 commits into
dimforge:mainfrom
haixuanTao:feat/ppo-kernels

Conversation

@haixuanTao

Copy link
Copy Markdown
Contributor

Add PPO gradient kernel for RL training

haixuanTao and others added 2 commits May 26, 2026 16:20
Adds vortx::linalg::{Activation (tanh + tanh_backward), Adam} and their shaders,
the GPU building blocks for MLP training (used by nexus RL demos / zealot-rl).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
New `ppo` op (host + shader) producing the per-sample OUTPUT gradients
that feed the generic GEMM/elu_backward backward backbone:

- gpu_ppo_actor_grad: clipped-surrogate actor gradient (logp over the
  action dims, ratio = exp(logp - logp_old), clip mask) -> g_mean plus
  the state-independent log_std gradient contribution.
- gpu_ppo_value_grad: clipped value-loss gradient.

Both are an exact port of zealot-rl's minibatch_step. Every per-sample
tensor is row-major [rows x M] (M = minibatch columns); one thread
handles one sample column and loops over the (small) action dim. No
Shape uniform -- dims ride in PpoActorParams/PpoValueParams.

Exports Ppo, PpoActorParams, PpoValueParams (host) and GpuPpoActorGrad,
GpuPpoValueGrad (shaders). Verified vs CPU minibatch_step (~1e-7, ~25%
of samples on the clip branch).

Note: the one-line glamx Cargo.toml dependency is shared with the ELU
and GEMM-vec4 branches; whichever lands first, the others need a trivial
rebase of that line.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@sebcrozet

Copy link
Copy Markdown
Member

Thank you for this PR!
I think this would be more suitable as part of inferi instead of Vortx, since inferi is about ML kernels. Also note that the forward tanh is already implemented in inferi there. There isn’t any backward tanh yet though.

@sebcrozet

Copy link
Copy Markdown
Member

This is being merged as part of #11

sebcrozet added a commit that referenced this pull request Aug 27, 2026
* feat: move inferi shaders into an optional ml module for vortx

* chore: cargo fmt

* feat(ml): add tanh activation + Adam optimizer GPU ops

Replaces #5

Co-Authored-By: Haixuan Xavier Tao <tao.xavier@outlook.com>

* refactor(ml): move the tanh-backward + Adam kernels into vortx::ml and drop the duplicated tanh forward

Completes #5

* feat(ml): add ELU activation GPU ops (fwd/backward/vec4)

Replaces #6

Co-Authored-By: Haixuan Xavier Tao <tao.xavier@outlook.com>

* refactor(ml): keep only the ELU backward pass, the forward is already UnaryOp::Elu

Completes #6

* feat(ml): add PPO loss-gradient GPU kernels

Replaces #5

Co-Authored-By: Haixuan Xavier Tao <tao.xavier@outlook.com>

* refactor(ml): wire the PPO kernels to vortx::ml and use StepRng for uniform control flow

Completes #5

* perf(linalg): vec4 GEMM (compute-FMA inner loop + vec4 global-load variant)

Replaces #7

Co-Authored-By: Haixuan Xavier Tao <tao.xavier@outlook.com>

* perf(linalg): keep the vec4 FMA inner loop, drop the unmeasured vec4 global-load GEMM variant

Completes #7

* feat(ml): gpu_ppo_stage_batch, building the PPO minibatch on device

* chore(ml): comment cleanups

* chore: CI fixes

---------

Co-authored-by: Haixuan Xavier Tao <tao.xavier@outlook.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.

2 participants