(
    ctx, input_fn, inputs_structure_recorder, host_device, host_id)
return enqueue_ops_fn, captured_infeed_queue
Generates infeed enqueue ops for per-core input_fn on a single host.
Generates infeed enqueue ops for per-core input_fn on a single host.
Generates infeed enqueue ops for per - core input_fn on a single host .
def generate_per_core_enqueue_ops_fn_for_host(
    ctx, input_fn, inputs_structure_recorder, host_device, host_id):
  """Generates infeed enqueue ops for per-core input_fn on a single host."""
  captured_infeed_queue = _CapturedObject()
  tpu_ordinal_function_impl = ctx.tpu_ordinal_function(host_id)

  def enqueue_ops_fn():
    """A fn returns enqueue_ops."""
    num_cores_per_host = ctx.num_of_cores_per_host
    per_host_sharded_inputs = []
    for core_ordinal in range(num_cores_per_host):
      with ops.name_scope('ordinal_%d' % (core_ordinal)):
        user_context = tpu_context.TPUContext(
            internal_ctx=ctx,
            input_device=host_device,
            invocation_index=host_id * ctx.num_of_cores_per_host + core_ordinal)
        inputs = _Inputs.from_input_fn(input_fn(user_context))
        if inputs.is_dataset:
          raise TypeError(
              '`input_fn` returning `Dataset`  is not yet supported in '
              'per-Core input pipeline deployment yet. Please set '
              'TPUConfig.per_host_input_for_training to True or return '
              '`features` and `labels` from `input_fn`')
        features, labels = inputs.features_and_labels()

        inputs_structure_recorder.validate_and_record_structure(
            features, labels)
        flattened_inputs = (
            inputs_structure_recorder.flatten_features_and_labels(
                features, labels))
        per_host_sharded_inputs.append(flattened_inputs)

    infeed_queue = tpu_feed.InfeedQueue(
        number_of_tuple_elements=len(per_host_sharded_inputs[0]))
    captured_infeed_queue.capture(infeed_queue)

    per_host_enqueue_ops = infeed_queue.generate_enqueue_ops(
        per_host_sharded_inputs, tpu_ordinal_function=tpu_ordinal_function_impl)
    return per_host_enqueue_ops

  return enqueue_ops_fn, captured_infeed_queue
def generate_per_core_enqueue_ops_fn_for_host ( ctx , input_fn , inputs_structure_recorder , host_device , host_id ) : captured_infeed_queue = _CapturedObject ( ) tpu_ordinal_function_impl = ctx . tpu_ordinal_function ( host_id ) def enqueue_ops_fn ( ) : """A fn returns enqueue_ops.""" num_cores_per_host = ctx . num_of_cores_per_host per_host_sharded_inputs = [ ] for core_ordinal in range ( num_cores_per_host ) : with ops . name_scope ( 'ordinal_%d' % ( core_ordinal ) ) : user_context = tpu_context . TPUContext ( internal_ctx = ctx , input_device = host_device , invocation_index = host_id * ctx . num_of_cores_per_host + core_ordinal ) inputs = _Inputs . from_input_fn ( input_fn ( user_context ) ) if inputs . is_dataset : raise TypeError ( '`input_fn` returning `Dataset`  is not yet supported in ' 'per-Core input pipeline deployment yet. Please set ' 'TPUConfig.per_host_input_for_training to True or return ' '`features` and `labels` from `input_fn`' ) features , labels = inputs . features_and_labels ( ) inputs_structure_recorder . validate_and_record_structure ( features , labels ) flattened_inputs = ( inputs_structure_recorder . flatten_features_and_labels ( features , labels ) ) per_host_sharded_inputs . append ( flattened_inputs ) infeed_queue = tpu_feed . InfeedQueue ( number_of_tuple_elements = len ( per_host_sharded_inputs [ 0 ] ) ) captured_infeed_queue . capture ( infeed_queue ) per_host_enqueue_ops = infeed_queue . generate_enqueue_ops ( per_host_sharded_inputs , tpu_ordinal_function = tpu_ordinal_function_impl ) return per_host_enqueue_ops return enqueue_ops_fn , captured_infeed_queue