code: def create_estimator(model_name,
                       hparams,
                       run_config,
                       schedule="train_and_evaluate",
                       decode_hparams=None,
                       use_tpu=False,
                       use_tpu_estimator=False,
                       use_xla=False):
    
    model_fn = t2t_model.T2TModel.make_estimator_model_fn(
        model_name, hparams, decode_hparams=decode_hparams, use_tpu=use_tpu)
  
  
    del use_xla
    if use_tpu or use_tpu_estimator:
      problem = hparams.problem
      batch_size = (
          problem.tpu_batch_size_per_shard(hparams) *
          run_config.tpu_config.num_shards)
      mlperf_log.transformer_print(
          key=mlperf_log.INPUT_BATCH_SIZE, value=batch_size)
      if getattr(hparams, "mtf_mode", False):
        batch_size = problem.tpu_batch_size_per_shard(hparams)
      predict_batch_size = batch_size
      if decode_hparams and decode_hparams.batch_size:
        predict_batch_size = decode_hparams.batch_size
      if decode_hparams and run_config.tpu_config:
        decode_hparams.add_hparam("iterations_per_loop",
                                  run_config.tpu_config.iterations_per_loop)
      estimator = tf.contrib.tpu.TPUEstimator(
          model_fn=model_fn,
          model_dir=run_config.model_dir,
          config=run_config,
          use_tpu=use_tpu,
          train_batch_size=batch_size,
          eval_batch_size=batch_size if "eval" in schedule else None,
          predict_batch_size=predict_batch_size,
          experimental_export_device_assignment=True)
    else:
      estimator = tf.estimator.Estimator(
          model_fn=model_fn,
          model_dir=run_config.model_dir,
          config=run_config,
      )
    return estimator
docs: Create a T2T Estimator.