tf.data.experimental.service.from_dataset_id
Создаёт набор данных, который считывает данные из службы tf.data.
tf.data.experimental.service.from_dataset_id(
processing_mode,
service,
dataset_id,
element_spec=None,
job_name=None,
consumer_index=None,
num_consumers=None,
max_outstanding_requests=None,
data_transfer_protocol=None,
target_workers='AUTO'
)
Это полезно, когда набор данных регистрируется одним процессом, а затем используется другим процессом. Когда один и тот же процесс и регистрирует, и считывает набор данных, проще использовать tf.data.experimental.service.distribute вместо этого.
Перед использованием from_dataset_id, набор данных должен быть зарегистрирован в службе tf.data с помощью tf.data.experimental.service.register_dataset. register_dataset возвращает идентификатор зарегистрированного набора данных. Это dataset_id, которое следует передать в from_dataset_id.
Аргумент element_spec указывает tf.TypeSpec для элементов, производимых набором данных. В настоящее время element_spec необходимо явно указать и он должен соответствовать набору данных, зарегистрированному в dataset_id. element_spec по умолчанию равен None, чтобы в будущем мы могли поддерживать автоматическое обнаружение element_spec путём запроса к службе tf.data.
tf.data.experimental.service.distribute — это удобный метод, который объединяет register_dataset и from_dataset_id в преобразование набора данных. См. документацию для tf.data.experimental.service.distribute для получения более подробной информации о том, как работает from_dataset_id.
dispatcher = tf.data.experimental.service.DispatchServer()
dispatcher_address = dispatcher.target.split("://")[1]
worker = tf.data.experimental.service.WorkerServer(
tf.data.experimental.service.WorkerConfig(
dispatcher_address=dispatcher_address))
dataset = tf.data.Dataset.range(10)
dataset_id = tf.data.experimental.service.register_dataset(
dispatcher.target, dataset)
dataset = tf.data.experimental.service.from_dataset_id(
processing_mode="parallel_epochs",
service=dispatcher.target,
dataset_id=dataset_id,
element_spec=dataset.element_spec)
print(list(dataset.as_numpy_iterator()))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
| Аргументы | |
|---|---|
processing_mode | tf.data.experimental.service.ShardingPolicy, определяющий, как распределить набор данных между tf.data-рабочими. См. tf.data.experimental.service.ShardingPolicy для получения подробностей. Для обратной совместимости processing_mode также можно задать строки "parallel_epochs" или "distributed_epoch", которые соответственно эквивалентны ShardingPolicy.OFF и ShardingPolicy.DYNAMIC. |
service | Строка или кортеж, указывающий, как подключиться к службе tf.data. Если это строка, она должна быть в формате [<protocol>://]<address>, где <address> идентифицирует адрес диспетчера, а <protocol> необязательно используется для переопределения протокола по умолчанию. Если это кортеж, он должен быть (протокол, адрес). |
dataset_id | Идентификатор набора данных для чтения. Этот идентификатор возвращается register_dataset при регистрации набора данных в службе tf.data. |
element_spec | Вложенная структура tf.TypeSpec, представляющая тип элементов, производимых набором данных. Этот аргумент требуется только внутри tf.function. Используйте tf.data.Dataset.element_spec для получения спецификации элемента для данного набора данных. |
job_name | (Необязательно.) Название задачи. Если указано, должно быть непустой строкой. Этот аргумент позволяет нескольким наборам данных совместно использовать одну задачу. По умолчанию набор данных создаёт анонимные, исключительно собственные задачи. |
consumer_index | (Необязательно.) Индекс потребителя в диапазоне от 0 до num_consumers. Должен быть указан вместе с num_consumers. При указании потребители будут читать из задачи в строгом порядке круговой очереди вместо стандартного порядка «первый пришёл — первый обслужен». |
num_consumers | (Необязательно.) Количество потребителей, которые будут потреблять из задачи. Должен быть указан вместе с consumer_index. При указании потребители будут читать из задачи в строгом порядке круговой очереди вместо стандартного порядка «первый пришёл — первый обслужен». При указании num_consumers, набор данных должен обладать бесконечной мощностью, чтобы предотвратить преждевременное исчерпание данных у поставщика и разсинхронизацию потребителей. |
max_outstanding_requests | (Необязательно.) Ограничение на количество элементов, которые могут быть запрошены одновременно. Вы можете использовать этот параметр для управления объёмом используемой памяти, поскольку distribute не будет использовать более element_size * max_outstanding_requests памяти. |
data_transfer_protocol | (Необязательно.) Протокол, используемый для передачи данных с помощью службы tf.data. По умолчанию данные передаются с помощью gRPC. |
target_workers | (Необязательно.) Рабочие, с которых нужно читать. Если "AUTO", среда выполнения tf.data сама определяет, с каких рабочих читать. Если "ANY", читает с любых рабочих службы tf.data. Если "LOCAL", читает только с локальных рабочих службы tf.data в процессе. "AUTO" подходит для большинства случаев, но пользователи могут указать и другие цели. Например, "LOCAL" помогает избежать RPC и копирования данных, если каждый рабочий TF соположен с рабочим службы tf.data. Потребители совместно используемой задачи должны использовать ту же target_workers. По умолчанию "AUTO". |
| Возвращаемое значение | |
|---|---|
tf.data.Dataset, который считывает из службы tf.data. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/data/experimental/service/from_dataset_id