class_docstr: A special trainer that builds the graph (if given a tower function)
  and does nothing in each step.
  It is used to only run the callbacks.
  
  Note that `steps_per_epoch` and `max_epochs` are still valid options.
class_docstr_tok: ["A","special","trainer","that","builds","the","graph","(","if","given","a","tower","function",")","and","does","nothing","in","each","step",".","It","is","used","to","only","run","the","callbacks",".","Note","that","`","steps_per_epoch","`","and","`","max_epochs","`","are","still","valid","options","."]
code: def run_step(self):
      self.hooked_sess.run([])
  
imports: import multiprocessing
  import os
  import sys
  import tensorflow
  from tensorpack.compat import tfv1
  from ..callbacks import CallbackFactory, RunOp
  from ..graph_builder.distributed import DistributedParameterServerBuilder, DistributedReplicatedBuilder
  from ..graph_builder.training import AsyncMultiGPUBuilder, SyncMultiGPUParameterServerBuilder, SyncMultiGPUReplicatedBuilder
  from ..graph_builder.utils import override_to_local_variable
  from ..input_source import FeedfreeInput, QueueInput
  from ..tfutils import get_global_step_var
  from ..tfutils.common import get_tf_version_tuple
  from ..tfutils.distributed import get_distributed_session_creator
  from ..tfutils.sesscreate import NewSessionCreator
  from ..tfutils.tower import TrainTowerContext
  from ..utils import logger
  from ..utils.argtools import map_arg
  from ..utils.develop import HIDE_DOC, deprecated
  from .tower import SingleCostTrainer
label_desc: Use image node_id 1 for calling the NoOpTrainer obj's underlying member method code with example usage: obj.run_step() without return types