Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
2d2b7e6
[dist, trainer, config, docs] feat: add MindSpeed-style async activat…
YLlllllllllll Jul 23, 2026
e5a565e
[dist, config] fix: fail closed on invalid async offload setup
YLlllllllllll Jul 23, 2026
b8e71f1
[dist] style: normalize async offload sources
YLlllllllllll Jul 23, 2026
f9cc2c8
[dist] fix: address async offload review
YLlllllllllll Jul 27, 2026
ce44a34
[dist, config, docs] feat: auto-discover async offload modules
YLlllllllllll Jul 28, 2026
b501786
fix: harden async activation offload
YLlllllllllll Jul 29, 2026
debfd0e
fix: harden async activation offload review issues
YLlllllllllll Aug 10, 2026
3e94ca9
fix: preserve async offload module discovery
YLlllllllllll Aug 10, 2026
00c254a
fix: use device abstraction in async activation offload
YLlllllllllll Aug 11, 2026
a426e5a
Merge branch 'main' into feat/async-activation-offload
YLlllllllllll Aug 12, 2026
f679aaa
[dist] fix: bound async offload host cache
YLlllllllllll Aug 12, 2026
cc08c30
[dist] merge: resolve async offload conflicts against current main
YLlllllllllll Aug 26, 2026
cee8474
[dist] fix: allow repeated unpack of async-offloaded activations
YLlllllllllll Aug 26, 2026
a0f3a4b
[dist] fix: offload tensors with expandable-segment padding
YLlllllllllll Aug 26, 2026
446e51a
[dist] style: satisfy ruff format on SwapTensor storage check
YLlllllllllll Aug 26, 2026
c8c628e
[dist] fix: host-sync D2H before freeing swapped storage
YLlllllllllll Aug 26, 2026
c137b56
[dist] fix: detach swapped tensors without resizing shared storage
YLlllllllllll Aug 26, 2026
ea36423
[dist] fix: pack hidden-state views and restore unpack-twice coverage
YLlllllllllll Aug 27, 2026
634b32b
[dist] test: pack peak-memory path through GradientCheckpointingLayer
YLlllllllllll Aug 27, 2026
5c552c7
[trainer] refactor: reset async offload from train_step, not on_step_…
YLlllllllllll Aug 27, 2026
ff5271a
[dist] test: stub async-offload reset on VLM compile train_step
YLlllllllllll Aug 28, 2026
962f7e7
[dist] merge: resolve async offload conflicts against current main
YLlllllllllll Aug 28, 2026
6e78da1
[trainer] fix: skip async-offload reset when offload_config is absent
YLlllllllllll Aug 28, 2026
e966983
[trainer] fix: default missing offload_config on every trainer path
YLlllllllllll Aug 29, 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
1 change: 1 addition & 0 deletions .agents/knowledge/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ veomni/
│ ├── parallel_state.py init_parallel_state(), ParallelState, device mesh setup
│ ├── torch_parallelize.py build_parallelize_model(), parallelize_model_fsdp2()
│ ├── parallel_plan.py ParallelPlan for ExtraParallel (EP, embedding shard)
│ ├── async_offload.py Async activation offload (SwapTensor, OffloadManager, async_save_on_cpu)
│ ├── fsdp2/ FSDP2 (composable fully_shard), gradient clipping
│ ├── moe/ MoE expert parallelism: token routing, all-to-all, EPGroupGemm
│ └── sequence_parallel/ Ulysses SP: all-to-all head/seq exchange, async variants
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/gpu_unit_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,7 @@ jobs:
uv run --frozen pytest -s -x tests/checkpoints/test_trainer_saveload.py
- name: Run distributed tests
run: |
uv run --frozen pytest -s -x tests/distributed/test_async_offload_unit.py
uv run --frozen pytest -s -x tests/distributed/test_dummy_forward.py
uv run --frozen pytest -s -x tests/distributed/test_torch_compile.py
- name: Run data tests
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/npu_unit_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ jobs:
uv run --frozen pytest -v -s -x tests/checkpoints/test_trainer_saveload.py
- name: Run distributed tests (dummy_forward)
run: |
uv run --frozen pytest -v -s -x tests/distributed/test_async_offload_unit.py
uv run --frozen pytest -v -s -x tests/distributed/test_dummy_forward.py
- name: Run data tests
run: |
Expand Down
14 changes: 13 additions & 1 deletion docs/usage/arguments.md
Original file line number Diff line number Diff line change
Expand Up @@ -439,8 +439,20 @@ distinct from the first emission.

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| enable_activation | `bool` | `False` | Enable activation offload to CPU. |
| enable_activation | `bool` | `False` | Enable synchronous activation offload to CPU. |
| activation_gpu_limit | `float` | `0.0` | GB of activations allowed to remain on GPU. |
| enable_async_activation | `bool` | `False` | Enable async activation offload via stream-based D2H/H2D. Mutually exclusive with `enable_activation`. When `activation_offload_modules` is empty, targets are discovered from `model._no_split_modules`; missing or unmatched model metadata fails closed. |
| activation_offload_modules | `List[str]` | `[]` | Optional module name patterns for async offload, overriding `_no_split_modules` auto-discovery. Supports segment-aware glob (`model.layers.*` matches direct children only) and `{*}` for sequential groups (`model.layers.{*}`). |
| activation_offload_host_cache_limit_gb | `float` | `4.0` | Maximum GB of free host buffers retained between steps. In-flight offloads may temporarily exceed this value. Set to `0` to disable reuse. |

Async activation offload is enabled for CUDA/NPU tensors only; CPU tensors pass
through unchanged. Only private, dense, contiguous activations are swapped so
shared-storage views are never resized. Host buffers are pooled per model,
keyed by shape, stride, and dtype, and evicted by least-recently-used layout to
enforce `activation_offload_host_cache_limit_gb`. The manager is reset at every training-step
boundary, including before a step after a failed forward/backward, so stale
autograd keys cannot affect the next step. The path wraps selected module instances
and is not intended to be captured by `torch.compile`.

### CheckpointConfig

Expand Down
Loading
Loading