Repository

warprl

WarpSAC: Towards the Pinnacle of Scalable Off-Policy Reinforcement Learning by Rethinking Exploration and Exploitation This repository contains the official implementation of WarpS · License unknown · Install via pip · Maintenance unknown

License
Unknown

README

WarpSAC: Towards the Pinnacle of Scalable Off-Policy Reinforcement Learning by Rethinking Exploration and Exploitation

This repository contains the official implementation of WarpSAC, together with the training scripts and environment integrations used in our experiments. WarpSAC extends FlashSAC with regime-aware replay and stabilization choices, improving sample efficiency and training wall-clock efficiency in the evaluated settings.

License: MIT
arXiv
Project Page

We thank Holiday Robotics for providing the FlashSAC code used in this project.

Demonstrations

<video controls muted loop playsinline width="720" src="https://github.com/user-attachments/assets/0dccd420-ed34-48cd-95bf-ebf9b65c6350">
Your browser does not support embedded video. Use the link above.
</video>

Unitree G1 sim-to-real learning curves

The framework supports JAX and PyTorch backends. The reported WarpSAC results use the JAX backend. The PPO implementation uses the PyTorch backend with mixed-precision execution and torch.compile; this is an optimized implementation built on top of the RSL-RL training pipeline, whose standard configuration does not provide these two optimizations.

Installation

Create the base environment:

conda env create -f environment.yml
conda activate warp_rl

The IsaacSim and IsaacLab stack is optional. Reserve at least 50 GB of free disk space for these packages:

conda activate warp_rl
python -m pip install --extra-index-url https://pypi.nvidia.com \
  "isaacsim[all,extscache]==5.1.0" \
  "isaaclab[isaacsim]==2.3.0"

Verify the installation with:

import jax
import torch

print("PyTorch:", torch.__version__)
print("CUDA:", torch.version.cuda, "available:", torch.cuda.is_available())
print("JAX:", jax.__version__, "devices:", jax.devices())

Training

All commands are run from the repository root. Use --seed to select an experiment seed.

WarpSAC on CPU-scale MuJoCo

python train_warpsac.py \
  --env-id Hopper-v4 \
  --env-type mujoco \
  --backend jax \
  --seed 1

WarpSAC on GPU-parallel IsaacLab

CUDA_VISIBLE_DEVICES=0 python train_warpsac.py \
  --env-id Isaac-Velocity-Flat-G1-v0 \
  --env-type isaaclab \
  --backend jax \
  --seed 1

Unitree G1 sim-to-real

The Unitree-G1-Flat profile uses the MJLab environment and the sim-to-real configuration defined by the training script.

CUDA_VISIBLE_DEVICES=0 python train_warpsac.py \
  --env-id Unitree-G1-Flat \
  --env-type mjlab \
  --backend jax \
  --seed 1

PPO on Unitree G1 sim-to-real

CUDA_VISIBLE_DEVICES=0 python train_ppo.py \
  --env-id Unitree-G1-Flat \
  --env-type mjlab \
  -- backend torch \
  --seed 1

Important WarpSAC options

The main controls that distinguish the WarpSAC sampling and normalization regimes are:

--decay-step 0
--actor-normalize-parameters
--critic-normalize-parameters

decay_step=0 disables the decay-based sampling bias and recovers uniform replay. Parameter normalization is enabled by default; for large GPU-parallel simulations, disabling actor and critic parameter normalization is recommended unless the experiment requires otherwise.

Citation

If WarpSAC is useful in your research, please cite:

@misc{wu2026warpsacpinnaclescalableoffpolicy,
      title={WarpSAC: Towards the Pinnacle of Scalable Off-policy RL by Rethinking Exploration and Exploitation}, 
      author={Zihao Wu and Hongyao Tang and Yi Ma and Huizhong Song and Pengyi Li and Yifu Yuan and Fei Ni and Jinyi Liu and Wei Wei and Jianrong Wang and Yan Zheng and Jianye Hao},
      year={2026},
      eprint={2608.24479},
      archivePrefix={arXiv},
      primaryClass={cs.LG},
      url={https://arxiv.org/abs/2608.24479}, 
}