mirror of
https://github.com/deepseek-ai/DeepEP.git
synced 2026-11-05 00:47:32 +00:00
[PR #730] [Runtime] Preflight full intranode P2P matrix #737
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
deepseek-ai/DeepEP#737
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/deepseek-ai/DeepEP/pull/730
Author: @0z5a
Created: 8/17/2026
Status: 🔄 Open
Base:
main← Head:fix/p2p-preflight📝 Commits (5)
56a639e[Runtime] Preflight full intranode P2P matrixac0b0c8Run yapf and ruff29d1afe[Runtime] Resolve P2P peers by physical GPU identity356cc06[Runtime] Synchronize P2P identity discovery failuresdb8166dMerge main and resolve upstream conflicts📊 Changes
6 files changed (+537 additions, -36 deletions)
View changed files
📝
README.md(+5 -1)📝
deep_ep/buffers/ep.py(+3 -3)📝
deep_ep/utils/envs.py(+126 -32)➕
deep_ep/utils/p2p.py(+108 -0)➕
tests/utils/test_envs_p2p.py(+152 -0)➕
tests/utils/test_p2p.py(+143 -0)📄 Description
Incremental review: Files changed against
main.Fixes #584.
Problem
DeepEP currently reaches CUDA peer setup before validating that every participating intranode GPU can access every other GPU. On partial-P2P hosts this fails on the first unsupported pair, after initialization has already progressed, and does not show the complete incompatible topology.
A rank-local physical-device or node identity discovery failure is also gathered before raising, so other ranks do not wait for a missing participant in the first or next collective.
Changes
CUDA_VISIBLE_DEVICESmasks._C.Bufferallocation and before elastic communicator/buffer setup.48/56unsupported directed pairs).Validation
python -m pytest -q tests/utils/test_p2p.py tests/utils/test_envs_p2p.py— 31 passed. The 20 additional cases exercise the actual preflight with PyTorch/MPI adapters, identity discovery failures, missing UUID properties, deterministic multi-rank errors, successful two-collective execution, and peer-query failures.format.sh, Python bytecode compilation, andgit diff --check— passed.2161508, rank 0 timed out after 6.006 seconds while rank 1 raised locally. With this fix, both ranks reported the same discovery error in about 4.1 ms. Both legacy and elastic constructors were exercised. These are failure-path observations, not performance benchmarks.Current GPU validation (08df5fb)
On an RTX PRO 4000 Blackwell with PyTorch 2.13.0+cu130, using the freshly built SM120 extension:
These checks validate initialization and error propagation. They are not dispatch/combine or model-throughput E2E results. The earlier eight-GPU topology benchmark below was not rerun for this follow-up.
Earlier GPU validation (2161508)
Earlier 8-rank failure-path benchmark (2161508)
Environment: 8x NVIDIA GeForce RTX 5060 Ti, CUDA 13, one NCCL rank per GPU. This PCIe host exposes no off-diagonal CUDA P2P edges, so the real topology is
56/56unsupported directed pairs. Results use 10 warmups and 100 measured iterations; each iteration reports the slowest rank.56/56The benchmark host validates the real distributed all-unsupported failure path. The exact partial-P2P topology from #584 is covered by the
48/56regression test.Scope
This is an initialization-only check. Dispatch and combine hot paths are unchanged.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.