mirror of
https://github.com/deepseek-ai/DeepEP.git
synced 2026-11-05 00:47:32 +00:00
[PR #375] [MERGED] [Feature] Support normal mode for non-nvlink environment #543
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#543
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/375
Author: @zhou9402
Created: 8/25/2025
Status: ✅ Merged
Merged: 9/25/2025
Merged by: @jershi425
Base:
hybrid-ep← Head:pcie📝 Commits (10+)
b5eab60add PCIE5277b0dfor sender architecturebd91666Revert "for sender architecture"9e2acbesender pesudocode5e0b78fmerge9cd706bremove is_token_in_rank,added topk_ranks_idx04bafa0add deepep_cpp pcie dispatch57bb2e6internode_dispatcCh_sender:use topk_idx to get dst_rank for simplicityb805c0eAdd notify_dispatch_pcie for non-nvlink GPU3ff8113fix📊 Changes
15 files changed (+2046 additions, -63 deletions)
View changed files
📝
README.md(+3 -0)📝
csrc/config.hpp(+25 -0)📝
csrc/deep_ep.cpp(+385 -15)📝
csrc/deep_ep.hpp(+20 -1)📝
csrc/kernels/CMakeLists.txt(+2 -1)📝
csrc/kernels/api.cuh(+45 -1)📝
csrc/kernels/internode.cu(+1 -3)📝
csrc/kernels/launch.cuh(+1 -0)➕
csrc/kernels/pcie.cu(+1146 -0)📝
csrc/kernels/runtime.cu(+2 -2)📝
deep_ep/buffer.py(+97 -7)📝
deep_ep/utils.py(+34 -32)➕
docs/README_PCIe.md(+63 -0)📝
setup.py(+4 -1)➕
tests/test_normal_without_nvl.py(+218 -0)📄 Description
Description
DeepEP was originally designed for high-end data center GPUs with NVLink connectivity. However, many GPU configurations lack NVLink support, such as RTX professional series cards and consumer GPUs. This PR extends DeepEP to support non-NVLink environments.
Design
1D Communication Architecture: All communication (both intra-node and inter-node) is routed exclusively through the RDMA NIC, eliminating the complexity of PCIe/RDMA traffic splitting. This unified approach is motivated by several technical considerations:
Bounce Buffer Strategy: To maintain predictable memory usage, we employ an intermediate buffer mechanism, just similar to current normal mode implementation. These buffers are pre-registered to the NIC to optimize RDMA transfer performance while preventing excessive memory consumption.
NOTE: The current PCIE mode supports communication with up to 32 ranks.
Performance
Enviroment
Result

Current Progress
Now we have added a flag
allow_nvlink_for_normal_modeto the Python interface that allows users to select the transport path. However, we still maintain a separate PCIe kernel implementation on the C++ side. We are working to integrate the PCIe kernel into the existing kernel architecture. Due to differences in buffer allocation and synchronization mechanisms, this will require excessive additional conditional handling indeep_ep.cppor theinternode.cuinterface.We would appreciate your suggestions and feedback regarding this design!
Future work
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.