Hub 文件

WebDataset

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

WebDataset

WebDataset 是一個用於為大型資料集編寫 I/O 管道的庫。其順序 I/O 和分片功能使其特別適用於將大規模資料集流式傳輸到 DataLoader。

WebDataset 格式

WebDataset 檔案是一個包含一系列資料檔案的 TAR 歸檔。所有具有相同字首的連續資料檔案都被視為同一示例的一部分(例如,影像/音訊檔案及其標籤或元資料)。

標籤和元資料可以存放在 .json 檔案中,也可以存放在 .txt 檔案中(用於標題、描述),或者 .cls 檔案中(用於類索引)。

一個大規模的 WebDataset 由許多稱為分片的檔案組成,每個分片都是一個 TAR 歸檔。每個分片通常約 1GB,但完整的資料集可以達到數 TB!

多模態支援

WebDataset 專為多模態資料集設計,即用於影像、音訊和/或影片資料集。

實際上,由於媒體檔案往往很大,WebDataset 的順序 I/O 支援大塊讀取和緩衝,從而實現最佳的資料載入速度。

以下是支援的資料格式的不完全列表

  • 影像: jpeg, png, tiff
  • 音訊: mp3, m4a, wav, flac
  • 影片: mp4, mov, avi
  • 其他: npy, npz

完整列表會隨時間變化,並取決於具體實現。例如,你可以在原始碼中找到 webdataset 包支援的格式,連結在這裡

流式處理

流式處理 TAR 歸檔速度快,因為它讀取連續的資料塊。它比逐個讀取單獨的資料檔案快幾個數量級。

WebDataset 流式處理無論從磁碟還是雲端儲存讀取,都提供了高速效能,使其成為向 DataLoader 饋送資料的理想格式。

例如,這裡展示瞭如何直接從 Hugging Face 流式傳輸 timm/imagenet-12k-wds 資料集

首先,您需要使用您的 Hugging Face 賬戶登入,例如使用

hf auth login

然後你可以用 WebDataset 流式處理資料集

>>> import webdataset as wds
>>> from huggingface_hub import get_token
>>> from torch.utils.data import DataLoader

>>> hf_token = get_token()
>>> url = "https://huggingface.co/datasets/timm/imagenet-12k-wds/resolve/main/imagenet12k-train-{{0000..1023}}.tar"
>>> url = f"pipe:curl -s -L {url} -H 'Authorization:Bearer {hf_token}'"
>>> dataset = wds.WebDataset(url).decode()
>>> dataloader = DataLoader(dataset, batch_size=64, num_workers=4)

打亂順序

通常,WebDataset 格式的資料集已經打亂順序,可以直接饋送給 DataLoader。但你仍然可以使用 WebDataset 的近似打亂功能重新打亂資料。

除了打亂分片列表,WebDataset 還使用緩衝區來打亂資料集,而不影響速度。

要打亂分片檔案列表並從打亂緩衝區中隨機取樣

>>> buffer_size = 1000
>>> dataset = (
...     wds.WebDataset(url, shardshuffle=True)
...     .shuffle(buffer_size)
...     .decode()
... )
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.