Get desktop application:
View/edit binary Protocol Buffers messages
Listens to incoming requests for expert computation
find out recipient's DHTID and possibly update its routing table
(optional) sender's own node info, same behavior as in DHT.rpc_ping
set to True if sender wants to validate that he is accessible and synchronized
respondent's node id, for you to update routing table
recipient's local DHT time - used to soft-synchronize peers
if validate = True, this flag asserts that the sender is available for ping
request a node to store one or multiple data items (key - value - expiration)
three lists of the same length representing dht keys, dht values and expiration
keys in the form of DHTID.generate(raw_key).to_bytes()
serialized subkeys for DictionaryDHTValue type. None means no subkey
serialized value for i-th key
expirations for i-th key (type = DHTExpiration)
if in_cache[i], store i-th key in cache, else store normally
(optional) sender's own node info, same behavior as in DHT.rpc_ping
for every key, True means store accepted, False means store rejected/failed
respondent's node id, for you to update routing table
for given keys, request values (if stored) or a list of peers that are likely to have them
a list of DHTID search keys encoded as bytes
optional, same behavior as in DHT.ping
for each item, return value/expiration (if found) and nearest peers
respondent's node id, for you to update routing table
Used in:
,in case of a protocol violation, this will be the error message
a unique group identifier, same as in MessageFromLeader
sender's rpc peer_id, used for coordination
either peer's local tensor part (rpc input) or group average of this part (rpc output)
reserved user-extendable metadata
Used in:
(message has no fields)
Used as request type in: ConnectionHandler.backward, ConnectionHandler.forward
Used as response type in: ConnectionHandler.backward, ConnectionHandler.forward
Used in:
NONE | REGULAR | DICTIONARY
n/a | serialized value | serialized DictionaryDHTValue with serialized fields
n/a | expiration time | DictionaryDHTValue.latest_expiration_time
two aligned arrays: DHTIDs and PeerIDs for nearest peers (sorted by XOR distance)
DHTIDs of the nearest peers serialized with node_id.to_bytes()
libp2p PeerIDs of the nearest peers
A hash that describes follower's tensors (shapes, num tensors, etc)
Follower would like to **begin** all_reduce by this point in time
optional metadata that is gathered from all peers (e.g. batch size or current loss)
if True, the incoming averager is a client with no capacity for averaging
group key identifying an All-Reduce bucket, e.g my_averager.0b011011101
Used in:
,Default value that should not be used explicitly
"Dear maybe leader, will you have me in your group as a follower?"
"I accept you in my group, you now commit to responding to me"
"We can begin allreduce now. These are your peers."
"I am running allreduce with you, here's a part of my tensor that you should aggregate"
"I aggregated your part with others and here's the average for that part"
"I have not declared my group id yet, how the heck did you even find me? Go away."
"I am not a group a leader. Go ask my leader instead."
"I will not accept you. I cannot guarantee that we begin before you expire."
"I will not accept you. I am not averaging the samy type of tensors as you."
"I will not accept your request, your group id does not match with any groups i'm in."
"I will not accept you, i already have exactly the same peer id in my current group."
"I will not accept you, my group already contains too many peers."
"I'm not available at the moment. Please, get lost."
"You did something so unspeakable that i don't have a special code for that."
"I messed up, we will have to stop allreduce because of that."
"[from peer during allreduce] I no longer want to participate in AllReduce."
"[from leader] The group is closed. Go find another group."
"I will not accept you. My current group key differs (maybe you used my older key)."
a unique identifier of this group, only valid until allreduce is finished/failed
if peer is already in a group, it'll provide us with a peer id of its leader
a sequence of peers, each responsible for one shard during averaging
metadata (gather) from all groupmates in the same order as their peer ids
Used in:
, , , , ,note: both node_id and port are optional: if specified, ask peer to add you to its routing table; if either node_id or port is absent, simply request recipient info (for client-only mode)
sender's own node id serialized with DHTID.to_bytes()
Used in:
, ,Used in:
, ,Used in:
Used in:
, , ,