Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
882 commits
Select commit Hold shift + click to select a range
0f90c57
fix: remove duplicate setup in gsm8k_rl (#842)
v3nividiv1ci Jan 21, 2026
ede0572
refactor(archon): cleanup parallel dims and FSDP config for pipeline …
Jan 21, 2026
df5fc69
refactor(tree_attn): decouple FSDP and Megatron implementations (#844)
Jan 22, 2026
93c1adc
feat(workflow): add Anthropic Messages API support for RL training (#…
fishcrap Jan 22, 2026
d29c153
Wht/fix/fix concat when end with eos and pad (#846)
yulangz Jan 22, 2026
9836ca5
[BugFix] VLM RLVR add reward func (#851)
PopSoda2002 Jan 26, 2026
3b58534
Fix wandb bug (#852)
PopSoda2002 Jan 26, 2026
f34d83b
feat(archon): add DCP-based HF checkpoint save/load with MoE expert s…
Jan 26, 2026
f5be9e9
ci(docker): modernize dependency management and Docker build pipeline…
garrett4wade Jan 26, 2026
f2ec7fd
bump v0.5.2 (#855)
garrett4wade Jan 26, 2026
ec442e6
ci(fix): Fix the image tag upon release (#856)
garrett4wade Jan 26, 2026
a3ddbb8
fix(critical): the loop exit condition in the agenerate (#858)
yulangz Jan 27, 2026
41dcb82
feat(launcher): auto-set OMP_NUM_THREADS based on cpus_per_task (#859)
Jan 27, 2026
e254955
feat(archon): use meta device + DCP for memory-efficient model init (…
Jan 27, 2026
0f2cdf7
feat(fsdp): add memory_efficient_load option for large model initiali…
Jan 28, 2026
986fc37
ci(docker): add DeepSeek-V3 kernels and modernize tooling (#861)
fishcrap Jan 30, 2026
6ef7a24
feat(workflow): Add LangChain agent integration for training (#865)
fishcrap Jan 30, 2026
128f08f
chore: add Claude Code configuration for AReaL (#866)
Jan 30, 2026
146db98
Bump v0.5.3 (#869)
garrett4wade Jan 31, 2026
67740f5
fix(ci): use dev image for CI testing (#870)
garrett4wade Jan 31, 2026
1ba9ad3
feat(archon): add pipeline parallelism (PP) support for Archon engine…
Jan 31, 2026
451e6ca
feat(utils): add dynamic PYTHONPATH in get_env_vars (#867)
Jan 31, 2026
d35ad32
chore(claude): refactor agent architecture and complete ecosystem (#873)
Feb 2, 2026
df1a5ba
perf(tree_attn): Add lazy attention mask creation for tree training (…
Feb 2, 2026
9d35e70
chore(infra): consolidate infrastructure and add create-pr command (#…
garrett4wade Feb 2, 2026
67c7969
fix(scheduler): Fix SLURM scheduler `spec.image` and `spec.additional…
Feb 3, 2026
779523d
feat(archon): enable PP > 1 for RL training with XCCL weight sync (#877)
Feb 3, 2026
8d07992
feat(tree_attn): implement Triton kernel (#874)
alumkal Feb 3, 2026
ea8f60d
testing: update GCP image for CI (#881)
Feb 3, 2026
013a3c0
refactor(archon): extract runner and weight sync into separate module…
Feb 3, 2026
a78a093
docs: streamline CLI usage and reorganize tutorials (#878)
garrett4wade Feb 4, 2026
9c6177f
fix(archon): enable torch.compile for attention_norm/ffn_norm (#886)
Feb 4, 2026
76470c3
Revert "fix(archon): enable torch.compile for attention_norm/ffn_norm…
Feb 4, 2026
a361408
refactor(api): deprecate AgentWorkflow inheritance requirement (#883)
garrett4wade Feb 4, 2026
09246b4
refactor: streamline CLI usage and remove unused files (#880)
garrett4wade Feb 4, 2026
e65e99b
refactor(archon): consolidate and simplify test suite (#888)
Feb 4, 2026
dc3c289
fix(tree_attn): Fix some bugs in tree training for FSDP and Megatron …
Feb 4, 2026
7f1bc79
fix(archon): skip output merge in PP schedule to halve memory usage (…
Feb 4, 2026
943924f
feat(workflow): add Anthropic Claude SDK integration for RL training …
fishcrap Feb 4, 2026
59dc5e4
docs: add checkpointing, metrics tracking, and workflow guides (#891)
garrett4wade Feb 5, 2026
719c95d
docs: add agent workflow reference and update agentic RL docs (#893)
garrett4wade Feb 5, 2026
7abcf41
docs: add Important Metrics to Monitor section (#894)
xssstory Feb 5, 2026
b70afff
feat(tau2): Add Tau2 agentic RL training example with proxy server (#…
Feb 5, 2026
ac911fe
feat(archon): add Interleaved1F1B pipeline parallel schedule support …
Feb 5, 2026
43717ee
docs: add proxy architecture and dataflow diagrams (#897)
fishcrap Feb 5, 2026
88425b2
build: migrate from setuptools to uv build backend (#899)
garrett4wade Feb 5, 2026
147e87d
refactor(trainer): move trainer modules from experimental to areal/tr…
garrett4wade Feb 5, 2026
3a4efc9
fix(datapack): use balanced greedy partition for equal DP batch split…
garrett4wade Feb 5, 2026
e20d924
Fix update_weight_lora_xccl vllm 0.14.0 (#902)
HwVanICI Feb 6, 2026
200fb9c
docs: add Archon engine tutorial and AI-assisted development guide (#…
Feb 6, 2026
d3c2f24
docs: reorganize README and rename agent_workflow example (#903)
garrett4wade Feb 6, 2026
6f4df84
docs: add agent_workflow to table of contents (#905)
fishcrap Feb 6, 2026
c910c4e
Add qwen3-vl-dense support and example on Ascend (#868)
HwVanICI Feb 6, 2026
3dfdb0b
docs: improve grammar and clarity in debugging and OOM guides (#904)
garrett4wade Feb 6, 2026
712aa5a
feat(utils): add network filesystem validation for shared paths (#906)
Feb 6, 2026
ef47633
docs: update roadmap to Q1 2026 and improve CI/CD documentation (#908)
garrett4wade Feb 7, 2026
2272ea1
feat(skills): add /add-archon-model skill for new model support (#914)
Feb 9, 2026
54b9a43
fix(ci): disable local scheduler test and docker install validation i…
Feb 9, 2026
49dcf0f
fix(scheduler): Set CUDA_VISIBLE_DEVICES in sbatch script before Pyth…
Feb 9, 2026
26f3eab
fix(tree-attn): Handle dummy trie in Megatron and optimize attention …
Feb 9, 2026
982667b
fix(ci): fix github release workflow (#909)
garrett4wade Feb 9, 2026
c16dbf1
feat(archon): Add tree training support for Archon engine (#912)
Feb 10, 2026
d577b50
feat(archon): add ZBVZeroBubble pipeline schedule support (#916)
Feb 10, 2026
3c763e6
docs: remove outdated design document (#917)
garrett4wade Feb 10, 2026
68180d3
refactor(infra): move scheduler and rpc modules under areal/infra (#918)
garrett4wade Feb 10, 2026
9e35f19
refactor(infra): move launcher modules to infra/launcher subpackage (…
garrett4wade Feb 10, 2026
8e88356
docs: update CLI reference examples to use train.py (#923)
garrett4wade Feb 10, 2026
a4fbca6
refactor(tree-attn): simplify tree attention plumbing and restructure…
Feb 10, 2026
ba22de0
Empty cache in npu clear memory (#924)
HwVanICI Feb 11, 2026
719c9f0
refactor(utils): reorganize domain-specific utils into natural homes …
Feb 13, 2026
c075c5b
feat(checkpoint): add async checkpoint saving for ArchonEngine (#926)
Feb 15, 2026
368b229
chore(agents): port agent infrastructure to OpenCode (#934)
Feb 25, 2026
088c3dd
fix(utils): correct initial log step to start from 0 (#935)
fishcrap Feb 25, 2026
ff92cf4
fix(agents): Filter out max_turns from kwargs before API calls (#937)
fishcrap Feb 25, 2026
378a252
feat(archon): add InterleavedZeroBubble (ZB1P) pipeline schedule (#936)
Feb 26, 2026
981ca3f
docs: Add tree training documentation and tau2 example results (#938)
Feb 26, 2026
0c04c58
fix(engine): improve LoRA weight update with versioned naming (#928)
garrett4wade Feb 26, 2026
228eede
fix(archon): default score_before_experts to False for HF parity (#940)
Feb 27, 2026
51c2ee8
feat(archon): add deterministic training mode for reproducibility (#943)
Feb 28, 2026
ba57aae
fix(proxy): use unique role names for proxy workers to fix rollout du…
yulangz Feb 28, 2026
296f488
VLM multinode training example and performance comparison with verl o…
HwVanICI Feb 28, 2026
2ebbfc3
refactor(tests): move tests from areal/tests to top-level tests direc…
garrett4wade Feb 28, 2026
1b8d864
refactor(proxy): replace URL-path session isolation with API-key-base…
garrett4wade Mar 1, 2026
b8c6283
feat(proxy): add proxy gateway and online RL training mode (#947)
garrett4wade Mar 2, 2026
8d10a5d
feat: correct routed_experts from sglang (trick of routing_replay) (#…
ZiyiTsang Mar 2, 2026
7f924f9
chore: rename online RL examples to make it more attractive (#952)
garrett4wade Mar 2, 2026
0ab88c9
feat(archon): improve pipeline parallelism memory handling (#951)
Mar 2, 2026
851566f
Update README (#953)
garrett4wade Mar 2, 2026
49cbef1
feat(tau2): Add Tau2 MOE Model Training Configs and Update README (#949)
GurrenLagann97 Mar 2, 2026
e74b7e6
chore: auto-configure adam_bf16 for Megatron and update documentation…
ZiyiTsang Mar 2, 2026
bbf2aaf
fix(infra): convert config.rollout via to_structured_cfg in all launc…
ZiyiTsang Mar 2, 2026
a3e3234
refactor(archon): extract utility functions and simplify engine code …
Mar 2, 2026
aaa8e83
bump v1.0.0 (#958)
garrett4wade Mar 2, 2026
f1192ff
fix(config): Fix openclaw config typo and increase max_tokens_per_mb …
fishcrap Mar 3, 2026
f6a48a6
fix openclaw readme (#967)
fishcrap Mar 3, 2026
213dbbd
feat: Fully Support MIS/TIS to stablizing rollout-training mismatch (…
ZiyiTsang Mar 3, 2026
936c92f
refactor(api): move validation into config __post_init__ methods (#970)
Mar 3, 2026
0f46e2a
fix(openai-proxy): return None for empty trajectory in online mode (#…
fishcrap Mar 4, 2026
dd693a2
Ray placement group refactor and preliminary architecture for multino…
hlyli Mar 4, 2026
f905e4a
feat:Add chinese doc (#969)
ZiyiTsang Mar 4, 2026
3b177f5
fix(api): replace Literal type with str for SchedulingSpec.ray_placem…
garrett4wade Mar 4, 2026
b64555b
chore(docs): update readme (#974)
xssstory Mar 4, 2026
32aaedb
test(examples): add openclaw online RL integration test (#977)
fishcrap Mar 4, 2026
76b4095
pinning torchao version to 0.15.0 (#981)
garrett4wade Mar 4, 2026
1976d1d
bump v1.0.1 (#982)
garrett4wade Mar 4, 2026
de814be
feat(models): shard vision encoder across Ulysses SP ranks (#929)
aoshen524 Mar 5, 2026
5689bd6
docs: fix broken documentation links by adding /en/ language prefix (…
garrett4wade Mar 5, 2026
e24f507
[Feat] Add on-policy distillation support (#964)
HwVanICI Mar 6, 2026
87203dd
fix: keep PPO token stats consistent under context parallelism (#990)
yash27-lab Mar 6, 2026
7a02473
Upgrade GitHub Actions for Node 24 compatibility (#993)
salmanmkc Mar 6, 2026
1c3ae4a
Upgrade GitHub Actions to latest versions (#994)
salmanmkc Mar 6, 2026
880eaee
chore: add Python 3.11 support (requires-python >=3.11,<3.13) (#991)
garrett4wade Mar 6, 2026
43def7e
chore(ci): replace format-check with pre-commit CI and add commit-msg…
Mar 6, 2026
9560e88
feat(docs): add bilingual documentation with translate-doc-zh command…
ZiyiTsang Mar 6, 2026
aade8c9
refactor: flatten sub-module imports to use parent package re-exports…
NJX-njx Mar 6, 2026
b8605dd
feat(infra): split Docker image into sglang and vllm variants (#985)
garrett4wade Mar 8, 2026
5c9a170
docs: fix broken LaTeX rendering in bilingual algorithm docs (#1004)
Mar 8, 2026
11e2bb7
fix: CPU-only support on macOS (#1003)
zhanghaotong Mar 8, 2026
47310e8
feat(archon): add moe_router_dtype config for FP32 router gate GEMM (…
Mar 8, 2026
a94a7b7
refactor: replace string literals with enums and fix logging issues- …
HT-Yuan Mar 8, 2026
f50e005
feat(fsdp): add per-layer optimizer step with streaming H2D/D2H pipel…
aoshen524 Mar 11, 2026
2a0b695
docs: update NPU doc for v1.0.1 release (#1022)
HwVanICI Mar 12, 2026
ac6a90a
feat(archon): add Qwen3.5 dense and MoE model support (DP-only) (#1012)
Mar 12, 2026
042eeac
fix: LoRA and XCCL openai_serving_models LoRA versioning bug (#1021)
TinLongYu Mar 13, 2026
b3aabe2
fix: unify RPC error response JSON key to "error" across server and s…
HT-Yuan Mar 13, 2026
2016924
fix: close sockets on bind failure, fix __exit__ traceback in trainer…
mango766 Mar 16, 2026
c7b6f7b
fix(vllm): harden runtime LoRA alias handling for XCCL updates (#1039)
Wangxiaoxiaoa Mar 16, 2026
05ad9fd
fix(ci): minor fixing ruff format (#1041)
garrett4wade Mar 16, 2026
6849dcc
docs(github): improve PR template checklist and type-of-change sectio…
garrett4wade Mar 16, 2026
dec6ae6
docs: add online proxy mode training guide (#1006)
Zijun9 Mar 16, 2026
4dcc78e
Add opt-in support for Hugging Face kernels (#1033)
lewtun Mar 16, 2026
24dd09c
fix(archon): Wrap router gate in nn.Module for DTensor hook compatibi…
fishcrap Mar 16, 2026
093b287
chore(deps): bump sglang, vllm, megatron-core and restructure Dockerf…
garrett4wade Mar 17, 2026
e1acb43
ci(infra): add GCP image baking workflow for CI acceleration (#1045)
garrett4wade Mar 17, 2026
35bd712
Revert "ci(infra): add GCP image baking workflow for CI acceleration …
garrett4wade Mar 17, 2026
56df2fd
refactor(infra): simplify RTensor to single-shard and adopt per-traje…
fishcrap Mar 17, 2026
af61090
ci(infra): add GCP image baking workflow and update CI image (#1047)
garrett4wade Mar 17, 2026
3717bbc
docs: revise online RL training tutorial for EN and ZH (#1049)
garrett4wade Mar 17, 2026
fa9ee3c
chore: prepare v1.0.2 release (#1050)
garrett4wade Mar 17, 2026
5dd9136
chore(docker): add openclaw, ironclaw, zeroclaw, and nanobot-ai to ru…
garrett4wade Mar 18, 2026
65b0617
feat(agent-service): add Agent Service microservice infrastructure (#…
CormickKneey Mar 19, 2026
ea02b2a
feat(gateway): Add rollout gateway infrastructure with controller, ro…
Mar 19, 2026
5c19acb
feat: estimators for kl divergence (#1060)
NicolasArias Mar 19, 2026
24b6a41
test(infra): speed up inference service integration tests (#1068)
Mar 20, 2026
c2d280d
fix(archon): simplify RTensor serialization in data proxy (#1067)
garrett4wade Mar 23, 2026
09360f0
fix(rpc): resolve connection reset during RTensor fetch with large pa…
pratyush618 Mar 24, 2026
aa7a220
docs: add gitcgr code graph badge (#1073)
vitali87 Mar 24, 2026
9fbd7e6
fix(openai): handle streaming responses in chat/completions endpoint …
Zijun9 Mar 24, 2026
567d35a
fix: add PIL image and processor serialization for VLM RPC (#1070)
Adiactive Mar 24, 2026
e453acc
refactor(api): migrate allocation_mode to per-engine backend fields (…
garrett4wade Mar 24, 2026
b50cbdb
chore(agents): add Codex harness and align AI workflows (#1082)
Mar 24, 2026
8941b89
feat(platform): add NUMA CPU affinity binding for training engines (#…
HT-Yuan Mar 25, 2026
26820e1
feat(commands): add fork workflow support to create-pr skill (#1092)
guozhihao-224 Mar 26, 2026
8e88e0f
fix(rpc): batch HTTP RTensor fetches for multi-image payloads (#1077)
Wangxiaoxiaoa Mar 26, 2026
ed806d1
fix(fsdp): stabilize qwen-vl get_rope_index args and dtype (#1094)
Adiactive Mar 27, 2026
9be4cfc
refactor: use pause_generation instead of abort_all_req in areal_vllm…
HwVanICI Mar 27, 2026
c282504
feat: add BailingMoeV2.5 support with Lightning Attention + MLA + MoE…
dingzhiqiang Mar 27, 2026
584b884
feat: support model training in IPv6-only environment (#1072)
TaoZex Mar 30, 2026
9c6be8a
fix: fix pad_packed_tensor_dict (#1104)
HKAB Mar 30, 2026
a8d7870
feat: megatron bridge adaptation (#1056)
gursimar Mar 30, 2026
4fde34d
fix(engine): remove duplicate trust_remote_code kwarg in MegatronBrid…
Mar 30, 2026
821468c
fix(dataloader): prevent data drop and padding during validation for …
Anguo-star Mar 30, 2026
de50ba5
fix(archon): add missing POST /data/batch endpoint to data proxy (#1105)
Mar 30, 2026
01b87d8
refactor(engine): abstract CUDA calls via current_platform in PerLaye…
guozhihao-224 Mar 30, 2026
86c213f
feat(fsdp): pipeline weight sync with single pending bucket (#1074)
HT-Yuan Mar 30, 2026
dbf17bb
fix(engine): restore SGLang VLM training (#1098)
garrett4wade Mar 31, 2026
1fd25e4
feat(archon): add FP8 blockwise training support (#1087)
Mar 31, 2026
65fe827
chore(ci): update GCP CI image (#1115)
garrett4wade Mar 31, 2026
a6d29af
feat(inference-service): complete vLLM backend support in inference s…
garrett4wade Mar 31, 2026
9613520
fix(archon): harden FP8 blockwise training for TP and MoE scenarios (…
Mar 31, 2026
a97de63
feat(inference_service): add VLM image input support to OpenAI-compat…
garrett4wade Apr 1, 2026
5056acc
feat(utils): add Trackio experiment tracking backend (#1113)
guozhihao-224 Apr 1, 2026
017a1c5
refactor(infra): decompose rpc_server into shared guard + blueprints …
garrett4wade Apr 1, 2026
ba3f8ba
refactor(agents): redesign review-pr taxonomy and sync flow (#1124)
Apr 1, 2026
17c9d3d
feat(infra): add client-side fetch buffer for RTensor (#1122)
guozhihao-224 Apr 1, 2026
8162aea
chore: fix gcp image (#1130)
Apr 2, 2026
ec581b0
docs: add Trackio configuration to CLI reference (#1131)
Apr 2, 2026
2b6a6e1
feat(service): support online inference service (#1121)
Apr 2, 2026
4d822d9
fix(engine): tree attention broke due to indentation bug in megatron-…
gursimar Apr 3, 2026
dd53733
feat(experimental): add vllm fallback for inference service demos (#1…
Apr 7, 2026
6457d6b
fix(api): add mode validation for WandBConfig and SwanlabConfig (#1134)
guozhihao-224 Apr 7, 2026
fd7d05b
feat: enable LoRA RL-training in Megatron via megatron-bridge (#1123)
gursimar Apr 7, 2026
37fb695
fix: harden padded distributed eval across training engines (#1109)
Apr 8, 2026
262734a
feat(ci): separate vllm and sglang pyproject.toml (#1141)
garrett4wade Apr 8, 2026
2903ea4
fix(engine): reset mm cache after vllm generation pause (#1144)
Adiactive Apr 8, 2026
3ed5a36
fix(ci): sync uv.vllm.lock with the current pyproject.vllm.toml (#1146)
garrett4wade Apr 8, 2026
40c6f56
fix(vllm_ext): XCCL lora weights update when PP>1 by buffering and me…
gursimar Apr 8, 2026
817dc25
chore: fix pre-commit (#1148)
garrett4wade Apr 8, 2026
f7abd39
Fix grad norm hang when LoRA frozen ranks have no gradients (#1139)
JiwaniZakir Apr 8, 2026
b1defc5
feat(infra): add distributed data loading service (#1120)
garrett4wade Apr 8, 2026
ca2c3b9
refactor(infra): standardize list-first trajectory batch dispatch (#1…
garrett4wade Apr 9, 2026
a9c01ad
feat(infra): allow colocation with offloading and disk weight updates…
garrett4wade Apr 10, 2026
3ca2802
refactor: replace manual JSON parsing with Pydantic models (#1154)
koladefaj Apr 13, 2026
e67a800
fix(engine): FSDP compute_logp fails for Qwen3.5 with dict attention_…
pratyush618 Apr 13, 2026
c38b0f1
chore: enforce license (#1170)
garrett4wade Apr 13, 2026
d4ddbec
chore: enforce license (#1171)
garrett4wade Apr 13, 2026
33ae929
fix: add missing pre-commit check file (#1173)
garrett4wade Apr 13, 2026
0bd4780
chore: add project governance for PyTorch ecosystem (#1174)
garrett4wade Apr 14, 2026
3d30fa6
feat(infra): add microservice-based training service (controller v2) …
garrett4wade Apr 14, 2026
8599100
chore: renew qrcode (#1184)
garrett4wade Apr 14, 2026
a1cc27d
feat(service): support multi-node inference in gateway controller (#1…
guozhihao-224 Apr 15, 2026
9313c00
feat(service): add agent service Controller, Guard, and Claude Agent …
CormickKneey Apr 15, 2026
31a303d
fix _update_weights_from_disk function to prevent training to be stuc…
asif07hossain Apr 16, 2026
5250559
refactor: mount data blueprint via WSGI and adopt Pydantic in engine …
koladefaj Apr 16, 2026
33c3a39
fix(engine): use meta device for non-rank-0 in FSDP memory_efficient_…
yulangz Apr 16, 2026
d02ab18
ci: parallelize unit and integration tests across 4 GPU instances (#1…
Apr 16, 2026
864349d
chore: dump v1.0.3 (#1191)
garrett4wade Apr 16, 2026
17e4331
fix: FSDP initialization for set-valued wrap class names (#1187)
Wangxiaoxiaoa Apr 16, 2026
c635cc8
chore: move figures into assets/figures/ and add community meeting fo…
garrett4wade Apr 16, 2026
42a87b1
feat(engine): lora support for MoE models (single node/ cross node) (…
gursimar Apr 17, 2026
555c190
fix: handle integer device ids in ray rpc server (#1199)
Wangxiaoxiaoa Apr 17, 2026
4e654e6
chore: add @CormickKneey as maintainer and agent_service codeowner (#…
garrett4wade Apr 17, 2026
de3f597
fix: serialize ray object refs in rpc payloads (#1198)
Wangxiaoxiaoa Apr 17, 2026
6b401f9
[Fix](Service):fix data service failures in IPv6-only environments wi…
TaoZex Apr 19, 2026
05da122
feat(service): add external model API support for inference service (…
Apr 20, 2026
0ede08c
feat: add scaffolding rollout workflow (#1064)
WeiHaocheng Apr 20, 2026
cf21940
feat(api): add unified RejectionSamplingConfig for async training (#1…
guozhihao-224 Apr 20, 2026
6b417dd
feat(utils): add Karmarkar-Karp partitioning algorithm for sequence p…
TaoZex Apr 20, 2026
fceafd0
fix(infra): move data service seed to worker-level config (#1210)
garrett4wade Apr 20, 2026
d291e54
docs(community): add first biweekly meeting record and news entry (#1…
garrett4wade Apr 20, 2026
8caa882
chore: update tencent meeting link (#1219)
garrett4wade Apr 21, 2026
0c9e35a
chore: add new maintainers (#1220)
garrett4wade Apr 21, 2026
5006bf8
refactor(service): extract inference bridge backends into sglang/vllm…
garrett4wade Apr 21, 2026
3e69cb5
gov: add maintainer (#1227)
garrett4wade Apr 22, 2026
c128de7
feat: add awex backend for weight update (#1214)
garrett4wade Apr 22, 2026
9f04982
chore(deps): upgrade awex to 0.7.0 (#1228)
garrett4wade Apr 22, 2026
2eca7bb
perf(trainer): reduce redundant offload/onload transitions in trainin…
yxs Apr 22, 2026
8c8477f
feat(eval): support for running eval before training (#1232)
gursimar Apr 23, 2026
6d9a9bf
chore: add new maintainer (#1234)
garrett4wade Apr 23, 2026
c336f66
gov: add maintainer (#1235)
garrett4wade Apr 23, 2026
4a8a1b7
chore: update news for scaffoldings (#1236)
garrett4wade Apr 23, 2026
310fe31
feat(engine): add built-in memory profiler support and avoid gatherin…
yulangz Apr 23, 2026
81f2f8a
feat(experimental): add MegatronEngine awex weight update adapter wit…
ran-yan-hk Apr 23, 2026
4c8b11d
feat: add disk-mode weight update flow to gateway (#1237)
garrett4wade Apr 23, 2026
efc7ad2
feat: add CISPO loss function from MiniMax-M1
Apr 27, 2026
7c2e26a
feat: add CISPO loss function from MiniMax-M1
Apr 27, 2026
298cdb3
fix: restore cli_args.py and reapply CISPO config fields
Apr 29, 2026
ee00df9
fix: restore and reapply CISPO implementation correctly
Apr 29, 2026
414e666
Fixing sh files to run Slurm jobs
Apr 29, 2026
a211676
remove large whl file, add to gitignore
Apr 29, 2026
f7759d8
add experiment scripts and plotting
Apr 29, 2026
9ee0e40
10 epochs + Training Accuracy Tracking script
Apr 30, 2026
0102035
M2PO tests, infinite trust region tests, and updated plotting code
danielkiely May 1, 2026
19bb647
added m2po to final script
danielkiely May 1, 2026
b9328d3
Rerunning failed scripts and decreased batch size to 32
May 2, 2026
bb3f67e
Ran wrong experiments - v3 is correct script now
May 2, 2026
70958eb
reduced batch size, fixed M2PO, and fixed path error in no_trust_regi…
danielkiely May 2, 2026
13a26db
plot evals
danielkiely May 4, 2026
72cbc5f
Final edits
May 6, 2026
a002223
Merge branch 'main' into feature/cispo-algorithm
danielkiely May 11, 2026
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
Empty file added --bind
Empty file.
Empty file added --config
Empty file.
Empty file added --env
Empty file.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -203,3 +203,7 @@ wandb/
outputs/
sympy/
!/docs/figures/*
*.whl

# Apptainer
areal.sif
Binary file added Python-3.12.7.tgz
Binary file not shown.
Empty file added actor.backend=fsdp:d1p1t1
Empty file.
Empty file added actor.cispo_epsilon_high=1.2
Empty file.
Empty file added actor.path=
Empty file.
Empty file added actor.use_cispo_loss=true
Empty file.
11 changes: 11 additions & 0 deletions areal/api/cli_args.py
Original file line number Diff line number Diff line change
Expand Up @@ -1469,6 +1469,17 @@ class PPOActorConfig(TrainEngineConfig):
metadata={"help": "SAPO temperature for negative advantages"},
)


# CISPO (Clipped IS-weight Policy Optimization) - MiniMax-M1
use_cispo_loss: bool = field(
default=False,
metadata={"help": "Use CISPO loss (clipped importance sampling weight, detached)"},
)
cispo_epsilon_high: float = field(
default=1.2,
metadata={"help": "CISPO upper clamp for importance sampling weight"},
)

# Asynchronous RL
recompute_logprob: bool = field(
default=False,
Expand Down
17 changes: 15 additions & 2 deletions areal/trainer/ppo/actor.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
ppo_actor_loss_fn,
reward_overlong_penalty,
sapo_loss_fn,
cispo_loss_fn,
)
from areal.utils.perf_tracer import trace_perf

Expand Down Expand Up @@ -355,6 +356,8 @@ def _ppo_update(self, data: dict[str, Any]) -> None:
importance_sampling_level=self.config.importance_sampling_level,
current_version=current_version,
prox_logp_method=self.config.prox_logp_method,
use_cispo_loss=self.config.use_cispo_loss,
cispo_epsilon_high=self.config.cispo_epsilon_high,
use_sapo_loss=self.config.use_sapo_loss,
sapo_tau_pos=self.config.sapo_tau_pos,
sapo_tau_neg=self.config.sapo_tau_neg,
Expand Down Expand Up @@ -420,6 +423,8 @@ def grpo_loss_fn(
use_sapo_loss: bool = False,
sapo_tau_pos: float = 1.0,
sapo_tau_neg: float = 1.05,
use_cispo_loss: bool = False,
cispo_epsilon_high: float = 1.2,
use_decoupled_loss: bool = False,
vocab_min_logits: torch.Tensor | None = None,
vocab_max_logits: torch.Tensor | None = None,
Expand Down Expand Up @@ -447,8 +452,16 @@ def grpo_loss_fn(
if m2_threshold is not None:
loss_mask = _apply_m2po_masking(old_logp, prox_logp, loss_mask, m2_threshold)

# Use SAPO or PPO loss
if use_sapo_loss:
# Use CISPO, SAPO, or PPO loss
if use_cispo_loss:
loss, stat = cispo_loss_fn(
logprobs=logprobs,
proximal_logprobs=prox_logp,
advantages=advantages,
epsilon_high=cispo_epsilon_high,
loss_mask=loss_mask,
)
elif use_sapo_loss:
if use_decoupled_loss:
raise ValueError(
"SAPO is not compatible with `use_decoupled_loss=True`. "
Expand Down
2 changes: 2 additions & 0 deletions areal/utils/functional/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
ppo_critic_loss_fn,
reward_overlong_penalty,
sapo_loss_fn,
cispo_loss_fn,
)
from areal.utils.functional.vocab_parallel import (
gather_logprobs,
Expand All @@ -23,6 +24,7 @@
"ppo_critic_loss_fn",
"reward_overlong_penalty",
"sapo_loss_fn",
"cispo_loss_fn",
# logprobs.py
"gather_logprobs",
"gather_logprobs_entropy",
Expand Down
34 changes: 34 additions & 0 deletions areal/utils/functional/functional.py
Original file line number Diff line number Diff line change
Expand Up @@ -557,6 +557,40 @@ def ppo_actor_loss_fn(
return pg_loss, stat


def cispo_loss_fn(
logprobs: torch.Tensor,
proximal_logprobs: torch.Tensor,
advantages: torch.Tensor,
epsilon_high: float,
loss_mask: torch.Tensor,
) -> tuple[torch.Tensor, dict]:
"""CISPO (Clipped IS-weight Policy Optimization) loss from MiniMax-M1.

Instead of clipping the policy ratio like PPO/GRPO, CISPO clips the
importance sampling weight and detaches it, ensuring all tokens
(including rare reflective tokens) contribute gradients.

Loss = -clamp(exp(logp_new - logp_prox), max=epsilon_high).detach() * adv * logp_new
"""
loss_mask_count = loss_mask.count_nonzero() or 1

log_ratio = torch.where(loss_mask, logprobs - proximal_logprobs, 0.0)
is_weight = torch.exp(log_ratio)
clamped_weight = torch.clamp(is_weight, max=epsilon_high).detach()

pg_loss = -clamped_weight * advantages * logprobs
pg_loss = torch.where(loss_mask, pg_loss, 0).sum() / loss_mask_count

stat = dict(
loss=(-clamped_weight * advantages * logprobs).detach(),
importance_weight=is_weight.detach(),
approx_kl=(logprobs - proximal_logprobs).detach(),
clip_mask=torch.zeros_like(loss_mask),
dual_clip_mask=torch.zeros_like(loss_mask),
)
return pg_loss, stat


def sapo_loss_fn(
logprobs: torch.Tensor,
old_logprobs: torch.Tensor,
Expand Down
Empty file added cluster.n_gpus_per_node=2
Empty file.
Empty file added cluster.n_nodes=1
Empty file.
Empty file added examples/--config
Empty file.
189 changes: 189 additions & 0 deletions examples/math/gsm8k_grpo_zaratan.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
experiment_name: gsm8k-grpo
trial_name: trial0

seed: 1
enable_offload: false
total_train_epochs: 10
tokenizer_path: ${actor.path}

cluster:
n_nodes: 1
n_gpus_per_node: 8
fileroot: /tmp/areal/experiments
name_resolve:
type: nfs
nfs_record_root: /tmp/areal/name_resolve


scheduler:
type: null

rollout:
backend: "sglang:d4p1t1"
experiment_name: ${experiment_name}
trial_name: ${trial_name}
max_concurrent_rollouts: 256
queue_size: null
consumer_batch_size: ${train_dataset.batch_size}
max_head_offpolicyness: 2
enable_rollout_tracing: false
scheduling_spec: ${actor.scheduling_spec}
fileroot: ${cluster.fileroot}
tokenizer_path: ${tokenizer_path}
dump_to_file: true

gconfig:
n_samples: 4
min_new_tokens: 0
max_new_tokens: 1024
greedy: false
temperature: 1.0

actor:
backend: "fsdp:d4p1t1"
experiment_name: ${experiment_name}
trial_name: ${trial_name}
path: Qwen/Qwen2.5-1.5B-Instruct
init_from_scratch: false
disable_dropout: true
gradient_checkpointing: true
dtype: bfloat16
mb_spec:
max_tokens_per_mb: 10240
packing_algorithm: ffd
optimizer:
type: adam
lr: 1.70e-5
weight_decay: 0.017
beta1: 0.9
beta2: 0.999
eps: 1e-8
lr_scheduler_type: constant
gradient_clipping: 1.0
warmup_steps_proportion: 0.001
eps_clip: 0.4
temperature: ${gconfig.temperature}
reward_scaling: 10.0
reward_bias: -0.5
kl_ctl: 0.0
ppo_n_minibatches: 1
recompute_logprob: true
use_decoupled_loss: true
rejection_sampling:
metric: ratio
upper: 5.0
reward_norm:
mean_level: group
std_level: group
group_size: ${gconfig.n_samples}
adv_norm:
mean_level: batch
std_level: batch
weight_update_mode: xccl
max_new_tokens: ${gconfig.max_new_tokens}
scheduling_spec:
- task_type: worker
port_count: 2
gpu: 1
mem: 32
cmd: python3 -m areal.infra.rpc.rpc_server
env_vars: {}

ref:
backend: ${actor.backend}
experiment_name: ${experiment_name}
trial_name: ${trial_name}
path: ${actor.path}
init_from_scratch: false
disable_dropout: true
dtype: ${actor.dtype}
mb_spec:
max_tokens_per_mb: 10240
packing_algorithm: ffd
optimizer: null
scheduling_strategy:
type: colocation
target: actor
scheduling_spec: ${actor.scheduling_spec}

# SGLang
sglang:
model_path: ${actor.path}
random_seed: ${seed}
skip_tokenizer_init: true
dtype: ${actor.dtype}
max_running_requests: null
context_length: 32768
mem_fraction_static: 0.8

vllm:
model: ${actor.path}
seed: ${seed}
skip_tokenizer_init: false
dtype: ${actor.dtype}
max_model_len: 32768
gpu_memory_utilization: 0.8

# datasets
train_dataset:
batch_size: 256
shuffle: true
pin_memory: true
num_workers: 4
path: openai/gsm8k
split: train
dataset_kwargs:
name: main
type: rl
max_length: 1024

valid_dataset:
batch_size: 256
pin_memory: true
num_workers: 4
path: openai/gsm8k
split: test
dataset_kwargs:
name: main
type: rl

# Utilities
saver:
experiment_name: ${experiment_name}
trial_name: ${trial_name}
fileroot: ${cluster.fileroot}
freq_epochs: 1
freq_steps: null
freq_secs: null

recover:
mode: disabled
experiment_name: ${experiment_name}
trial_name: ${trial_name}
fileroot: ${cluster.fileroot}
freq_epochs: 1
freq_steps: null
freq_secs: 3600

evaluator:
experiment_name: ${experiment_name}
trial_name: ${trial_name}
fileroot: ${cluster.fileroot}
freq_epochs: 1
freq_steps: null
freq_secs: null

stats_logger:
experiment_name: ${experiment_name}
trial_name: ${trial_name}
fileroot: ${cluster.fileroot}
wandb:
mode: disabled

perf_tracer:
experiment_name: ${experiment_name}
trial_name: ${trial_name}
fileroot: ${cluster.fileroot}
enabled: false
session_tracer:
enabled: false
Empty file added examples/scheduler.type=local
Empty file.
Empty file added experiment_name=cispo_eta2
Empty file.
Loading