Hub documentation

WebDataset

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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 login

Ardı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()
... )
Update on GitHub