[GH-ISSUE #237] Script tests/test_internode.py fails on ipv6 cluster #183

Closed
opened 2026-10-26 09:55:58 +00:00 by bsakaguchi · 9 comments
Owner

Originally created by @aahouzi on GitHub (Jun 20, 2025).
Original GitHub issue: https://github.com/deepseek-ai/DeepEP/issues/237

Type of issue

  • I tried the provided test scripts for DeepEP on 8 H100x8 nodes with ipv6, and tests/test_intranode.py is successful with the following output:
[config] num_tokens=4096, hidden=7168, num_topk=8
[layout] Kernel performance: 0.048 ms

[testing] Running with BF16, without top-k (async=False, previous=False) ... passed
[testing] Running with BF16, with top-k (async=False, previous=False) ... passed
[testing] Running with BF16, without top-k (async=False, previous=False) ... passed
[testing] Running with BF16, with top-k (async=False, previous=False) ... passed
[testing] Running with FP8, without top-k (async=False, previous=False) ... passed
[testing] Running with FP8, with top-k (async=False, previous=False) ... passed
[testing] Running with BF16, without top-k (async=True, previous=False) ... passed
[testing] Running with BF16, with top-k (async=True, previous=False) ... passed
[testing] Running with BF16, without top-k (async=True, previous=False) ... passed
[testing] Running with BF16, with top-k (async=True, previous=False) ... passed
[testing] Running with FP8, without top-k (async=True, previous=False) ... passed
[testing] Running with FP8, with top-k (async=True, previous=False) ... passed
[testing] Running with BF16, without top-k (async=False, previous=True) ... passed
[testing] Running with BF16, with top-k (async=False, previous=True) ... passed
[testing] Running with BF16, without top-k (async=False, previous=True) ... passed
[testing] Running with BF16, with top-k (async=False, previous=True) ... passed
[testing] Running with FP8, without top-k (async=False, previous=True) ... passed
[testing] Running with FP8, with top-k (async=False, previous=True) ... passed
[testing] Running with BF16, without top-k (async=True, previous=True) ... passed
[testing] Running with BF16, with top-k (async=True, previous=True) ... passed
[testing] Running with BF16, without top-k (async=True, previous=True) ... passed
[testing] Running with BF16, with top-k (async=True, previous=True) ... passed
[testing] Running with FP8, without top-k (async=True, previous=True) ... passed
[testing] Running with FP8, with top-k (async=True, previous=True) ... passed

[tuning] SMs 24, NVL chunk 4: 320.96 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 8: 336.67 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 12: 318.13 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 16: 312.41 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 20: 309.32 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 24: 305.61 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 28: 301.76 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 32: 297.58 GB/s (NVL) 
[tuning] Best dispatch (FP8): SMs 24, NVL chunk 8, 336.67 GB/s (NVL)

[tuning] SMs 24, NVL chunk 4: 348.28 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 8: 324.39 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 12: 315.30 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 16: 310.66 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 20: 307.87 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 24: 302.78 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 28: 301.08 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 32: 298.17 GB/s (NVL) 
[tuning] Best dispatch (BF16): SMs 24, NVL chunk 4, 348.28 GB/s (NVL)

[tuning] SMs 24, NVL chunk 1: 165.05 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 2: 286.87 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 3: 322.50 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 4: 332.14 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 5: 328.91 GB/s (NVL) 
[tuning] SMs 24, NVL chunk 6: 315.22 GB/s (NVL) 
[tuning] Best combine: SMs 24, NVL chunk 4: 332.14 GB/s (NVL)
  • When testing the script tests/test_internode.py, the test fails with the following error from some low-level verbs API functions:
/home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1026: non-zero status: 12 ibv_poll_cq failed, status: 12

/home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1055: non-zero status: 7 progress_send failed, 

/home/dpsk_a2a/deepep-nvshmem/src/host/proxy/proxy.cpp:1066: non-zero status: 7 transport 1 progress failed 

/home/dpsk_a2a/deepep-nvshmem/src/host/proxy/proxy.cpp:1070: non-zero status: 7: Success, exiting... error in progress_transport 
  • The cluster currently switched to ipv6, and the network is RoCEv2; Since the issue arises only in internode communication and wasn't there with ipv4, I'm wondering if the switch to ipv6 is the root cause of the problem, any guidance you can provide to solve this issue ? Thx :)
Originally created by @aahouzi on GitHub (Jun 20, 2025). Original GitHub issue: https://github.com/deepseek-ai/DeepEP/issues/237 ## Type of issue - I tried the provided test scripts for DeepEP on 8 H100x8 nodes with ipv6, and tests/test_intranode.py is successful with the following output: ``` [config] num_tokens=4096, hidden=7168, num_topk=8 [layout] Kernel performance: 0.048 ms [testing] Running with BF16, without top-k (async=False, previous=False) ... passed [testing] Running with BF16, with top-k (async=False, previous=False) ... passed [testing] Running with BF16, without top-k (async=False, previous=False) ... passed [testing] Running with BF16, with top-k (async=False, previous=False) ... passed [testing] Running with FP8, without top-k (async=False, previous=False) ... passed [testing] Running with FP8, with top-k (async=False, previous=False) ... passed [testing] Running with BF16, without top-k (async=True, previous=False) ... passed [testing] Running with BF16, with top-k (async=True, previous=False) ... passed [testing] Running with BF16, without top-k (async=True, previous=False) ... passed [testing] Running with BF16, with top-k (async=True, previous=False) ... passed [testing] Running with FP8, without top-k (async=True, previous=False) ... passed [testing] Running with FP8, with top-k (async=True, previous=False) ... passed [testing] Running with BF16, without top-k (async=False, previous=True) ... passed [testing] Running with BF16, with top-k (async=False, previous=True) ... passed [testing] Running with BF16, without top-k (async=False, previous=True) ... passed [testing] Running with BF16, with top-k (async=False, previous=True) ... passed [testing] Running with FP8, without top-k (async=False, previous=True) ... passed [testing] Running with FP8, with top-k (async=False, previous=True) ... passed [testing] Running with BF16, without top-k (async=True, previous=True) ... passed [testing] Running with BF16, with top-k (async=True, previous=True) ... passed [testing] Running with BF16, without top-k (async=True, previous=True) ... passed [testing] Running with BF16, with top-k (async=True, previous=True) ... passed [testing] Running with FP8, without top-k (async=True, previous=True) ... passed [testing] Running with FP8, with top-k (async=True, previous=True) ... passed [tuning] SMs 24, NVL chunk 4: 320.96 GB/s (NVL) [tuning] SMs 24, NVL chunk 8: 336.67 GB/s (NVL) [tuning] SMs 24, NVL chunk 12: 318.13 GB/s (NVL) [tuning] SMs 24, NVL chunk 16: 312.41 GB/s (NVL) [tuning] SMs 24, NVL chunk 20: 309.32 GB/s (NVL) [tuning] SMs 24, NVL chunk 24: 305.61 GB/s (NVL) [tuning] SMs 24, NVL chunk 28: 301.76 GB/s (NVL) [tuning] SMs 24, NVL chunk 32: 297.58 GB/s (NVL) [tuning] Best dispatch (FP8): SMs 24, NVL chunk 8, 336.67 GB/s (NVL) [tuning] SMs 24, NVL chunk 4: 348.28 GB/s (NVL) [tuning] SMs 24, NVL chunk 8: 324.39 GB/s (NVL) [tuning] SMs 24, NVL chunk 12: 315.30 GB/s (NVL) [tuning] SMs 24, NVL chunk 16: 310.66 GB/s (NVL) [tuning] SMs 24, NVL chunk 20: 307.87 GB/s (NVL) [tuning] SMs 24, NVL chunk 24: 302.78 GB/s (NVL) [tuning] SMs 24, NVL chunk 28: 301.08 GB/s (NVL) [tuning] SMs 24, NVL chunk 32: 298.17 GB/s (NVL) [tuning] Best dispatch (BF16): SMs 24, NVL chunk 4, 348.28 GB/s (NVL) [tuning] SMs 24, NVL chunk 1: 165.05 GB/s (NVL) [tuning] SMs 24, NVL chunk 2: 286.87 GB/s (NVL) [tuning] SMs 24, NVL chunk 3: 322.50 GB/s (NVL) [tuning] SMs 24, NVL chunk 4: 332.14 GB/s (NVL) [tuning] SMs 24, NVL chunk 5: 328.91 GB/s (NVL) [tuning] SMs 24, NVL chunk 6: 315.22 GB/s (NVL) [tuning] Best combine: SMs 24, NVL chunk 4: 332.14 GB/s (NVL) ``` - When testing the script tests/test_internode.py, the test fails with the following error from some low-level verbs API functions: ``` /home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1026: non-zero status: 12 ibv_poll_cq failed, status: 12 /home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1055: non-zero status: 7 progress_send failed, /home/dpsk_a2a/deepep-nvshmem/src/host/proxy/proxy.cpp:1066: non-zero status: 7 transport 1 progress failed /home/dpsk_a2a/deepep-nvshmem/src/host/proxy/proxy.cpp:1070: non-zero status: 7: Success, exiting... error in progress_transport ``` - The cluster currently switched to ipv6, and the network is RoCEv2; Since the issue arises only in internode communication and wasn't there with ipv4, I'm wondering if the switch to ipv6 is the root cause of the problem, any guidance you can provide to solve this issue ? Thx :)
Author
Owner

@sphish commented on GitHub (Jun 23, 2025):

Do you mean that your RoCEv2 is running over IPv6? Have you tried setting the NVSHMEM_IB_ADDR_FAMILY environment variable?

<!-- gh-comment-id:2994743760 --> @sphish commented on GitHub (Jun 23, 2025): Do you mean that your RoCEv2 is running over IPv6? Have you tried setting the `NVSHMEM_IB_ADDR_FAMILY` environment variable?
Author
Owner

@aahouzi commented on GitHub (Jun 26, 2025):

Thanks @sphish for your feedback. I tried setting NVSHMEM_IB_ADDR_FAMILY to AF_INET6, at least this time it starts and I can get the following logs from stdout:

[config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8
[config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8
[config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8
[config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8
[config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8
[config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8
[config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8
[config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8
[layout] Kernel performance: 0.065 ms
[layout] Kernel performance: 0.065 ms
[layout] Kernel performance: 0.065 ms
[layout] Kernel performance: 0.065 ms
[layout] Kernel performance: 0.065 ms
[layout] Kernel performance: 0.065 ms
[layout] Kernel performance: 0.065 ms
[layout] Kernel performance: 0.065 ms

[testing] Running with BF16, without top-k (async=False, previous=False) ...
[testing] Running with BF16, without top-k (async=False, previous=False) ...
[testing] Running with BF16, without top-k (async=False, previous=False) ...
[testing] Running with BF16, without top-k (async=False, previous=False) ...
[testing] Running with BF16, without top-k (async=False, previous=False) ...
[testing] Running with BF16, without top-k (async=False, previous=False) ...
[testing] Running with BF16, without top-k (async=False, previous=False) ...
[testing] Running with BF16, without top-k (async=False, previous=False) ...

But the problem again is that it doesn't complete the test, and it exits with the following error (same as before):

/home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1026: non-zero status: 12 ibv_poll_cq failed, status: 12
/home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1055: non-zero status: 7 progress_send failed, 
/home/dpsk_a2a/deepep-nvshmem/src/host/proxy/proxy.cpp:1066: non-zero status: 7 transport 1 progress failed 
/home/dpsk_a2a/deepep-nvshmem/src/host/proxy/proxy.cpp:1070: non-zero status: 7: Success, exiting... error in progress_transport 
/home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1026: non-zero status: 12 ibv_poll_cq failed, status: 12
/home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1055: non-zero status: 7 progress_send failed, 
/home/dpsk_a2a/deepep-nvshmem/src/host/proxy/proxy.cpp:1066: non-zero status: 7 transport 1 progress failed 
/home/dpsk_a2a/deepep-nvshmem/src/host/proxy/proxy.cpp:1070: non-zero status: 7: Success, exiting... error in progress_transport 

W0626 13:32:54.377000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283569 via signal SIGTERM
W0626 13:32:54.377000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283570 via signal SIGTERM
W0626 13:32:54.378000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283571 via signal SIGTERM
W0626 13:32:54.379000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283572 via signal SIGTERM
W0626 13:32:54.379000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283573 via signal SIGTERM
W0626 13:32:54.380000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283574 via signal SIGTERM
W0626 13:32:54.380000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283575 via signal SIGTERM

And yes, it's basically RoCEv2 over IPv6. Any additional env variables or workarounds you might think of that can help here ?

<!-- gh-comment-id:3008061946 --> @aahouzi commented on GitHub (Jun 26, 2025): Thanks @sphish for your feedback. I tried setting ```NVSHMEM_IB_ADDR_FAMILY``` to ```AF_INET6```, at least this time it starts and I can get the following logs from stdout: ``` [config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8 [config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8 [config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8 [config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8 [config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8 [config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8 [config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8 [config] num_tokens=4096, hidden=7168, num_topk_groups=4, num_topk=8 [layout] Kernel performance: 0.065 ms [layout] Kernel performance: 0.065 ms [layout] Kernel performance: 0.065 ms [layout] Kernel performance: 0.065 ms [layout] Kernel performance: 0.065 ms [layout] Kernel performance: 0.065 ms [layout] Kernel performance: 0.065 ms [layout] Kernel performance: 0.065 ms [testing] Running with BF16, without top-k (async=False, previous=False) ... [testing] Running with BF16, without top-k (async=False, previous=False) ... [testing] Running with BF16, without top-k (async=False, previous=False) ... [testing] Running with BF16, without top-k (async=False, previous=False) ... [testing] Running with BF16, without top-k (async=False, previous=False) ... [testing] Running with BF16, without top-k (async=False, previous=False) ... [testing] Running with BF16, without top-k (async=False, previous=False) ... [testing] Running with BF16, without top-k (async=False, previous=False) ... ``` But the problem again is that it doesn't complete the test, and it exits with the following error (same as before): ``` /home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1026: non-zero status: 12 ibv_poll_cq failed, status: 12 /home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1055: non-zero status: 7 progress_send failed, /home/dpsk_a2a/deepep-nvshmem/src/host/proxy/proxy.cpp:1066: non-zero status: 7 transport 1 progress failed /home/dpsk_a2a/deepep-nvshmem/src/host/proxy/proxy.cpp:1070: non-zero status: 7: Success, exiting... error in progress_transport /home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1026: non-zero status: 12 ibv_poll_cq failed, status: 12 /home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1055: non-zero status: 7 progress_send failed, /home/dpsk_a2a/deepep-nvshmem/src/host/proxy/proxy.cpp:1066: non-zero status: 7 transport 1 progress failed /home/dpsk_a2a/deepep-nvshmem/src/host/proxy/proxy.cpp:1070: non-zero status: 7: Success, exiting... error in progress_transport W0626 13:32:54.377000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283569 via signal SIGTERM W0626 13:32:54.377000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283570 via signal SIGTERM W0626 13:32:54.378000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283571 via signal SIGTERM W0626 13:32:54.379000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283572 via signal SIGTERM W0626 13:32:54.379000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283573 via signal SIGTERM W0626 13:32:54.380000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283574 via signal SIGTERM W0626 13:32:54.380000 1282950 torch/multiprocessing/spawn.py:169] Terminating process 1283575 via signal SIGTERM ``` And yes, it's basically RoCEv2 over IPv6. Any additional env variables or workarounds you might think of that can help here ?
Author
Owner

@alpha-baby commented on GitHub (Jun 27, 2025):

/home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1026: non-zero status: 12 ibv_poll_cq failed, status: 12

这个 12 的报错码看起来应该是 verbs 的报错码,意思应该是 rdma 发送超时了

<!-- gh-comment-id:3011615923 --> @alpha-baby commented on GitHub (Jun 27, 2025): >/home/dpsk_a2a/deepep-nvshmem/src/modules/transport/ibrc/ibrc.cpp:1026: non-zero status: 12 ibv_poll_cq failed, status: 12 这个 12 的报错码看起来应该是 verbs 的报错码,意思应该是 rdma 发送超时了
Author
Owner

@sphish commented on GitHub (Jun 27, 2025):

It seems that after setting the IPv6 environment variable, the QP connections are established successfully .

The timeout that occurred during the testing process may indicate a network issue. I recommend having your network administrator take a look.

<!-- gh-comment-id:3011720988 --> @sphish commented on GitHub (Jun 27, 2025): It seems that after setting the IPv6 environment variable, the QP connections are established successfully . The timeout that occurred during the testing process may indicate a network issue. I recommend having your network administrator take a look.
Author
Owner

@aahouzi commented on GitHub (Jul 9, 2025):

  • @sphish Thanks for ur help. Currently, we could fix the network issue and we have DeepEP internode tests passing on 8N and 16N, but when switching to 32N and 64N, I get the following error (Nodes are 8xH100 nodes with RoCEv2 over ipv6):
-- Process 2 terminated with the following error:
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/dist-packages/torch/multiprocessing/spawn.py", line 90, in _wrap
    fn(i, *args)
  File "/home/dpsk_a2a/deepep/tests/test_internode.py", line 237, in test_loop
    buffer = deep_ep.Buffer(group, int(2e9), int(1e9), low_latency_mode=args.test_ll_compatibility,
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/dist-packages/deep_ep-1.0.0+82dcf48-py3.12-linux-x86_64.egg/deep_ep/buffer.py", line 54, in __init__
    self.runtime = deep_ep_cpp.Buffer(self.rank, self.group_size, num_nvl_bytes, num_rdma_bytes, low_latency_mode)
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Failed: Assertion error /home/dpsk_a2a/deepep/csrc/deep_ep.cpp:29 '0 <= rank and rank < num_ranks and (num_ranks <= NUM_MAX_NVL_PEERS * NUM_MAX_RDMA_PEERS or low_latency_mode)'
  • I saw in the code csrc/kernels/configs.cuh that you set the macros to these values:
#define NUM_MAX_NVL_PEERS 8
#define NUM_MAX_RDMA_PEERS 20

So the error makes sense, as my num_ranks=256 for 32N, which is higher than 8*20=160, is my understanding correct ?

<!-- gh-comment-id:3051971065 --> @aahouzi commented on GitHub (Jul 9, 2025): - @sphish Thanks for ur help. Currently, we could fix the network issue and we have DeepEP internode tests passing on 8N and 16N, but when switching to 32N and 64N, I get the following error (Nodes are 8xH100 nodes with RoCEv2 over ipv6): ``` -- Process 2 terminated with the following error: Traceback (most recent call last): File "/usr/local/lib/python3.12/dist-packages/torch/multiprocessing/spawn.py", line 90, in _wrap fn(i, *args) File "/home/dpsk_a2a/deepep/tests/test_internode.py", line 237, in test_loop buffer = deep_ep.Buffer(group, int(2e9), int(1e9), low_latency_mode=args.test_ll_compatibility, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/dist-packages/deep_ep-1.0.0+82dcf48-py3.12-linux-x86_64.egg/deep_ep/buffer.py", line 54, in __init__ self.runtime = deep_ep_cpp.Buffer(self.rank, self.group_size, num_nvl_bytes, num_rdma_bytes, low_latency_mode) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: Failed: Assertion error /home/dpsk_a2a/deepep/csrc/deep_ep.cpp:29 '0 <= rank and rank < num_ranks and (num_ranks <= NUM_MAX_NVL_PEERS * NUM_MAX_RDMA_PEERS or low_latency_mode)' ``` - I saw in the code csrc/kernels/configs.cuh that you set the macros to these values: ``` #define NUM_MAX_NVL_PEERS 8 #define NUM_MAX_RDMA_PEERS 20 ``` So the error makes sense, as my num_ranks=256 for 32N, which is higher than 8*20=160, is my understanding correct ?
Author
Owner

@aahouzi commented on GitHub (Jul 9, 2025):

@sphish I tried changing NUM_MAX_RDMA_PEERS to a higher number and rebuilt DeepEP, but I'm getting this issue:

Traceback (most recent call last):
  File "/usr/local/lib/python3.12/dist-packages/torch/multiprocessing/spawn.py", line 90, in _wrap
    fn(i, *args)
  File "/home/dpsk_a2a/deepep/tests/test_internode.py", line 242, in test_loop
    test_main(args, i, local_rank, num_local_ranks, num_ranks, num_nodes, rank, buffer, group)
  File "/home/dpsk_a2a/deepep/tests/test_internode.py", line 116, in test_main
    recv_x, recv_topk_idx, recv_topk_weights, recv_num_tokens_per_expert_list, handle, event = buffer.dispatch(**dispatch_args)
                                                                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/dist-packages/deep_ep-1.0.0+82dcf48-py3.12-linux-x86_64.egg/deep_ep/buffer.py", line 283, in dispatch
    return self.internode_dispatch(x, handle, num_tokens_per_rank, num_tokens_per_rdma_rank, is_token_in_rank, num_tokens_per_expert,
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/dist-packages/deep_ep-1.0.0+82dcf48-py3.12-linux-x86_64.egg/deep_ep/buffer.py", line 391, in internode_dispatch
    recv_src_meta, send_rdma_head, send_nvl_head, event = self.runtime.internode_dispatch(
                                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: Failed: Assertion error /home/dpsk_a2a/deepep/csrc/kernels/internode.cu:444 'false and "Unsupported RDMA ranks"'

Any guidance you can provide for debugging ? Thx :)

<!-- gh-comment-id:3052707583 --> @aahouzi commented on GitHub (Jul 9, 2025): @sphish I tried changing NUM_MAX_RDMA_PEERS to a higher number and rebuilt DeepEP, but I'm getting this issue: ``` Traceback (most recent call last): File "/usr/local/lib/python3.12/dist-packages/torch/multiprocessing/spawn.py", line 90, in _wrap fn(i, *args) File "/home/dpsk_a2a/deepep/tests/test_internode.py", line 242, in test_loop test_main(args, i, local_rank, num_local_ranks, num_ranks, num_nodes, rank, buffer, group) File "/home/dpsk_a2a/deepep/tests/test_internode.py", line 116, in test_main recv_x, recv_topk_idx, recv_topk_weights, recv_num_tokens_per_expert_list, handle, event = buffer.dispatch(**dispatch_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/dist-packages/deep_ep-1.0.0+82dcf48-py3.12-linux-x86_64.egg/deep_ep/buffer.py", line 283, in dispatch return self.internode_dispatch(x, handle, num_tokens_per_rank, num_tokens_per_rdma_rank, is_token_in_rank, num_tokens_per_expert, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.12/dist-packages/deep_ep-1.0.0+82dcf48-py3.12-linux-x86_64.egg/deep_ep/buffer.py", line 391, in internode_dispatch recv_src_meta, send_rdma_head, send_nvl_head, event = self.runtime.internode_dispatch( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ RuntimeError: Failed: Assertion error /home/dpsk_a2a/deepep/csrc/kernels/internode.cu:444 'false and "Unsupported RDMA ranks"' ``` Any guidance you can provide for debugging ? Thx :)
Author
Owner

@sphish commented on GitHub (Jul 11, 2025):

So the error makes sense, as my num_ranks=256 for 32N, which is higher than 8*20=160, is my understanding correct ?

Yes.

The current internode kernels don't support 32 * 8 GPUs. This is because some warp roles require at least kNumRDMARank warps, such as the combine forwarder. kNumRDMARank >= 32 will cause the total number of warps to exceed the limit.

We may refactor the internode kernels to support a larger number of GPUs in the future.

<!-- gh-comment-id:3060765515 --> @sphish commented on GitHub (Jul 11, 2025): > So the error makes sense, as my num_ranks=256 for 32N, which is higher than 8*20=160, is my understanding correct ? Yes. The current internode kernels don't support 32 * 8 GPUs. This is because some warp roles require at least `kNumRDMARank` warps, such as the combine forwarder. `kNumRDMARank >= 32` will cause the total number of warps to exceed the limit. We may refactor the internode kernels to support a larger number of GPUs in the future.
Author
Owner

@sphish commented on GitHub (Jul 11, 2025):

I’m not an expert in this area, but I think you could try using larger DP or PP?

<!-- gh-comment-id:3060944694 --> @sphish commented on GitHub (Jul 11, 2025): I’m not an expert in this area, but I think you could try using larger DP or PP?
Author
Owner

@aahouzi commented on GitHub (Jul 12, 2025):

Thanks @sphish for your insights.

<!-- gh-comment-id:3064910227 --> @aahouzi commented on GitHub (Jul 12, 2025): Thanks @sphish for your insights.
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
deepseek-ai/DeepEP#183
No description provided.