Hub documentation
WebDataset
WebDataset
WebDataset adalah pustaka untuk menulis pipeline I/O untuk dataset besar. Fitur I/O berurutan dan sharding-nya membuatnya sangat berguna untuk streaming dataset berskala besar ke DataLoader.
Format WebDataset
File WebDataset adalah arsip TAR yang berisi serangkaian file data. Semua file data berurutan dengan prefiks yang sama dianggap sebagai bagian dari contoh yang sama (misalnya, file gambar/audio dan label atau metadatanya):

Label dan metadata dapat berada dalam file .json, dalam .txt (untuk caption, deskripsi), atau dalam .cls (untuk indeks kelas).
WebDataset berskala besar terdiri dari banyak file yang disebut shard, di mana setiap shard adalah arsip TAR. Setiap shard biasanya berukuran ~1GB, tetapi dataset lengkapnya dapat mencapai beberapa terabyte!
Dukungan multimodal
WebDataset dirancang untuk dataset multimodal, yaitu dataset gambar, audio, dan/atau video.
Memang, karena file media cenderung berukuran cukup besar, I/O berurutan dari WebDataset memungkinkan pembacaan dan penyangga dalam jumlah besar, sehingga menghasilkan kecepatan pemuatan data terbaik.
Berikut adalah daftar format data yang didukung (tidak lengkap):
- image: jpeg, png, tiff
- audio: mp3, m4a, wav, flac
- video: mp4, mov, avi
- lainnya: npy, npz
Daftar lengkapnya berkembang seiring waktu dan bergantung pada implementasi. Misalnya, Anda dapat menemukan format apa saja yang didukung oleh paket webdataset di kode sumber di sini.
Streaming
Streaming arsip TAR cepat karena membaca chunk data yang berurutan. Hal ini bisa jauh lebih cepat, bahkan berorde magnitudo, daripada membaca file data terpisah satu per satu.
Streaming WebDataset menawarkan kinerja berkecepatan tinggi baik saat membaca dari disk maupun dari penyimpanan cloud, yang menjadikannya format ideal untuk memberi makan DataLoader:

Sebagai contoh, berikut adalah cara untuk streaming dataset timm/imagenet-12k-wds langsung dari Hugging Face:
Pertama, Anda perlu Masuk dengan akun Hugging Face Anda, misalnya menggunakan:
hf auth loginLalu Anda dapat melakukan streaming dataset dengan 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)Acak
Secara umum, dataset dalam format WebDataset sudah diacak dan siap diberikan ke DataLoader. Namun, Anda masih dapat mengacak ulang data dengan pengacakan perkiraan dari WebDataset.
Selain mengacak daftar shard, WebDataset menggunakan buffer untuk mengacak dataset tanpa mengorbankan kecepatan:

Untuk mengacak daftar file yang dipartisi dan mengambil sampel secara acak dari buffer pengacakan:
>>> buffer_size = 1000
>>> dataset = (
... wds.WebDataset(url, shardshuffle=True)
... .shuffle(buffer_size)
... .decode()
... )