in graphlearn_torch/python/distributed/dist_context.py [0:0]
def assign_server_by_order():
r"""Assign servers to each client in turn.
e.g. 2 clients and 4 servers, then the assignment is: {0: [0, 1], 1: [2, 3]},
5 clients and 2 servers, then the assignment is: {0: [0], 1: [1], 2: [0], 3: [1], 4: [0]}."""
ctx = get_context()
assert ctx is not None and ctx.is_client()
client_num, server_num = ctx.world_size, ctx.global_world_size - ctx.world_size
global _clients_to_servers
_clients_to_servers = {}
cur_server = 0
for i in range(client_num):
if i not in _clients_to_servers:
_clients_to_servers[i] = []
for j in range(server_num // client_num):
_clients_to_servers[i].append(cur_server)
cur_server = (cur_server + 1) % server_num
if i < server_num % client_num:
_clients_to_servers[i].append(cur_server)
cur_server = (cur_server + 1) % server_num
if len(_clients_to_servers[i]) == 0:
_clients_to_servers[i].append(cur_server)
cur_server = (cur_server + 1) % server_num
return _clients_to_servers[ctx.rank]