Hub documentation
WebDataset
WebDataset
WebDataset هو مكتبة لكتابة خطوط أنابيب الإدخال/الإخراج (I/O) للمجموعات البيانات الكبيرة. تجعل ميزات الإدخال/الإخراج التسلسلي والتقسيم (sharding) منه أداة مفيدة بشكل خاص لبث مجموعات البيانات واسعة النطاق إلى DataLoader.
صيغة WebDataset
ملف WebDataset هو أرشيف TAR يحتوي على سلسلة من ملفات البيانات. تُعتبر جميع ملفات البيانات المتتالية التي تحمل البادئة نفسها جزءًا من المثال نفسه (على سبيل المثال، ملف صورة/صوت ووسمه أو بياناته الوصفية):

يمكن أن تكون التسميات والبيانات الوصفية في ملف .json، أو في .txt (لتعليق أو وصف)، أو في .cls (لمؤشر فئة).
يتكوّن WebDataset كبير الحجم من العديد من الملفات تُسمى الشرائح (shards)، حيث تكون كل شريحة أرشيفًا بصيغة TAR. غالبًا ما تكون كل شريحة بحجم ~1GB، لكن حجم مجموعة البيانات الكاملة قد يصل إلى عدة تيرابايت!
دعم الوسائط المتعددة
صُمم WebDataset للبيانات متعددة الوسائط، أي مجموعات البيانات التي تحتوي على صور و/أو صوت و/أو فيديو.
في الواقع، بما أن ملفات الوسائط تميل إلى أن تكون كبيرة الحجم، فإن الإدخال/الإخراج التسلسلي في WebDataset يتيح عمليات قراءة كبيرة وتخزين مؤقت، مما يؤدي إلى أفضل سرعة لتحميل البيانات.
فيما يلي قائمة غير شاملة بأنواع البيانات المدعومة:
- الصورة: jpeg, png, tiff
- audio: mp3, m4a, wav, flac
- فيديو: mp4, mov, avi
- other: npy, npz
تتطور القائمة الكاملة مع مرور الوقت وتعتمد على التنفيذ. على سبيل المثال، يمكنك معرفة الصيغ التي يدعمها حزمة webdataset في كود المصدر هنا.
البث
يكون بثّ أرشيفات TAR سريعًا لأنه يقرأ مقاطع متتالية من البيانات. ويمكن أن يكون أسرع بمقدار مرتبة أو أكثر من قراءة ملفات البيانات المنفصلة واحدًا تلو الآخر.
يوفر بث WebDataset أداءً عالي السرعة سواء عند القراءة من القرص أو من التخزين السحابي، مما يجعله تنسيقًا مثاليًا لتغذية DataLoader:

على سبيل المثال، فيما يلي كيفية بث مجموعة بيانات timm/imagenet-12k-wds مباشرةً من Hugging Face:
أولاً، تحتاج إلى تسجيل الدخول بحساب 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()
... )