We are excited to announce the release of slime v0.3.0!
This release marks a major step toward agent-first reinforcement learning. While slime has supported multi-turn and agentic workloads from early versions, v0.3.0 turns these scattered capabilities into a more coherent foundation: reusable agent components, safer trajectory handling, black-box coding-agent RL examples, fully async training as a first-class path, variable global batch-size training, and lower host-memory usage that enables more flexible rollout-inference configurations.
Major Updates
-
Agent-first slime/agent module
- Added a dedicated
slime/agentmodule with reusable components for sandbox-based agents, trajectory merging, rollout grouping, and OpenAI/Anthropic-compatible adapters.
- Added a dedicated
-
Black-box coding-agent RL example
- Added coding_agent_rl, a minimal sandbox-based coding-agent RL example for training agents that interact with real environments through tools, files, commands, retries, and multi-step trajectories.
-
Variable global batch-size training
- Added support for variable global batch sizes, reducing the need for padding or trimming and better supporting compacted rollouts, filtered samples, subagents, and overlong trajectory handling.
-
Fully async training as a first-class path
- Moved the fully async training workflow into the main codebase, making it easier to support agent workloads with heterogeneous rollout latency and long-horizon trajectories.
-
Host-memory optimizations
- Reduced host-memory overhead by removing several large parameter-copy paths and improving memory saver integration, leaving more room for HiCache, offload, rollout buffers, and agent trajectories.
-
PPO refactor and actor-critic colocation
- Refactored PPO and critic handling, improved value-head/offload paths, and reduced GPU usage through more efficient actor-critic colocation.
Other Notable Changes
- Added delta weight sync with disk and NCCL transports, moving slime closer to practical disaggregated training/inference deployment.
- Added FlashQLA backend support for Qwen GDN and improved Qwen3.5 / Qwen3.6 compatibility.
- Added
--save-hfsupport for raw mode and improved HF checkpoint conversion.
Environment and CI
- Upgraded SGLang to v0.5.12.post1.
- Upgraded Megatron to 1dcf0dafa.
- Added more CPU-only unit tests for faster correctness checks.
- Added e2e and validation coverage for delta weight update, GPU placement, multi-sample training, server-group GPU indices, and train-rollout log-prob consistency.
What's Changed
- pass critic role through to create RayTrainGroup by @znculee in #1797
- fix qwen3.5 397B converting error when enable expert parallel by @xutianming in #1799
- fix(geo3k-vlm-sft): remove --apply-chat-template from SFT launch script by @DongzhuoranZhou in #1791
- Add host memory metrics to available_memory function by @peterjc123 in #1764
- [WIP] fix loss oom by @lilei199908 in #1788
- sync from internal by @zhuzilin in #1805
- sync from internal by @zhuzilin in #1807
- feat: add npu patch for qwen3-vl-8b grpo & ppo by @cjy0x in https://github.com/THUDM/slime/pull/1750
- fix missing position_ids in log-prob forward step by @znculee in #1809
- feat: add support for including missing weights from origin HF checkp… by @peterjc123 in #1812
- [Fix] Initialize grad_norm before found_inf skip path by @kaysonyu in #1762
- [conda] Add install custom sgl-router to build_conda.sh by @zhuzilin in #1813
- Revert no_grad for entropy to prevent comm stuck in dsa by @zhuzilin in #1822
- Add fallback for get_seqlen_balanced_partitions by @zhuzilin in #1823
- docs: add Relax to notable projects in README by @Yangruipis in #1834
- Bugfix: use cpu instead of cuda in convert_torch_dist_to_hf.py when --add-missing-from-origin-hf is set by @coding-famer in #1828
- [fix] eval sample logging when sample is a list by @mathewjhan in #1836
- [Fix] Fix cuda-python pin in build_conda.sh by @kaysonyu in #1827
- fix entropy bug and update code by @lilei199908 in #1846
- Revert "Add fallback for get_seqlen_balanced_partitions" by @zhuzilin in #1848
- fix by @lilei199908 in #1849
- Add support for NVIDIA DGX Spark (GB10 / sm_121a, arm64) by @boots-coder in #1835
- refactor/ppo by @lilei199908 in #1856
- [docker] cleanup sglang patch by @zhuzilin in #1859
- Rename critic config to megatron config by @zhuzilin in #1866
- [Fix] Use Ray ObjectRef await instead of asyncio.to_thread in distributed POST by @ryang-max in #1873
- chore: include length context in slice_log_prob_with_cp assert by @leofan-lab in #1862
- [docker] upgrade megatron to 1dcf0dafa by @zhuzilin in #1867
- fix ppo value head load bugs by @lilei199908 in #1878
- [docker] upgrade sglang to v0.5.10.post1 by @zhuzilin in #1874
- [docker] update megatron-bridge and add qwen3.6 tests by @zhuzilin in #1884
- Fix(checkpoint): add resume/pause in save_model() for offload_train (fixes #1886) by @Procrastinatorrrr in #1888
- fix ppo value offload bugs by @lilei199908 in #1882
- fix qwen3.6 hf config validation bug by @zhuzilin in #1889
- Add missing metrics to log by @zhuzilin in #1890
- fix(qwen3_next): use torch.get_default_dtype() — get_current_dtype do… by @HeatherLiuzh in #1883
- Fix location error in install script by @selfanti in #1877
- Only allow --allgather-cp for DSA model by @zhuzilin in #1891
- Migrate internal feature by @zhuzilin in #1897
- [Fix] Fix distributed POST actor concurrency split by @kaysonyu in #1880
- Fix CI: update rollout_data_postprocess plugin contract for new call site by @jingshenghang in #1902
- Patch Megatron TP grad coalesce to chunked all-reduce by @jingshenghang in #1899
- fix: harden retool rollout against multi-turn / retry desync by @leofan-lab in #1861
- [docker] update torch memory saver by @zhuzilin in #1916
- add critic wandb config by @lilei199908 in #1919
- Move fully_async example to main codebase by @zhuzilin in #1920
- Add example for streaming output by @zhuzilin in #1921
- Reduce host memory with upgraded tms by @zhuzilin in #1924
- Move micro-batch scheduling from training side to rollout side by @zhuzilin in #1926
- save host menmroy by @lilei199908 in #1932
- [1/N] Support training with variable global batch size by @zhuzilin in #1930
- fix: guard sglang_speculative_algorithm read in --debug-train-only mode by @leofan-lab in #1938
- [2/N] Support training with variable global batch size by @zhuzilin in #1933
- add more cpu ci by @zhuzilin in #1939
- run cpu test on main branch by @zhuzilin in #1940
- Add GPU placement validation before starting rollout engines by @fmh66 in #1934
- Add multi-sample test by @zhuzilin in #1941
- update docs by @zhuzilin in #1942
- remove redundant file by @zhuzilin in #1943
- register validate_server_group_gpu_indices to ci by @zhuzilin in #1944
- feat: delta weight sync (disk + nccl transports) by @nanjiangwill in #1806
- Add backward compatibility to delta weight updation by @zhuzilin in #1946
- [docker] upgrade to sglang v0.5.12.post1 by @zhuzilin in #1945
- [docker] fix sglang pd prefill abort request by @zhuzilin in #1949
- [examples] add coding_agent_rl: agent-in-sandbox RL minimal demo by @jingshenghang in #1923
- Add slime/agent/ and move sandbox impl inside by @zhuzilin in #1956
- Minor refactor for coding agent rl logic and remove SWE_LIST_TRAJECTORY by @zhuzilin in #1957
- Move coding_agent_rl's helper function to sandbox.py by @zhuzilin in #1958
- disable param backup by @lilei199908 in #1952
- [sglang_utils] flush_cache: log non-200 responses and back off before… by @jingshenghang in #1953
- Extract more util code from coding_agent_rl example by @zhuzilin in #1960
- [docs] Add docs for agent rl by @zhuzilin in #1961
- rollout: add forge_load to replay dumped rollouts with sglang alive by @ryang-max in #1959
- [coding_agent_rl] middleware: shutdown_session drains in-flight handl… by @jingshenghang in #1954
- lint by @ryang-max in #1962
- Fix trajectory merging logic by @zhuzilin in #1963
- Don't use sample.index as default rollout_id by @zhuzilin in #1965
- feat: add FlashQLA backend for Qwen GDN and skip selected comm memory checks by @hxy771126-design in #1947
- [ci] add check for train_rollout_logprob_abs_diff by @zhuzilin in #1968
- support --save-hf for raw mode by @zhuzilin in #1969
- [docker] fix mooncake offload in sglang v0.5.12 by @zhuzilin in #1972
- [docker] fix patch by @zhuzilin in #1973
- [docs] Add finer explanation for re-tokenizationi issue by @zhuzilin in #1974
- [docker] fix GLM4.7 flash for sglang v0.5.12 by @zhuzilin in #1977
- [docker] Fix qwen3 30B + deepep with sglang 0.5.12 by @zhuzilin in #1978
- [agent] Add openai and anthropic adapters by @zhuzilin in #1979
- [Fix] Fix FLOPs accounting for non-MLA attention by @kaysonyu in #1980
- [agent] extract Adapter class by @zhuzilin in #1981
- [agent] Fix dropping overlong sample by @zhuzilin in #1982
- [docker] fix GLM4.7 Flash in sglang v0.5.12 by @zhuzilin in #1983
- rename rollout_ids to group_ids by @zhuzilin in #1984
- [test] make tests shorter by @zhuzilin in #1985
- [docs] optimize readme by @zhuzilin in #1986
- [ci] don't compare ref_logprob and logprob when R3 is on by @zhuzilin in #1987
- [docs] optimize docs by @zhuzilin in #1988
- [docs] fix doc by @zhuzilin in #1989
- [ci] fix kl check on R3 by @zhuzilin in #1990
- Fix PYTHONBUFFERED typo to PYTHONUNBUFFERED=1 by @Chasing1020 in #1967
- [ci] Add e2e test for delta weight update by @zhuzilin in #1991
- fix: drop incorrect critic GPU add to rollout_num_gpus in colocate mode by @aoshen02 in #1950
- Feat/minimax m2.5 support by @xs1997zju in #1929
- fix: avoid applying rollout temperature to critic values by @Baiyu-Su in #1928
- cleanup by @zhuzilin in #1992
- Patch sglang 0.5.12.post1 for delta sync by @nanjiangwill in #1993
- [release] bump to v0.3.0 by @zhuzilin in #1975
New Contributors
- @znculee made their first contribution in #1797
- @xutianming made their first contribution in #1799
- @cjy0x made their first contribution in https://github.com/THUDM/slime/pull/1750
- @Yangruipis made their first contribution in #1834
- @mathewjhan made their first contribution in #1836
- @boots-coder made their first contribution in #1835
- @leofan-lab made their first contribution in #1862
- @Procrastinatorrrr made their first contribution in #1888
- @HeatherLiuzh made their first contribution in #1883
- @selfanti made their first contribution in #1877
- @jingshenghang made their first contribution in #1902
- @fmh66 made their first contribution in #1934
- @hxy771126-design made their first contribution in #1947
- @Chasing1020 made their first contribution in #1967
- @aoshen02 made their first contribution in #1950
- @xs1997zju made their first contribution in #1929
- @Baiyu-Su made their first contribution in #1928
Full Changelog: v0.2.4...v0.3.0