code: def create_run_config(hp, output_dir=None):
      """Create a run config.
  
      Args:
        hp: model hyperparameters
        output_dir: model's output directory, defaults to output_dir flag.
  
      Returns:
        a run config
      """
      save_ckpt_steps = max(
          FLAGS.iterations_per_loop, FLAGS.local_eval_frequency
      )
      save_ckpt_secs = FLAGS.save_checkpoints_secs or None
      if save_ckpt_secs:
          save_ckpt_steps = None
      assert FLAGS.output_dir
      tpu_config_extra_kwargs = {}
      if FLAGS.tpu_job_name is not None:
          tpu_config_extra_kwargs["tpu_job_name"] = FLAGS.tpu_job_name
  
      if getattr(hp, "mtf_mode", False):
          save_ckpt_steps = None  # Disable the default saver
          save_ckpt_secs = None  # Disable the default saver
          tpu_config_extra_kwargs = {
              "num_cores_per_replica": 1,
              "per_host_input_for_training": tf_estimator.tpu.InputPipelineConfig.BROADCAST,
          }
  
      # the various custom getters we have written do not play well together yet.
      # TODO(noam): ask rsepassi for help here.
      daisy_chain_variables = (
          hp.daisy_chain_variables
          and hp.activation_dtype == "float32"
          and hp.weight_dtype == "float32"
      )
      return trainer_lib.create_run_config(
          model_name=FLAGS.model,
          model_dir=output_dir or os.path.expanduser(FLAGS.output_dir),
          master=FLAGS.master,
          iterations_per_loop=FLAGS.iterations_per_loop,
          num_shards=FLAGS.tpu_num_shards,
          log_device_placement=FLAGS.log_device_placement,
          save_checkpoints_steps=save_ckpt_steps,
          save_checkpoints_secs=save_ckpt_secs,
          keep_checkpoint_max=FLAGS.keep_checkpoint_max,
          keep_checkpoint_every_n_hours=FLAGS.keep_checkpoint_every_n_hours,
          num_gpus=FLAGS.worker_gpu,
          gpu_order=FLAGS.gpu_order,
          num_async_replicas=FLAGS.worker_replicas,
          gpu_mem_fraction=FLAGS.worker_gpu_memory_fraction,
          enable_graph_rewriter=FLAGS.enable_graph_rewriter,
          use_tpu=FLAGS.use_tpu,
          use_tpu_estimator=FLAGS.use_tpu_estimator,
          xla_jit_level=FLAGS.xla_jit_level,
          schedule=FLAGS.schedule,
          no_data_parallelism=hp.no_data_parallelism,
          optionally_use_dist_strat=FLAGS.optionally_use_dist_strat,
          daisy_chain_variables=daisy_chain_variables,
          ps_replicas=FLAGS.ps_replicas,
          ps_job=FLAGS.ps_job,
          ps_gpu=FLAGS.ps_gpu,
          sync=FLAGS.sync,
          worker_id=FLAGS.worker_id,
          worker_job=FLAGS.worker_job,
          random_seed=FLAGS.random_seed,
          tpu_infeed_sleep_secs=FLAGS.tpu_infeed_sleep_secs,
          inter_op_parallelism_threads=FLAGS.inter_op_parallelism_threads,
          log_step_count_steps=FLAGS.log_step_count_steps,
          intra_op_parallelism_threads=FLAGS.intra_op_parallelism_threads,
          tpu_config_extra_kwargs=tpu_config_extra_kwargs,
          cloud_tpu_name=FLAGS.cloud_tpu_name,
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import contextlib
  import os
  import sys
  from tensor2tensor import models
  from tensor2tensor import problems
  from tensor2tensor.data_generators import problem
  from tensor2tensor.utils import cloud_mlengine
  from tensor2tensor.utils import contrib
  from tensor2tensor.utils import decoding
  from tensor2tensor.utils import flags
  from tensor2tensor.utils import hparams_lib
  from tensor2tensor.utils import mlperf_log
  from tensor2tensor.utils import registry
  from tensor2tensor.utils import trainer_lib
  from tensor2tensor.utils import usr_dir
  import tensorflow.compat.v1
  from tensorflow.compat.v1 import estimator
label_desc: Use image node_id 4 for calling a global function with example usage: create_run_config(hp, output_dir) and returns: trainer_lib