tf.contrib.tpu.InfeedQueue
Вспомогательный объект для построения очереди ввода на устройстве.
tf.contrib.tpu.InfeedQueue(
number_of_tuple_elements=None, tuple_types=None, tuple_shapes=None,
shard_dimensions=None, name=None
)
Объект InfeedQueue строит операции для очереди, выполняющие добавление и извлечение элементов на стороне хоста и устройства соответственно, и гарантирует соответствие их типов и форм.
| Аргументы | |
|---|---|
number_of_tuple_elements | количество тензоров, подаваемых атомарно в очередь; должно быть указано, если не может быть выведено из других аргументов. |
tuple_types | если не None, список типов элементов очереди. |
tuple_shapes | если не None, список форм элементов очереди. |
shard_dimensions | если не None, список измерений, по которым элементы очереди должны быть разделены при автоматическом распараллеливании. |
name | имя очереди. |
| Исключения | |
|---|---|
ValueError | если number_of_tuple_elements ≤ 0; или number_of_tuple_arguments, tuple_types, tuple_shapes и shard_dimensions все None; или длина tuple_types, tuple_shapes или shard_dimensions не равна number_of_tuple_elements; или любой элемент shard_dimensions не может быть преобразован в Dimension. |
TypeError | если любой элемент tuple_types или tuple_shapes не может быть преобразован в dtype или TensorShape соответственно. |
| Атрибуты | |
|---|---|
number_of_shards | Получает количество фрагментов для использования в InfeedQueue. |
number_of_tuple_elements | Возвращает количество элементов кортежа InfeedQueue. |
shard_dimensions | Получает размерность фрагмента каждого элемента кортежа. |
sharding_policies | Возвращает стратегии фрагментации элементов кортежа InfeedQueue. |
tuple_shapes | Возвращает формы элементов кортежа InfeedQueue. |
tuple_types | Возвращает типы элементов кортежа InfeedQueue. |
Методы
freeze
freeze()
Замораживает InfeedQueue, чтобы больше нельзя было его изменять.
Конфигурация неявно замораживается перед генерацией каких-либо операций на стороне хоста или устройства. Конфигурацию нельзя заморозить, пока не будут заданы типы и формы элементов кортежа.
| Исключения | |
|---|---|
ValueError | если типы или формы элементов кортежа не заданы. |
generate_dequeue_op
generate_dequeue_op(
tpu_device=0
)
Генерирует операцию на стороне устройства для извлечения кортежа из очереди.
Неявно замораживает конфигурацию очереди, если она не заморожена, что вызовет ошибки, если формы и типы не полностью определены.
| Аргументы | |
|---|---|
tpu_device | порядковый номер устройства TPU, на котором должна быть размещена инструкция ввода. Если None, явное размещение не будет выполнено, и пользователю необходимо вызвать этот API в соответствующем пространстве устройства TPU. Код XLA потерпит неудачу, если инструкция извлечения TPU не привязана ни к какому устройству. |
| Возвращает | |
|---|---|
| Список выходов, соответствующих фрагменту извлеченного из ввода XLA, подходящий для использования в реплицированном блоке. |
| Исключения | |
|---|---|
ValueError | если типы или формы элементов кортежа не заданы; или если операция извлечения уже сгенерирована. |
generate_enqueue_ops
generate_enqueue_ops(
sharded_inputs, tpu_ordinal_function=None, placement_function=None
)
Генерирует операции на стороне хоста для добавления фрагментов кортежа.
sharded_inputs — список, по одному для каждого фрагмента, списков тензоров. sharded_inputs[0] — кортеж тензоров, используемых для подачи фрагмента 0, если очередь. Возвращает операции на стороне хоста, которые необходимо выполнить для добавления фрагментированного кортежа. Операция для фрагмента i расположена совместно с входными данными для фрагмента i.
Неявно замораживает конфигурацию очереди, если она не заморожена. Если конфигурация уже заморожена и несовместима с типами и формами sharded_inputs, будет поднято исключение.
| Аргументы | |
|---|---|
sharded_inputs | список списков тензоров. Длина внешнего списка определяет количество фрагментов. Каждый внутренний список указывает типы и формы кортежей в соответствующем фрагменте. |
tpu_ordinal_function | если не None, функция, которая принимает индекс фрагмента в качестве входных данных и возвращает порядковый номер устройства TPU, на котором должен размещаться ввод фрагмента. tpu_ordinal_function должен быть установлен, если входные данные размещены на устройствах CPU. |
placement_function | если не None, функция, которая принимает индекс фрагмента в качестве входных данных и возвращает устройство хоста, на котором должна быть размещена операция добавления. |
| Возвращает | |
|---|---|
| Список операций на стороне хоста, по одной для каждого фрагмента, которые при совместном выполнении добавлены в очередь полный элемент ввода. |
| Исключения | |
|---|---|
ValueError | если конфигурация очереди была предварительно заморожена, и формы элементов sharded_inputs несовместимы с замороженной конфигурацией; или если формы элементов sharded_inputs не образуют согласованный нефрагментированный кортеж; или если элементы кортежа имеют разные ограничения устройств. |
TypeError | если конфигурация очереди была предварительно заморожена, и типы элементов sharded_inputs несовместимы с замороженной конфигурацией; или если типы элементов sharded_inputs не образуют согласованный нефрагментированный кортеж. |
set_configuration_from_input_tensors
set_configuration_from_input_tensors(
input_tensors
)
Устанавливает формы и типы элементов кортежа очереди.
input_tensors — список тензоров, типы и формы которых используются для установки конфигурации очереди.
| Аргументы | |
|---|---|
input_tensors | список тензоров тех же типов и форм, что и желаемый кортеж очереди. |
| Исключения | |
|---|---|
ValueError | если input_tensors не является списком длины self.number_of_tuple_elements |
set_configuration_from_sharded_input_tensors
set_configuration_from_sharded_input_tensors(
input_tensors
)
Устанавливает формы и типы элементов кортежа очереди.
input_tensors — список списков тензоров, типы и формы которых используются для установки конфигурации очереди. Длина внешнего списка — необходимое количество фрагментов, а каждый внутренний список — кортеж тензоров для определения типов и форм соответствующего фрагмента. Этот метод зависит от размерности фрагмента и замораживает политику фрагментации.
| Аргументы | |
|---|---|
input_tensors | список списков тензоров. Длина внешнего списка соответствует требуемому количеству фрагментов, а каждый внутренний список — размер и форма желаемой конфигурации соответствующего фрагмента. |
| Исключения | |
|---|---|
ValueError | если любой внутренний список не является списком длины self.number_of_tuple_elements; или внутренние списки не объединяются, чтобы образовать согласованную нефрагментированную форму. |
TypeError | если типы тензоров во внутренних списках не совпадают. |
set_number_of_shards
set_number_of_shards(
number_of_shards
)
Устанавливает количество фрагментов для использования в InfeedQueue.
| Аргументы | |
|---|---|
number_of_shards | количество способов разделения InfeedQueue. |
| Исключения | |
|---|---|
ValueError | если number_of_shards не > 0; или политики заморожены, и number_of_shards был уже установлен на другое значение. |
set_shard_dimensions
set_shard_dimensions(
shard_dimensions
)
Устанавливает shard_dimension каждого элемента очереди.
shard_dimensions должен быть списком длины self.number_of_tuple_elements, и каждый элемент должен быть преобразуем в Dimension, совместимую с self.tuple_shapes.
| Аргументы | |
|---|---|
shard_dimensions | размеры каждого элемента очереди. |
| Исключения | |
|---|---|
ValueError | если shard_dimensions не имеет длины self.number_of_tuple_elements; или элемент shard_dimensions не может быть преобразован в Dimension; или элемент shard_dimensions является Dimension, выходящий за пределы диапазона для соответствующей формы элемента кортежа. |
set_tuple_shapes
set_tuple_shapes(
tuple_shapes
)
Устанавливает форму каждого элемента очереди.
tuple_shapes должен быть списком длины self.number_of_tuple_elements, и каждый элемент должен быть преобразуем в TensorShape.
| Аргументы | |
|---|---|
tuple_shapes | формы каждого элемента очереди. |
| Исключения | |
|---|---|
ValueError | если tuple_shapes не имеет длины self.number_of_tuple_elements. |
TypeError | если элемент tuple_shapes не может быть преобразован в TensorShape. |
set_tuple_types
set_tuple_types(
tuple_types
)
Устанавливает тип каждого элемента очереди.
tuple_types должен быть списком длины self.number_of_tuple_elements, и каждый элемент должен быть преобразуем в тип данных.
| Аргументы | |
|---|---|
tuple_types | типы каждого элемента очереди. |
| Исключения | |
|---|---|
ValueError | если tuple_types не имеет длины self.number_of_tuple_elements. |
TypeError | если элемент tuple_types не может быть преобразован в тип данных. |
split_inputs_and_generate_enqueue_ops
split_inputs_and_generate_enqueue_ops(
inputs, device_assignment=None, placement_function=None,
tpu_ordinal_function=None
)
НЕЭФФЕКТИВНО ПРИ РАБОТЕ С МНОЖЕСТВОМ СИСТЕМ.
Генерирует операции для добавления кортежа в очередь.
Этот метод работает плохо, так как принимает весь вход на одном хосте, разделяет его и распределяет по всем ядрам. Он включен только для упрощения примеров в учебниках.
inputs — это список тензоров, используемых для подпитки очереди. Каждый вход разделяется на self.number_of_shards фрагментов. Возвращает операцию для добавления каждого фрагмента в очередь. Операция для фрагмента i размещается на устройстве placement_function(i).
Неявно замораживает конфигурацию очереди, если она еще не заморожена. Если конфигурация уже заморожена и несовместима с типами и формами входов, произойдёт ошибка.
| Аргументы | |
|---|---|
| inputs: список тензоров, который указывает типы и формы кортежа очереди. | |
device_assignment | если не None, TPU DeviceAssignment. Если device_assignment не None, но placement_function и ordinal_function равны None, тогда device_assignment будет использоваться для размещения infeeds на первых k TPU фрагментах, где k — число фрагментов в очереди. Если все три значения None, тогда используются стандартные функции размещения и порядкового номера. placement_function: если не None, функция, которая принимает номер фрагмента в качестве входных данных и возвращает строку устройства, указывающую, на каком устройстве должен быть размещен входящий фрагмент. Если placement_function и tpu_ordinal_function равны None, входные данные фрагментируются в порядке очереди по устройствам в системе. tpu_ordinal_function: если не None, функция, которая принимает номер фрагмента в качестве входных данных и возвращает порядковый номер TPU-устройства, на котором должен быть размещен входящий фрагмент. Если placement_function и tpu_ordinal_function равны None, входные данные фрагментируются в порядке очереди по устройствам в системе. |
| Возвращает | |
|---|---|
| Список операций на хосте, по одной для каждого фрагмента, которые при совместном выполнении добавят в очередь элемент полного размера. |
| Исключения | |
|---|---|
ValueError | если конфигурация очереди ранее была заморожена, а формы элементов в inputs несовместимы с замороженной конфигурацией. |
TypeError | если конфигурация очереди ранее была заморожена, а типы элементов в inputs несовместимы с замороженной конфигурацией. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/contrib/tpu/InfeedQueue