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,
cross_trainer_cache=None,
target_workers='AUTO'
) -> tf.data.Dataset
Это полезно, когда набор данных регистрируется одним процессом, а затем используется другим процессом. Когда один и тот же процесс одновременно регистрирует и считывает данные из набора данных, проще использовать 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. |
cross_trainer_cache | (Необязательно.) Если указан объект CrossTrainerCache, итерация набора данных будет совместно использоваться между одновременно работающими трейнерами. Подробнее см. https://www.tensorflow.org/api_docs/python/tf/data/experimental/service#sharing_tfdata_service_with_concurrent_trainers. |
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/api_docs/python/tf/data/experimental/service/from_dataset_id