mirror of
https://github.com/deepseek-ai/DeepEP.git
synced 2026-11-05 00:47:32 +00:00
[PR #732] Add unordered hybrid kernels for transports without ordered delivery (opt-in via EP_HYBRID_KERNEL) #738
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#738
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/732
Author: @Xuan-1998
Created: 8/21/2026
Status: 🔄 Open
Base:
main← Head:unordered-kernels📝 Commits (7)
43d5a7agin: add GIN context creation and signal layout3c34f91dispatch: batch puts with in-band headers for unordered delivery4871aa5combine: gate returns on counting signals for unordered delivery48ddffffeat: add EP_HYBRID_KERNEL toggle between ordered and unordered kernels5de2504fix: resolve the GIN context count on the single-node path00b0697feat(qp): clamp unordered num_allocated_qps to [2, 17] with a warning8d743bcdocs(readme): document hybrid kernel variants and AWS EFA support📊 Changes
21 files changed (+3230 additions, -88 deletions)
View changed files
📝
README.md(+23 -0)📝
csrc/elastic/buffer.hpp(+146 -13)📝
csrc/kernels/backend/api.cuh(+14 -0)📝
csrc/kernels/backend/nccl.cu(+85 -5)📝
csrc/kernels/elastic/combine.hpp(+80 -9)📝
csrc/kernels/elastic/dispatch.hpp(+85 -2)➕
csrc/kernels/elastic/kernel_select.hpp(+55 -0)📝
csrc/python_api.cpp(+5 -0)📝
deep_ep/buffers/elastic.py(+57 -13)📝
deep_ep/include/deep_ep/common/comm.cuh(+78 -22)📝
deep_ep/include/deep_ep/common/compiled.cuh(+18 -0)➕
deep_ep/include/deep_ep/common/gin_resource_alloc.cuh(+170 -0)📝
deep_ep/include/deep_ep/common/layout.cuh(+34 -6)📝
deep_ep/include/deep_ep/common/ptx.cuh(+39 -0)➕
deep_ep/include/deep_ep/common/qp_mapping.cuh(+123 -0)📝
deep_ep/include/deep_ep/impls/combine_reduce_epilogue.cuh(+73 -14)📝
deep_ep/include/deep_ep/impls/combine_utils.cuh(+41 -0)➕
deep_ep/include/deep_ep/impls/hybrid_combine_unordered.cuh(+895 -0)➕
deep_ep/include/deep_ep/impls/hybrid_dispatch_unordered.cuh(+1106 -0)📝
deep_ep/include/deep_ep/impls/pp_send_recv.cuh(+14 -4)...and 1 more files
📄 Description
The hybrid (scale-out) dispatch/combine kernels synchronize through a trailing tail signal: the receiver assumes that when the tail arrives, all data written before it has landed. This holds on transports with ordered delivery and VA/strong signal support (e.g. IB RC), but not on unordered transports such as AWS EFA (SRD), it can be overcome with proxy thread but will hurt the performance. This PR adds an alternative kernel pair that only needs weak signals, so DeepEP's hybrid mode can run on those transports.
The default behavior is unchanged:
EP_HYBRID_KERNELdefaults toordered, which runs the existing kernels under the existing communication configuration, untouched and under their original file names. SettingEP_HYBRID_KERNEL=unorderedselects the new pair.🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.