class_docstr: A simple parameter server. Clients can store tensors, accumulate, and
  get tensors by string key. Operations on the parameter server are globally
  synchronous.
  
  FIXME: torchbiggraph.rpc should be fixed to not require torch.serialization,
  then most of this code can be removed.
  FIXME: torch.distributed.recv should not require you to provide the
  tensor to write to; the type and size should be sent in the header.
  That would simplify this code a lot.
class_docstr_tok: ["A","simple","parameter","server",".","Clients","can","store","tensors",",","accumulate",",","and","get","tensors","by","string","key",".","Operations","on","the","parameter","server","are","globally","synchronous",".","FIXME",":","torchbiggraph.rpc","should","be","fixed","to","not","require","torch.serialization",",","then","most","of","this","code","can","be","removed",".","FIXME",":","torch.distributed.recv","should","not","require","you","to","provide","the","tensor","to","write","to",";","the","type","and","size","should","be","sent","in","the","header",".","That","would","simplify","this","code","a","lot","."]
docstr: ProcessGroup to use for communicating tensor data while metadata (e.g. cmds,
  keys, shapes) is communicated over self._metadata_pg(). In other words, these
  pgs handle most of the data transfer volume. Multiple pgs are used in order to
  max out the NIC.
code: def _data_pgs(self) -> Optional[List["td.ProcessGroup"]]:
      """
      ProcessGroup to use for communicating tensor data while metadata (e.g. cmds,
      keys, shapes) is communicated over self._metadata_pg(). In other words, these
      pgs handle most of the data transfer volume. Multiple pgs are used in order to
      max out the NIC.
      """
      return self.groups
  
imports: import logging
  import multiprocessing
  import queue
  import time
  import traceback
  from functools import lru_cache
  from typing import Callable, Dict, List, Optional, Sequence
  import torch
  import torch.distributed
  import torch.multiprocessing
  from torchbiggraph.distributed import init_process_group, Startable
  from torchbiggraph.types import CharTensorType, Rank
  from torchbiggraph.util import allocate_shared_tensor, split_almost_equally, tag_logs_with_process_name
label_desc: Use image node_id 3 for calling the ParameterServer obj's underlying member method code with example usage: obj._data_pgs() and returns: self