mirror of
https://github.com/deepseek-ai/DeepEP.git
synced 2026-11-05 00:47:32 +00:00
[GH-ISSUE #82] Benchmark test over RoCE network #74
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#74
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?
Originally created by @yanminjia on GitHub (Mar 19, 2025).
Original GitHub issue: https://github.com/deepseek-ai/DeepEP/issues/82
We ran test_internode.py over RoCE network with 4 H800 servers with 8 GPUs as per one server. But the test result is pretty poor by comparing with the case of 4 H800-servers on IB network.
case#1, 4 H800 servers on IB network

case#2, 4 H800 servers on RoCE nework
I am not sure if we have the benchmark test result on RoCE network. Additionally, it would be highly appreciated if any comment.
Many thanks.
@sphish commented on GitHub (Mar 19, 2025):
@yanminjia commented on GitHub (Mar 19, 2025):
Adaptive routing is not enabled on our RoCE network. In fact, adaptive routing is not always available on RoCE network. Additionally, based on my understanding, adaptive routing is used for better traffic balance based on per-packet hashing on the switch side. And I don't think it can resolve the congestion problem. After all, in case of the traffic behavior of DeepEP, the traffic from multiple rdma_ranks will go into the same target rdma_rank even if adaptive routing is enabled.
@sphish commented on GitHub (Mar 19, 2025):
Even though traffic from multiple rdma_ranks flows into the same destination rdma_rank, congestion won't occur as long as the traffic is distributed evenly. In DeepEP, the main causes of uneven traffic distribution are:
The latter two factors aren't significant in our test cases. In our experiments, we found that once you enable adaptive routing to address the uneven routing issue, we observe almost no congestion when running
test_internode.py. However, ECMP (Equal-Cost Multi-Path) routing almost always results in routing collisions.@sphish commented on GitHub (Mar 19, 2025):
We tested an early version of DeepEP (without atomic operations) on a RoCE network. When using the default ECMP routing, we also observed huge performance degradation. However, after switching to static routing, the performance became nearly identical to that of InfiniBand.
@yanminjia commented on GitHub (Mar 19, 2025):
I think congestion would happen if traffic of multiple rdma_ranks goes into the same target rdma_rank at the same time unless some kind of traffic scheduling mechanism was implemented in DeepEP. Therefore, Maybe the congestion is mitegated by the credit based link-level flow control on IB network.
@yanminjia commented on GitHub (Mar 19, 2025):
We can test this case with the 4 GPU servers within the same L2 network block if the environment is available. So the traffic will not be ECMP routed. Based on my understanding, the RDMA communication in DeepEP is restricted the GPUs with the same order on different GPU servers.
@VoidStardust commented on GitHub (Mar 25, 2025):
Hello,
We also test
test_internode.pyover RoCE network with 4 H800 servers, each equipped with 8 GPUs and 8 dual-port CX7 RNICs. We got similar throughput, about half of the throughput of IB:However, we have not yet modified IBRC in nvshmem to support dual port CX7, as mentioned in https://github.com/deepseek-ai/DeepEP/issues/74. @yanminjia Could you confirm whether the proposed modification to IBRC to enable dual-port utilization is valid and expected to improve performance? Additionally, if there are any specific considerations or potential risks associated with this change, please advise.
Thank you for your guidance!
@yanminjia commented on GitHub (Mar 26, 2025):
In theory, it should improve performance. After all, only half bandwidth is utilized with the current nvshmem code in case of dual-port CX7. As #74 mentioned, should ensure the rma traffic and the associated amo operation with same channel in the same qp. Otherwise, DeepEP would hang.
@yanminjia commented on GitHub (Mar 26, 2025):
@sphish we tested 4 H100 servers located in the same block over RoCE network, in this case, the traffic reaches the target GPUs by going through layer 2 network instead of being routed to the spine switches with ECMA mechanism. But the performance is still bad by comparing to IB network.
Therefore, based on my understanding, in essence, dispatch or combine of DeepEP is equivalence of a AlltoAll communication. The congestion has significant impact on the DeepEP performance. From our observation, basically, the performance of DeepEP is consistent to the performance of AlltoAll over RoCE network. For example, if we mitigate the congestion by tuning the parameters of DCQCN, the performance of DeepEP and AlltoAll will become better.
@sphish commented on GitHub (Mar 26, 2025):
Have you observed any congestion in your NIC counters?
Additionally, I suggest you try this version(e995aa22db1f5d204e5841cc8e73c670c772494b) to see if atomic operations are causing the performance degradation.
@yanminjia commented on GitHub (Mar 26, 2025):
Yes, indeed. If multiple senders transfer data to a single receiver at the same time, on the leaf switch, congestion will happen on the egress port connecting to the receiver in case of RoCE network.
The latest code is used.
@sphish commented on GitHub (Mar 26, 2025):
I see. This does indeed differ from what we have observed.
I mean you can try the early version.
@yanminjia commented on GitHub (Mar 26, 2025):
Please note RoCE is pretty different from IB with respect to flow control. I'm quite surprised if you guys didn't see any traffic congestion when run DeepEP over RoCE. Basically, I have thought the DeepEP traffic sent to the experts is scheduled elaborately to prevent congestion. But I didn't discover this kind of mechanism by checking the DeepEP code. I believe it's the congestion that leads to the performance degradation based on our experiments. Possibly, we could figure out a smart traffic scheduling mechanism to fix this problem in case of RoCE network.
@sphish commented on GitHub (Mar 26, 2025):
Due to the short communication time per round in DeepEP, traffic scheduling is difficult to implement. Instead, we eliminate congestion by evenly spreading traffic. DeepEP incorporates multiple mechanisms to accomplish this.
We have indeed tested this approach on RoCE networks without observing congestion, which may also be related to the PFC
watermark configuration and the buffer size of the switches.
@yanminjia commented on GitHub (Mar 26, 2025):
Hi @sphish , by the way, do you have the test result on RoCE network? I'm a little bit confused why PFC is configured if no congestion caused by DeepEP traffic.
@yanminjia commented on GitHub (Mar 26, 2025):
Many thanks. Added you to my weChat contact list. :)
@Aleda commented on GitHub (Apr 9, 2025):
@yanminjia @sphish
We had a similar question when benchmarking DeepEP.
May I ask if there have been any recent updates on this issue that you could share?
Thanks.