当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python 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'
)

参数

  • processing_mode tf.data.experimental.service.ShardingPolicy 指定如何在 tf.data 工作人员之间分片数据集。有关详细信息,请参阅tf.data.experimental.service.ShardingPolicy。为了向后兼容,processing_mode 也可以设置为字符串 "parallel_epochs""distributed_epoch" ,它们分别等效于 ShardingPolicy.OFFShardingPolicy.DYNAMIC
  • service 指示如何连接到 tf.data 服务的字符串或元组。如果它是一个字符串,它应该采用 [<protocol>://]<address> 格式,其中 <address> 标识调度程序地址,并且可以选择使用 <protocol> 来覆盖要使用的默认协议。如果它是一个元组,它应该是(协议,地址)。
  • dataset_id 要读取的数据集的 id。当数据集注册到 tf.data 服务时,此 id 由 register_dataset 返回。
  • element_spec tf.TypeSpec 的嵌套结构,表示数据集生成的元素类型。此参数仅在 tf.function 中是必需的。使用 tf.data.Dataset.element_spec 获取给定数据集的元素规范。
  • job_name (可选。)作业的名称。如果提供,它必须是一个非空字符串。这个论点使得多个数据集共享同一个作业成为可能。默认行为是数据集创建匿名的专有作业。
  • consumer_index (可选。)从 0num_consumers 范围内的消费者索引。必须与 num_consumers 一起指定。指定后,消费者将以严格的 round-robin 顺序从作业中读取,而不是默认的 first-come-first-served 顺序。
  • num_consumers (可选。)将从作业中消费的消费者数量。必须与 consumer_index 一起指定。指定后,消费者将以严格的 round-robin 顺序从作业中读取,而不是默认的 first-come-first-served 顺序。当指定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" ,仅从本地 in-processs tf.data 服务人员读取。 "AUTO" 适用于大多数情况,而用户可以指定其他目标。例如,"LOCAL" 有助于避免 RPC 和数据复制,如果每个 TF 工作人员与 tf.data 服务工作人员位于同一位置。共享作业的使用者必须使用相同的 target_workers 。默认为 "AUTO"

返回

当数据集由一个进程注册,然后在另一个进程中使用时,这很有用。当同一个进程同时注册和读取数据集时,使用tf.data.experimental.service.distribute 会更简单。

在使用 from_dataset_id 之前,数据集必须已使用 tf.data.experimental.service.register_dataset 向 tf.data 服务注册。 register_dataset 返回已注册数据集的数据集 ID。那就是应该传递给 from_dataset_iddataset_id

element_spec 参数表示数据集生成的元素的tf.TypeSpec。目前 element_spec 必须明确指定,并匹配在 dataset_id 下注册的数据集。 element_spec 默认为None,这样以后我们可以支持通过查询tf.data服务自动发现element_spec

tf.data.experimental.service.distribute 是一种将register_datasetfrom_dataset_id 组合成数据集转换的便捷方法。有关from_dataset_id 工作原理的更多详细信息,请参阅tf.data.experimental.service.distribute 的文档。

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]

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.data.experimental.service.from_dataset_id。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。