class_docstr: PS StrategyBuilder with Greedy Load Balancing.
  
  The Load Balancing is determined by total memory
  usage for storing variables, i.e. we always assign
  a variable to the current lowest-memory-usage
  Parameter Server.
docstr: Creates a NodeConfig specifying synchronization with Parameter Servers.
  
  Args:
      var (Variable): The variable to generate a config for.
  
  Returns:
      strategy_pb2.Strategy.Node: the config for the node.
code: def _gen_ps_node_config(
      self, var, local_proxy_variable, sync, staleness
  ):
      """
      Creates a NodeConfig specifying synchronization with Parameter Servers.
  
      Args:
          var (Variable): The variable to generate a config for.
  
      Returns:
          strategy_pb2.Strategy.Node: the config for the node.
      """
      min_ps = min(self.loads, key=self.loads.get)
      self.loads[min_ps] += byte_size_load_fn(var)
  
      node = strategy_pb2.Strategy.Node()
      node.var_name = var.name
      node.PSSynchronizer.reduction_destination = min_ps
      node.PSSynchronizer.local_replication = local_proxy_variable
      node.PSSynchronizer.sync = sync
      node.PSSynchronizer.staleness = staleness
      return node
  
file_path: autodist/autodist/strategy/ps_lb_strategy.py
imports: from tensorflow.python.framework import tensor_shape
  from autodist.strategy.base import Strategy, StrategyBuilder
  from autodist.proto import strategy_pb2
label_desc: Use image node_id 3 for calling the PSLoadBalancing obj's underlying member method code with example usage: obj._gen_ps_node_config(var, local_proxy_variable, sync, staleness) and returns: node