code: def build_estimator(model_dir, model_type, model_column_fn, inter_op, intra_op, ctx):
    
    wide_columns, deep_columns = model_column_fn()
    hidden_units = [100, 75, 50, 25]
  
    # Create a tf.estimator.RunConfig to ensure the model is run on CPU, which
    # trains faster than GPU for this model.
    # Note: adding device_filter to fix: https://github.com/tensorflow/tensorflow/issues/21745
    run_config = tf.estimator.RunConfig().replace(
        session_config=tf.ConfigProto(device_count={'GPU': 0},
                                      device_filters=['/job:ps', '/job:%s/task:%d' % (ctx.job_name, ctx.task_index)],
                                      inter_op_parallelism_threads=inter_op,
                                      intra_op_parallelism_threads=intra_op))
  
    if model_type == 'wide':
      return tf.estimator.LinearClassifier(
          model_dir=model_dir,
          feature_columns=wide_columns,
          config=run_config)
    elif model_type == 'deep':
      return tf.estimator.DNNClassifier(
          model_dir=model_dir,
          feature_columns=deep_columns,
          hidden_units=hidden_units,
          config=run_config)
    else:
      return tf.estimator.DNNLinearCombinedClassifier(
          model_dir=model_dir,
          linear_feature_columns=wide_columns,
          dnn_feature_columns=deep_columns,
          dnn_hidden_units=hidden_units,
          config=run_config)
docs: Build an estimator appropriate for the given model type.