Skip to content

Fix DeepCompile ZeRO-3 gathered parameter ownership#8157

Open
tohtana wants to merge 4 commits into
deepspeedai:masterfrom
tohtana:tohtana/deepcompile-z3-gather-ownership
Open

Fix DeepCompile ZeRO-3 gathered parameter ownership#8157
tohtana wants to merge 4 commits into
deepspeedai:masterfrom
tohtana:tohtana/deepcompile-z3-gather-ownership

Conversation

@tohtana

@tohtana tohtana commented Jul 19, 2026

Copy link
Copy Markdown
Collaborator

Problem

DeepCompile inserts ZeRO-3 parameter all-gather and release operations into compiled graphs. When Dynamo skips a frame because of a graph break, however, that frame executes eagerly and does not run those graph operations. The eager fallback introduced in #8059 handles this case by all-gathering a partitioned parameter when the skipped frame accesses it through ZeROOrderedDict.

The fallback is enabled around DeepSpeedEngine.forward(). Dynamo guard evaluation occurs inside that outer forward context and also resolves parameters through ZeROOrderedDict, while torch.compiler.is_compiling() is false. The fallback could therefore mistake a guard lookup for actual eager execution and unnecessarily all-gather the parameter.

Parameters gathered by the fallback are normally partitioned after backward, but that cleanup does not run when backward is skipped. A fallback-gathered parameter may also be passed to an explicit GatheredParameters context, which must keep the full tensor available until the context exits.

Why it matters

These cases require different behavior:

  • Dynamo guard evaluation should not trigger an all-gather.
  • A parameter gathered for an eagerly executed frame must remain available through backward and then be partitioned.
  • If backward does not run, a leftover full parameter must be partitioned before the next outermost forward.
  • A parameter covered by GatheredParameters must remain fully gathered until that context exits.

Without distinguishing these cases, a full parameter can remain allocated into a later forward, or fallback cleanup can partition it while a GatheredParameters block is still using it.

Solution

This PR:

  • detects parameter access during Dynamo guard evaluation and skips the eager fallback all-gather;
  • partitions leftover nonpersistent full parameters before the next outermost forward when the normal post-backward cleanup did not run;
  • removes a parameter from fallback cleanup when it is passed to GatheredParameters, so that context alone partitions it on exit;
  • restores the GatheredParameters state even when context exit raises; and
  • rejects nested GatheredParameters contexts that overlap on the same parameter, while continuing to allow nesting over disjoint parameter sets.

Signed-off-by: Masahiro Tanaka <mtanaka@anyscale.com>
@tohtana tohtana changed the title Fix DeepCompile ZeRO-3 gathered parameter ownership [DC patch 1/4] Fix DeepCompile ZeRO-3 gathered parameter ownership Jul 20, 2026
Signed-off-by: Masahiro Tanaka <mtanaka@anyscale.com>
@tohtana
tohtana marked this pull request as ready for review July 22, 2026 21:31
@tohtana
tohtana requested review from loadams and tjruwase as code owners July 22, 2026 21:31

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 4563ff10f8

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread deepspeed/compile/z3_eager_fallback.py
Signed-off-by: Masahiro Tanaka <mtanaka@anyscale.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant