Hub 文件
WebDataset
並獲得增強的文件體驗
開始使用
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()
... )