class_docstr: Variable getter which caches variables on the least loaded device.
  
  Variables smaller than a certain threshold are cached on a single specific
  device, as specified in the constructor. All other variables are load balanced
  across a pool of devices, by caching each variable on the least loaded device.
code: def __init__(
      self,
      devices,
      device_for_small_variables,
      small_variable_size_threshold,
  ):
      self.devices = devices
      self.sizes = [0] * len(self.devices)
      self.device_for_small_variables = device_for_small_variables
      self.small_variable_size_threshold = small_variable_size_threshold
  
imports: import operator
  from contextlib import contextmanager
  import tensorflow
  import threading
  from ..compat import tfv1
  from ..tfutils.common import get_tf_version_tuple
  from ..tfutils.scope_utils import cached_name_scope, under_name_scope
  from ..tfutils.varreplace import custom_getter_scope
  from ..utils import logger
  from ..utils.argtools import call_only_once
label_desc: Use image node_id 1 to create a new OverrideCachingDevice object from inherited base classes: object with example: obj = OverrideCachingDevice(devices, device_for_small_variables, small_variable_size_threshold)