當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。