Add affine AutoEP checkpoint placement - #8544
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Jin, Youzhi <youzhi.jin@intel.com>
|
Hi @jinyouzhi thank you for your PR. This PR overall looks good to me, I have two questions:
|
|
Thank you for comments. |
…e-autoep-checkpoint-placement Signed-off-by: Jin, Youzhi <youzhi.jin@intel.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> # Conflicts: # deepspeed/module_inject/auto_ep_layer.py
Persist versioned per-parameter affine maps in AutoEP checkpoint metadata and use them for conversion and restore, while retaining placement descriptors for provenance and legacy checkpoints. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Jin, Youzhi <youzhi.jin@intel.com>
|
I completed an end-to-end loss-resume validation using the DeepSpeedExamples script (deepspeedai/DeepSpeedExamples#1014 ) The experiment trains an uninterrupted 100-step baseline, saves a native checkpoint at step 50, then resumes both directly from the native checkpoint and after ds_to_universal.py conversion. The converter completed the AutoEP ZeRO-3 expert-state consolidation successfully, and all runs had finite loss values. For every resumed step (51–100), the native-resume and Universal-checkpoint-resume losses are exactly identical. Their shared difference from the uninterrupted baseline is max_abs_error=0.1374 and mean_abs_error=0.01052 ; because the native and Universal paths match at every step, this difference is not introduced by the Universal/AffineIR conversion. I attached the loss plot below.
|
Use explicit placement rank IDs for local expert lookup and reject checkpoints whose persisted affine map conflicts with placement provenance. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Jin, Youzhi <youzhi.jin@intel.com>
| @@ -288,19 +336,27 @@ def consolidate_autoep_zero12_expert_states(temp_dir, output_dir, expert_param_i | |||
|
|
|||
There was a problem hiding this comment.
is consolidate_autoep_zero12_expert_states still needed?
There was a problem hiding this comment.
also if it is no longer called, does it mean this functionality is lost? Is it intentionally not called?
Consolidate ZeRO FP32 master expert weights and optimizer states after per-expert model files, and verify native and Universal loss-resume parity for ZeRO stages 1 and 2. Signed-off-by: Jin, Youzhi <youzhi.jin@intel.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Jin, Youzhi <youzhi.jin@intel.com>
|
fix ZeRO1/2 issues and also have a test with ZeRO-2 @delock
|
Remove the unreachable expp_rank optimizer consolidation helper; ZeRO-1/2 optimizer state is handled by the active shard merger. Keep expert-file FP32 fallbacks in the temporary directory and let the merger write each final tensor once. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Jin, Youzhi <youzhi.jin@intel.com>
Head branch was pushed to by a user without write access
Signed-off-by: Jin, Youzhi <youzhi.jin@intel.com>
1a6df6a to
87a00c9
Compare


Follow up #8385
This pull request introduces support for flexible expert placement in DeepSpeed's AutoEP (Automatic Expert Placement) system, enabling non-uniform, non-contiguous, and replicated expert layouts. The main changes add a versioned expert placement descriptor, validation logic, and integration into checkpoint consolidation and metadata validation. This lays the groundwork for more advanced expert scheduling and model parallelism strategies.
The most important changes are:
AutoEP Expert Placement Descriptor and Affine Map Lowering
autoep_affine.pythat defines the expert placement descriptor, validation, legacy uniform descriptor synthesis, and lowering to affine maps for sharded tensor reconstruction. This enables flexible, versioned expert placement beyond the legacy uniform contiguous layout.Integration into Checkpoint Consolidation and Metadata
autoep_universal.pyto:num_local_experts * ep_size == num_expertswhen a placement is provided.Metadata Validation Enhancements
autoep_zero3_metadata.pyto:Documentation Updates
affine_ir_spec.md) to document the new AutoEP placement descriptor, its semantics, and its integration into the IR and runtime, clarifying the distinction between placement provenance and scheduling.Bugfixes and Robustness
affine.pyby skipping empty piece lists during tensor rebuilding, preventing errors when a rank has no assigned pieces.Related: #8252, #8230.