code: def split_load_kwargs(inputs, kwargs, ctx_list, batch_axis=0):
      r"""Split with support for kwargs dictionary"""
  
      def split_map(obj):
          if isinstance(obj, NDArray):
              return split_and_load(
                  obj, ctx_list, batch_axis, even_split=False
              )
          if isinstance(obj, tuple) and len(obj) > 0:
              return list(zip(*map(split_map, obj)))
          if isinstance(obj, list) and len(obj) > 0:
              return list(map(list, zip(*map(split_map, obj))))
          if isinstance(obj, dict) and len(obj) > 0:
              return list(
                  map(type(obj), zip(*map(split_map, obj.items())))
              )
          return [obj for _ in ctx_list]
  
      inputs = split_map(inputs) if inputs else []
      kwargs = split_map(kwargs) if kwargs else []
      if len(inputs) < len(kwargs):
          inputs.extend([() for _ in range(len(kwargs) - len(inputs))])
      elif len(kwargs) < len(inputs):
          kwargs.extend([{} for _ in range(len(inputs) - len(kwargs))])
      inputs = tuple(inputs)
      kwargs = tuple(kwargs)
      return inputs, kwargs
  
imports: import threading
  from mxnet import autograd
  from mxnet.gluon.utils import split_and_load
  from mxnet.ndarray import NDArray
label_desc: Use image node_id 1 for calling a global function with example usage: split_load_kwargs(inputs, kwargs, ctx_list, batch_axis) and returns: inputs,  kwargs, unknown, split_and_load, list, list, list