Hub documentation
WebDataset
WebDataset
WebDataset, büyük veri kümeleri için G/Ç (I/O) boru hatları yazmak için kullanılan bir kütüphanedir. Sıralı G/Ç ve shard (dilimleme) özellikleri, büyük ölçekli veri kümelerini bir DataLoader'a akışkan hale getirmek için özellikle faydalı kılar.
WebDataset biçimi
Bir WebDataset dosyası, bir dizi veri dosyası içeren bir TAR arşividir. Aynı öneki olan ardışık tüm veri dosyaları, aynı örneğin bir parçası olarak kabul edilir (ör. bir görüntü/ses dosyası ve etiketi veya meta verisi):

Etiketler ve meta veriler bir .json dosyasında, bir .txt dosyasında (bir başlık veya açıklama için) ya da bir .cls dosyasında (bir sınıf indeksi için) bulunabilir.
Büyük ölçekli bir WebDataset, shard adı verilen birçok dosyadan oluşur; her shard bir TAR arşividir. Her shard genellikle ~1GB boyutundadır ancak tam veri seti terabaytlarca olabilir!
Çok modlu destek
WebDataset, çok modlu veri setleri için tasarlanmıştır; yani görüntü, ses ve/veya video veri setleri için.
Gerçekten de, medya dosyaları genellikle oldukça büyük olduğundan, WebDataset'in ardışık I/O'su büyük okumaları ve tamponlamayı mümkün kılar; bu da en iyi veri yükleme hızını sağlar.
Desteklenen veri biçimlerinin tükenmez bir listesi:
- image: jpeg, png, tiff
- ses: mp3, m4a, wav, flac
- video: mp4, mov, avi
- diğer: npy, npz
Tam liste zamanla değişir ve uygulamaya bağlıdır. Örneğin, webdataset paketinin hangi formatları desteklediğini kaynak kodda burada bulabilirsiniz.
Akış
TAR arşivlerinin akışla işlenmesi, ardışık veri bloklarını okuduğu için hızlıdır. Ayrı veri dosyalarını tek tek okumaktan kat kat daha hızlı olabilir.
WebDataset akışı, hem diskten hem de bulut depolamadan okuma sırasında yüksek hızda performans sunar; bu da onu bir DataLoader için beslemek üzere ideal bir format haline getirir:

Örneğin, timm/imagenet-12k-wds veri setini doğrudan Hugging Face'ten akış olarak almak için:
Önce Hugging Face hesabınızla oturum açmanız gerekir, örneğin şunu kullanarak:
hf auth loginArdından veri setini WebDataset ile akış olarak işleyebilirsiniz:
>>> 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)Karıştır
Genel olarak, WebDataset biçimindeki veri kümeleri zaten karıştırılmış ve bir DataLoader'a beslenmeye hazırdır. Ancak WebDataset'in yaklaşık karıştırma (approximate shuffling) özelliğiyle verileri yeniden karıştırabilirsiniz.
Parça listesini karıştırmakla birlikte WebDataset, hızda hiçbir maliyet olmadan bir veri setini karıştırmak için bir tampon kullanır:

Parçalı dosya listesini karıştırmak ve karıştırma tamponundan rastgele örnek almak için:
>>> buffer_size = 1000
>>> dataset = (
... wds.WebDataset(url, shardshuffle=True)
... .shuffle(buffer_size)
... .decode()
... )