Datasets documentation

التخزين السحابي

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v4.8.4).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

التخزين السحابي

مجموعات بيانات Hugging Face

يُعدّ مركز مجموعات البيانات في Hugging Face موطنًا لمجموعة متنامية من مجموعات البيانات التي تغطي مجموعة متنوعة من المجالات والمهام.

إنه أكثر من مجرد تخزين سحابي: فمركز البيانات (Dataset Hub) هو منصة توفر إصدارات للبيانات بفضل git، بالإضافة إلى عارض بيانات (Dataset Viewer) لاستكشاف البيانات، مما يجعله مكانًا مثاليًا لتخزين مجموعات البيانات الجاهزة للذكاء الاصطناعي.

يُظهر هذا الدليل كيفية استيراد البيانات من أنظمة تخزين سحابية أخرى باستخدام تطبيقات أنظمة الملفات من fsspec.

حاويات التخزين في Hugging Face

تُعدّ دلاء التخزين (Storage Buckets) نوعاً من المستودعات على Hugging Face Hub توفر تخزيناً للأشياء يشبه S3، مدعوماً بواجهة تخزين Xet. وعلى عكس مستودعات مجموعات البيانات القائمة على Git، فإن الدلاء غير مُنظَّمة الإصدارات وقابلة للتعديل، وهي مصممة لاستخدامات تتطلب تخزيناً بسيطاً وسريعاً، مثل السجلات، أو المخرجات الوسيطة، أو أي مجموعة كبيرة من الملفات التي لا تحتاج إلى التحكم بالإصدارات.

استيراد البيانات من تخزين سحابي

توفر معظم مزودي التخزين السحابي تطبيقًا لنظام الملفات عبر fsspec، وهو مفيد لاستيراد البيانات من أي مزود سحابي باستخدام نفس الكود. يُعدّ هذا مفيدًا بشكل خاص لنشر مجموعات البيانات على Hugging Face.

اطّلع على الجدول التالي للحصول على بعض الأمثلة على مزودي تخزين السحابي المدعومين:

مزوّد التخزينتنفيذ نظام الملفات
Amazon S3s3fs
Google Cloud Storagegcsfs
Azure Blob/DataLakeadlfs
تخزين سحابة أوراكلocifs

ستُظهر لك هذه الدليل كيفية استيراد ملفات البيانات من أي تخزين سحابي وحفظ مجموعة بيانات على Hugging Face.

لنفترض أننا نرغب في نشر مجموعة بيانات على Hugging Face من ملفات Parquet من تخزين سحابي.

أولاً، أنشئ كائنًا لنظام ملفات التخزين السحابي الخاص بك ثم اذكر الملفات التي ترغب في استيرادها:

>>> import fsspec
>>> fs = fsspec.filesystem("...")  # s3 / gcs / abfs / adl / oci / ...
>>> data_dir = "path/to/my/data/"
>>> pattern = "*.parquet"
>>> data_files = fs.glob(data_dir + pattern)
["path/to/my/data/0001.parquet", "path/to/my/data/0001.parquet", ...]

نشر مجموعة بيانات

ثم يمكنك إنشاء مجموعة بيانات على Hugging Face واستيراد ملفات البيانات، باستخدام على سبيل المثال:

>>> from huggingface_hub import create_repo, upload_folder
>>> from tqdm.auto import tqdm
>>> destination_dataset = "username/my-dataset"
>>> create_repo(destination_dataset, repo_type="dataset")
>>> batch_size = 100
>>> for data_files in batched(tqdm(fs.glob(data_dir + pattern)), batch_size):
...     with TemporaryDirectory() as tmp_dir:
...         tmp_files = [os.path.join(tmp_dir, x[len(data_dir):]) for x in data_files]
...         fs.download(data_files, tmp_files)
...         upload_folder(
...             repo_id=destination_dataset,
...             folder_path=tmp_dir,
...             repo_type="dataset",
...         )

اطّلع على وثائق huggingface_hub الخاصة برفع الملفات هنا إذا كنت تبحث عن خيارات رفع إضافية.

يمكنك الآن في النهاية تحميل مجموعة البيانات باستخدام 🤗 Datasets:

>>> from datasets import load_dataset
>>> ds = load_dataset("username/my-dataset")

استيراد البيانات الخام إلى حاويات التخزين

بديلًا عن ذلك، إذا كنت لا ترغب في نشر مجموعة بيانات بل تريد ببساطة استيراد ملفات بيانات خام في Storage Bucket على Hugging Face، يمكنك استخدام:

>>> from huggingface_hub import create_bucket, sync_bucket
>>> from tqdm.auto import tqdm
>>> from itertools import batched
>>> from tempfile import TemporaryDirectory
>>> import os
>>> create_bucket("username/my-bucket")
>>> bucket_files_location = "hf://buckets/username/my-bucket/path/to/raw/files"
>>> batch_size = 100
>>> for data_files in batched(tqdm(fs.glob(data_dir + pattern)), batch_size):
...     with TemporaryDirectory() as tmp_dir:
...         tmp_files = [os.path.join(tmp_dir, x[len(data_dir):]) for x in data_files]
...         fs.download(data_files, tmp_files)
...         sync_bucket(tmp_dir, bucket_files_location)

اطّلع على وثائق huggingface_hub الخاصة بحاويات التخزين هنا إذا كنت تبحث عن المزيد من خيارات الرفع.

ثم يمكنك لاحقًا تحميل الملفات الخام باستخدام 🤗 Datasets، وتحويلها، ورفع مجموعات البيانات النهائية الجاهزة للذكاء الاصطناعي، على سبيل المثال بطريقة البث:

إذا كانت الملفات بصيغة مدعومة من 🤗 Datasets:

>>> from datasets import load_dataset
>>> ds = load_dataset(bucket_files_location, streaming=True)
>>> ds = ds.map(...).filter(...)
>>> ds.push_to_hub("username/my-dataset", num_proc=4)
>>> # and later
>>> ds = load_dataset("username/my-dataset")

وإلا يمكنك استخدام دالة تحليل ملفات خاصة بك:

>>> from datasets import IterableDataset
>>> from huggingface_hub import hffs
>>> data_files = hffs.find(bucket_files_location)
>>> num_shards = 1024  # For parallelism. PS: every shard should fit in RAM
>>> ds = IterableDataset.from_dict({"data_file": data_files}, num_shards=num_shards)
>>> def parse_data_files(data_files):
...     ...
...     return {"col_1": [...], "col_2": [...]}
>>> ds = ds.map(parse_data_files, batched=True, input_column=["data_file"])
>>> ds.push_to_hub("username/my-dataset", num_proc=4)
>>> # and later
>>> ds = load_dataset("username/my-dataset")
Update on GitHub