-
Notifications
You must be signed in to change notification settings - Fork 43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Bug] Allgather with proxy channel hangs at H2D cudaMemcpyAsync #440
Comments
Can you share your environment details and the commands to reproduce? |
mpirun --allow-run-as-root --tag-output --bind-to numa -np 8 -x LD_PRELOAD='/path/to/libmscclpp_nccl.so:' -x MSCCLPP_EXECUTION_PLAN_DIR='/path/to/algo/json/dir' -x MSCCLPP_DEBUG='INFO' /path/to/nccl-test/all_gather_perf -b 1K -e 1G -f 2 -w 10 -n 50 We found out that the test only fails for non in-place allgather, so we only use the non in-place version to reproduce it. By the way, we encountered the same problem when implementing an alltoall kernel using proxychannel with the python bindings. This allgather example and the alltoall case both involves proxychannel copying from the local inputbuffer to the remote outputbuffer. Other in-place examples with proxychannels that only involves the local and remote outputbuffers, like in-place allgather and the allreduce3 kernel in the benchmark runs normally. Do you have any idea on how involving an extra input buffer can cause the algorithm to hang? Command to generate the json algorithm using msccl-tools: import argparse
from msccl.language import *
from msccl.topologies import *
from msccl.language.collectives import AllGather
def ring_allgather(gpus, instances, inplace=False):
size = gpus
topology = fully_connected(size)
collective = AllGather(size, 1, inplace)
with MSCCLPPProgram(
f"allgather_ring_proxy_n={size}_i={instances}_inp={inplace}",
topology,
collective,
instances,
protocol="Simple",
replication_policy=ReplicationPolicy.interleaved,
):
# Chunk i
for i in range(size):
for step in range(size - 1):
send_rank = (i + step) % size
recv_rank = (i + step + 1) % size
c = chunk(send_rank, Buffer.input, 0) if step == 0 else chunk(send_rank, Buffer.output, i)
c.put(
recv_rank,
Buffer.output,
i,
sendtb=0,
chan_type=ChannelType.proxy,
)
c.signal(recv_rank, Buffer.output, i, sendtb=0, chan_type=ChannelType.proxy)
c.flush(recv_rank, Buffer.output, i, sendtb=0, chan_type=ChannelType.proxy)
cr = chunk(recv_rank, Buffer.output, i)
cr.wait(send_rank, Buffer.input, 0, recvtb=0, chan_type=ChannelType.proxy)
if not inplace:
for i in range(size):
c = chunk(i, Buffer.input, 0)
c.copy(i, Buffer.output, i, sendtb=0)
Json()
Check()
parser = argparse.ArgumentParser()
parser.add_argument("num_gpus", type=int, help="number of gpus")
parser.add_argument("instances", type=int, help="number of instances")
parser.add_argument("--inplace", action="store_true", help="inplace")
args = parser.parse_args()
ring_allgather(args.num_gpus, args.instances, args.inplace)
{
"name": "allgather_ring_proxy_n=8_i=1_inp=False",
"collective": "allgather",
"protocol": "Simple",
"inplace": false,
"gpus": [
{
"id": 0,
"inputChunks": 1,
"outputChunks": 8,
"scratchChunks": 0,
"chunkGroups": 1,
"threadblocks": [
{
"id": 0,
"ops": [
{
"name": "pwsf",
"o_buff": {
"src": "i",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 0
}
],
"srcs": [
{
"buff": "i",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 1,
"off": 0
},
{
"id": 1,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 1
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 2
}
],
"srcs": [
{
"buff": "o",
"off": 2
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 1,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 4
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 3
}
],
"srcs": [
{
"buff": "o",
"off": 3
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 1,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 7
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 4
}
],
"srcs": [
{
"buff": "o",
"off": 4
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 1,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 10
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 5
}
],
"srcs": [
{
"buff": "o",
"off": 5
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 1,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 13
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 6
}
],
"srcs": [
{
"buff": "o",
"off": 6
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 1,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 16
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 7
}
],
"srcs": [
{
"buff": "o",
"off": 7
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 0
}
]
},
{
"name": "copy",
"src": 0,
"srcbuff": "i",
"srcoff": 0,
"dst": 0,
"dstbuff": "o",
"dstoff": 0,
"ctype": "none",
"cnt": 1
}
],
"channels": [
{
"src": "i",
"dst": "o",
"ctype": "proxy",
"cids": [
0,
1
]
},
{
"src": "o",
"dst": "o",
"ctype": "proxy",
"cids": [
0
]
}
]
}
],
"channels": [
{
"srcbuff": "i",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
1,
7
]
},
{
"srcbuff": "o",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
1
]
}
]
},
{
"id": 1,
"inputChunks": 1,
"outputChunks": 8,
"scratchChunks": 0,
"chunkGroups": 1,
"threadblocks": [
{
"id": 0,
"ops": [
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 0
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 0
}
],
"srcs": [
{
"buff": "o",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "pwsf",
"o_buff": {
"src": "i",
"dst": "o"
},
"o_cids": [
{
"id": 1,
"off": 1
}
],
"srcs": [
{
"buff": "i",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
},
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 4
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 3
}
],
"srcs": [
{
"buff": "o",
"off": 3
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 7
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 4
}
],
"srcs": [
{
"buff": "o",
"off": 4
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 10
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 5
}
],
"srcs": [
{
"buff": "o",
"off": 5
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 13
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 6
}
],
"srcs": [
{
"buff": "o",
"off": 6
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 16
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 7
}
],
"srcs": [
{
"buff": "o",
"off": 7
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 3
}
]
},
{
"name": "copy",
"src": 1,
"srcbuff": "i",
"srcoff": 0,
"dst": 1,
"dstbuff": "o",
"dstoff": 1,
"ctype": "none",
"cnt": 1
}
],
"channels": [
{
"src": "i",
"dst": "o",
"ctype": "proxy",
"cids": [
0,
1
]
},
{
"src": "o",
"dst": "o",
"ctype": "proxy",
"cids": [
0
]
}
]
}
],
"channels": [
{
"srcbuff": "i",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
0,
2
]
},
{
"srcbuff": "o",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
2
]
}
]
},
{
"id": 2,
"inputChunks": 1,
"outputChunks": 8,
"scratchChunks": 0,
"chunkGroups": 1,
"threadblocks": [
{
"id": 0,
"ops": [
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 0
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 0
}
],
"srcs": [
{
"buff": "o",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 3
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 1
}
],
"srcs": [
{
"buff": "o",
"off": 1
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "pwsf",
"o_buff": {
"src": "i",
"dst": "o"
},
"o_cids": [
{
"id": 1,
"off": 2
}
],
"srcs": [
{
"buff": "i",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
},
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 7
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 4
}
],
"srcs": [
{
"buff": "o",
"off": 4
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 10
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 5
}
],
"srcs": [
{
"buff": "o",
"off": 5
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 13
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 6
}
],
"srcs": [
{
"buff": "o",
"off": 6
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 16
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 7
}
],
"srcs": [
{
"buff": "o",
"off": 7
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 6
}
]
},
{
"name": "copy",
"src": 2,
"srcbuff": "i",
"srcoff": 0,
"dst": 2,
"dstbuff": "o",
"dstoff": 2,
"ctype": "none",
"cnt": 1
}
],
"channels": [
{
"src": "i",
"dst": "o",
"ctype": "proxy",
"cids": [
0,
1
]
},
{
"src": "o",
"dst": "o",
"ctype": "proxy",
"cids": [
0
]
}
]
}
],
"channels": [
{
"srcbuff": "i",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
1,
3
]
},
{
"srcbuff": "o",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
3
]
}
]
},
{
"id": 3,
"inputChunks": 1,
"outputChunks": 8,
"scratchChunks": 0,
"chunkGroups": 1,
"threadblocks": [
{
"id": 0,
"ops": [
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 0
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 0
}
],
"srcs": [
{
"buff": "o",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 3
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 1
}
],
"srcs": [
{
"buff": "o",
"off": 1
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 6
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 2
}
],
"srcs": [
{
"buff": "o",
"off": 2
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "pwsf",
"o_buff": {
"src": "i",
"dst": "o"
},
"o_cids": [
{
"id": 1,
"off": 3
}
],
"srcs": [
{
"buff": "i",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
},
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 10
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 5
}
],
"srcs": [
{
"buff": "o",
"off": 5
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 13
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 6
}
],
"srcs": [
{
"buff": "o",
"off": 6
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 16
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 7
}
],
"srcs": [
{
"buff": "o",
"off": 7
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 9
}
]
},
{
"name": "copy",
"src": 3,
"srcbuff": "i",
"srcoff": 0,
"dst": 3,
"dstbuff": "o",
"dstoff": 3,
"ctype": "none",
"cnt": 1
}
],
"channels": [
{
"src": "i",
"dst": "o",
"ctype": "proxy",
"cids": [
0,
1
]
},
{
"src": "o",
"dst": "o",
"ctype": "proxy",
"cids": [
0
]
}
]
}
],
"channels": [
{
"srcbuff": "i",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
2,
4
]
},
{
"srcbuff": "o",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
4
]
}
]
},
{
"id": 4,
"inputChunks": 1,
"outputChunks": 8,
"scratchChunks": 0,
"chunkGroups": 1,
"threadblocks": [
{
"id": 0,
"ops": [
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 0
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 0
}
],
"srcs": [
{
"buff": "o",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 3
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 1
}
],
"srcs": [
{
"buff": "o",
"off": 1
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 6
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 2
}
],
"srcs": [
{
"buff": "o",
"off": 2
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 9
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 3
}
],
"srcs": [
{
"buff": "o",
"off": 3
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "pwsf",
"o_buff": {
"src": "i",
"dst": "o"
},
"o_cids": [
{
"id": 1,
"off": 4
}
],
"srcs": [
{
"buff": "i",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
},
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 13
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 6
}
],
"srcs": [
{
"buff": "o",
"off": 6
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 16
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 7
}
],
"srcs": [
{
"buff": "o",
"off": 7
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 12
}
]
},
{
"name": "copy",
"src": 4,
"srcbuff": "i",
"srcoff": 0,
"dst": 4,
"dstbuff": "o",
"dstoff": 4,
"ctype": "none",
"cnt": 1
}
],
"channels": [
{
"src": "i",
"dst": "o",
"ctype": "proxy",
"cids": [
0,
1
]
},
{
"src": "o",
"dst": "o",
"ctype": "proxy",
"cids": [
0
]
}
]
}
],
"channels": [
{
"srcbuff": "i",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
3,
5
]
},
{
"srcbuff": "o",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
5
]
}
]
},
{
"id": 5,
"inputChunks": 1,
"outputChunks": 8,
"scratchChunks": 0,
"chunkGroups": 1,
"threadblocks": [
{
"id": 0,
"ops": [
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 0
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 0
}
],
"srcs": [
{
"buff": "o",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 3
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 1
}
],
"srcs": [
{
"buff": "o",
"off": 1
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 6
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 2
}
],
"srcs": [
{
"buff": "o",
"off": 2
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 9
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 3
}
],
"srcs": [
{
"buff": "o",
"off": 3
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 12
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 4
}
],
"srcs": [
{
"buff": "o",
"off": 4
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "pwsf",
"o_buff": {
"src": "i",
"dst": "o"
},
"o_cids": [
{
"id": 1,
"off": 5
}
],
"srcs": [
{
"buff": "i",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
},
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 16
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 7
}
],
"srcs": [
{
"buff": "o",
"off": 7
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 15
}
]
},
{
"name": "copy",
"src": 5,
"srcbuff": "i",
"srcoff": 0,
"dst": 5,
"dstbuff": "o",
"dstoff": 5,
"ctype": "none",
"cnt": 1
}
],
"channels": [
{
"src": "i",
"dst": "o",
"ctype": "proxy",
"cids": [
0,
1
]
},
{
"src": "o",
"dst": "o",
"ctype": "proxy",
"cids": [
0
]
}
]
}
],
"channels": [
{
"srcbuff": "i",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
4,
6
]
},
{
"srcbuff": "o",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
6
]
}
]
},
{
"id": 6,
"inputChunks": 1,
"outputChunks": 8,
"scratchChunks": 0,
"chunkGroups": 1,
"threadblocks": [
{
"id": 0,
"ops": [
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 0
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 0
}
],
"srcs": [
{
"buff": "o",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 3
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 1
}
],
"srcs": [
{
"buff": "o",
"off": 1
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 6
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 2
}
],
"srcs": [
{
"buff": "o",
"off": 2
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 9
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 3
}
],
"srcs": [
{
"buff": "o",
"off": 3
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 12
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 4
}
],
"srcs": [
{
"buff": "o",
"off": 4
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 15
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 5
}
],
"srcs": [
{
"buff": "o",
"off": 5
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "pwsf",
"o_buff": {
"src": "i",
"dst": "o"
},
"o_cids": [
{
"id": 1,
"off": 6
}
],
"srcs": [
{
"buff": "i",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 0,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 18
}
]
},
{
"name": "copy",
"src": 6,
"srcbuff": "i",
"srcoff": 0,
"dst": 6,
"dstbuff": "o",
"dstoff": 6,
"ctype": "none",
"cnt": 1
}
],
"channels": [
{
"src": "i",
"dst": "o",
"ctype": "proxy",
"cids": [
0,
1
]
},
{
"src": "o",
"dst": "o",
"ctype": "proxy",
"cids": [
0
]
}
]
}
],
"channels": [
{
"srcbuff": "i",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
5,
7
]
},
{
"srcbuff": "o",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
7
]
}
]
},
{
"id": 7,
"inputChunks": 1,
"outputChunks": 8,
"scratchChunks": 0,
"chunkGroups": 1,
"threadblocks": [
{
"id": 0,
"ops": [
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 1,
"off": 0
},
{
"id": 1,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 0
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 1
}
],
"srcs": [
{
"buff": "o",
"off": 1
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 1,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 3
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 2
}
],
"srcs": [
{
"buff": "o",
"off": 2
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 1,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 6
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 3
}
],
"srcs": [
{
"buff": "o",
"off": 3
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 1,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 9
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 4
}
],
"srcs": [
{
"buff": "o",
"off": 4
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 1,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 12
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 5
}
],
"srcs": [
{
"buff": "o",
"off": 5
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "wait",
"i_buff": {
"src": "i",
"dst": "o"
},
"i_cids": [
{
"id": 1,
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 15
}
]
},
{
"name": "pwsf",
"o_buff": {
"src": "o",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 6
}
],
"srcs": [
{
"buff": "o",
"off": 6
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "pwsf",
"o_buff": {
"src": "i",
"dst": "o"
},
"o_cids": [
{
"id": 0,
"off": 7
}
],
"srcs": [
{
"buff": "i",
"off": 0
}
],
"ctype": "proxy",
"cnt": 1
},
{
"name": "nop",
"deps": [
{
"tb": 0,
"step": 18
}
]
},
{
"name": "copy",
"src": 7,
"srcbuff": "i",
"srcoff": 0,
"dst": 7,
"dstbuff": "o",
"dstoff": 7,
"ctype": "none",
"cnt": 1
}
],
"channels": [
{
"src": "i",
"dst": "o",
"ctype": "proxy",
"cids": [
0,
1
]
},
{
"src": "o",
"dst": "o",
"ctype": "proxy",
"cids": [
0
]
}
]
}
],
"channels": [
{
"srcbuff": "i",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
0,
6
]
},
{
"srcbuff": "o",
"dstbuff": "o",
"type": "proxy",
"connectedTo": [
0
]
}
]
}
],
"num_threads_per_block": 1024,
"use_double_scratch_buffer": false,
"min_message_size": 0,
"max_message_size": 18446744073709551615
} |
I am confused with this line: |
For out-of-place ring allgather, step 0 copies chunk i from the input buffer at rank i -> output buffer at rank i + 1. Therefore in step 1 and further, we can operate on only the output buffers. chunk i is copied from output buffer at rank i + step -> output buffer at rank i + step + 1. After explaining this I found out the bug in the allgather algorithm, the |
We are missing some checks in current version. We are trying to revise current API, then will add more correctness check |
We implemented a simple intra-node allgather algorithm using mscclpplang with proxychannels. However, when running the generated json algorithm file using the nccl interface by setting MSCCL_NCCL_PLAN_DIR, mscclpp reports the following error:
/include/mscclpp/semaphore_device.hpp:30: void mscclpp::Host2DeviceSemaphoreDeviceHandle::wait(signed long): block: [0,0,0], thread: [1,0,0] Assertion (atomicLoad(inboundSemaphoreId, memoryOrderAcquire) < (*expectedInboundSemaphoreId)) failed.
We suspect this is the same error with #394 and #285 where the H2D cudaMemcpyAsync hangs and the semaphore is never signaled. However, there is no working solution to this error. Do you have any thoughts on this?
The algorithm json file is generated using the following mscclpplang program:
And Allgather is called using the following example code provided by nccl on a non-default stream:
The text was updated successfully, but these errors were encountered: