code: def cli(
      csession_id, federation_session_id, rank, parties, data_dir, proc
  ):
      from fate.arch.launchers.logger import set_up_logging
      from fate.arch.launchers.context_helper import init_local_context
  
      # set up logging
      set_up_logging(rank)
  
      # init context
      parties = [tuple(p.split(":")) for p in parties]
      if rank >= len(parties):
          raise ValueError(
              f"rank {rank} is out of range {len(parties)}"
          )
      party = parties[rank]
      if not csession_id:
          csession_id = f"{federation_session_id}_{party[0]}_{party[1]}"
      ctx = init_local_context(
          csession_id, federation_session_id, party, parties, data_dir
      )
  
      # init crypten
      from fate.ml.mpc import MPCModule
  
      ctx.mpc.init()
  
      # get proc cls
      module_name, cls_name = proc.split(":")
      module = importlib.import_module(module_name)
      cls = getattr(module, cls_name)
      assert issubclass(
          cls, MPCModule
      ), f"{cls} is not a subclass of MPCModule"
  
      inst = cls()
      inst.fit(ctx)
  
label_desc: Use image node_id 1 for calling a global function with example usage: cli(csession_id, federation_session_id, rank, parties, data_dir, proc) without return types