class_docstr: Partitioned PS StrategyBuilder with Greedy Load Balancer.
  
  Determine the number of partitions for each partition-able
  variable by finding its minimum divisor along the first axis.
  
  Then, use a greedy load balancer (determined by memory usage)
  to assign the partitions to Parameter Servers. This means that,
  unlike the standard PS StrategyBuilder, that a variable can be
  spread across multiple servers using this StrategyBuilder.
code: def __init__(
      self, local_proxy_variable=False, sync=True, staleness=0
  ):
      self._local_proxy_variable = local_proxy_variable
      self._sync = sync
      self._staleness = staleness
      if self._staleness > 0:
          assert (
              self._sync
          ), "If staleness is positive, sync has to be set True."
      self.loads = {}
  
file_path: autodist/autodist/strategy/uneven_partition_ps_strategy.py
imports: from math import ceil
  from tensorflow.python.framework import tensor_shape
  from autodist.const import ENV
  from autodist.kernel.common.op_info import CONTROL_FLOW_OPS
  from autodist.kernel.common.utils import get_consumers, get_op_name
  from autodist.kernel.partitioner import PartitionerConfig
  from autodist.strategy.base import Strategy, StrategyBuilder
  from autodist.proto import strategy_pb2
label_desc: Use image node_id 1 to create a new UnevenPartitionedPS object from inherited base classes: StrategyBuilder with example: obj = UnevenPartitionedPS(local_proxy_variable, sync, staleness)