# المكتبات

يدعم مركز البيانات (Datasets Hub) عدة مكتبات في منظومة المصادر المفتوحة. بفضل مكتبة [huggingface_hub بلغة بايثون](/docs/huggingface_hub)، يصبح من السهل تمكين مشاركة مجموعات البيانات الخاصة بك على المركز. ويسعدنا أن نرحب في المركز بمجموعة من المكتبات مفتوحة المصدر التي تدفع مجال تعلم الآلة إلى الأمام.

## جدول المكتبات

تلخص الجدول أدناه المكتبات المدعومة ومستوى تكاملها.

| المكتبة                             | الوصف                                                                                                                    | التحميل من Hub | البث من Hub | الرفع إلى المستودع | البث إلى Hub | ملفات Parquet المُحسّنة |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ | ----------------- | --------------- | ----------- | ------------- | ----------------------- |
| [Daft](./datasets-daft)             | محرك بيانات لمعالجة البيانات متعددة الوسائط على نطاق واسع، مع واجهة أصلية بلغة بايثون.                                        | ✅                | ✅              | ✅          | ✅            | ✅                      |
| [Dask](./datasets-dask)             | مكتبة للحوسبة المتوازية والموزعة توسّع نطاق منظومة Python وPyData الحالية.                               | ✅                | ✅              | ✅          | ✅            | ✅*                     |
| [مصمم البيانات](./datasets-data-designer) | إطار عمل NVIDIA NeMo لتوليد مجموعات بيانات اصطناعية باستخدام نماذج اللغة الكبيرة.                                                      | ✅                | ❌              | ✅          | ❌            | ❌                      |
| [المجموعات](./datasets-usage)        | 🤗 Datasets هي مكتبة للوصول إلى مجموعات البيانات ومشاركتها في مجالات الصوت، ورؤية الحاسوب، ومعالجة اللغة الطبيعية (NLP). | ✅                | ✅              | ✅          | ✅            | ✅                      |
| [DuckDB](./datasets-duckdb)         | نظام إدارة قواعد بيانات SQL OLAP يعمل داخل العملية.                                                                                | ✅                | ✅              | ✅          | ✅            | ❌                      |
| [Lance](./datasets-lance)           | تنسيق بحيرة بيانات مفتوح للذكاء الاصطناعي متعدد الوسائط.                                                                                    | ✅                | ✅              | ❌          | ❌            | ❌                      |
| [Pandas](./datasets-pandas)         | أدوات تحليل البيانات بلغة بايثون.                                                                                                  | ✅                | ❌              | ✅          | ❌            | ✅*                     |
| [Polars](./datasets-polars)         | مكتبة إطار بيانات (DataFrame) مبنية على محرك استعلامات OLAP.                                                                            | ✅                | ✅              | ✅          | ❌            | ❌                      |
| [PyArrow](./datasets-pyarrow)       | Apache Arrow هو تنسيق أعمدي وأدوات لصياغة البيانات السريعة والتحليلات في الذاكرة.                             | ✅                | ✅              | ✅          | ✅            | ✅*                     |
| [Spark](./datasets-spark)           | أداة لمعالجة البيانات على نطاق واسع في الوقت الفعلي ضمن بيئة موزعة.                                                      | ✅                | ✅              | ✅          | ✅            | ✅                      |
| [WebDataset](./datasets-webdataset) | مكتبة لكتابة خطوط أنابيب الإدخال/الإخراج للمجموعات البيانات الكبيرة.                                                                             | ✅                | ✅              | ❌          | ❌            | ❌                      |

_ * يتطلب تمرير حِجج إضافية لكتابة ملفات Parquet مُحسّنة_

تتوفر في مكتبات أخرى تكاملات لتدقيق مجموعات البيانات: [Embedding Atlas](./datasets-embedding-atlas) (تصور التضمينات)، [Fenic](./datasets-fenic) (المعالجة الدلالية)، [FiftyOne](./datasets-fiftyone) (تصور الصور وتدقيقها).

## مكتبات معالجة البيانات

### البث

يتيح بثّ مجموعة البيانات (Dataset streaming) التكرار على مجموعة بيانات من Hugging Face بشكل تدريجي دون الحاجة إلى تنزيلها بالكامل. فهو يوفر مساحة القرص المحلية لأن البيانات لا تُحفظ على القرص أبدًا. كما يوفر الذاكرة لأن جزءًا صغيرًا فقط من مجموعة البيانات يُستخدم في كل مرة. ويوفر الوقت أيضًا، إذ لا حاجة إلى تنزيل البيانات قبل بدء الحمل على وحدة المعالجة المركزية (CPU) أو وحدة معالجة الرسوميات (GPU).

بالإضافة إلى البث *من* Hugging Face، تدعم العديد من المكتبات أيضاً البث *إلى* Hugging Face. وبالتالي، يمكنها تشغيل خطوط أنابيب بث من طرف إلى طرف: البث من مصدر والكتابة إلى Hugging Face بشكل تدريجي، وغالباً ما تتداخل خطوات التنزيل والرفع والمعالجة.

لمزيد من التفاصيل حول كيفية تنفيذ البث، راجع توثيق مكتبة تدعم البث (انظر الجدول أعلاه) أو توثيق [مجموعات البيانات البثية](./datasets-streaming) إذا كنت ترغب في بث مجموعات البيانات من Hugging Face بنفسك.

### ملفات Parquet المُحسّنة

تم تحسين ملفات Parquet على Hugging Face لتحسين كفاءة التخزين، وتسريع عمليات التنزيل والرفع، وتمكين بث مجموعات البيانات وتحريرها بكفاءة.

الملفات المُحسَّنة من نوع Parquet هي ملفات Parquet تتضمن ميزات إضافية:

* يحسّن [Parquet Content Defined Chunking](https://huggingface.co/blog/parquet-cdc) ملفات Parquet من أجل [Xet](https://huggingface.co/docs/hub/en/xet/index)، وهو نظام تخزين Hugging Face. فهو يسرّع عمليات الرفع والتنزيل بفضل إزالة التكرار على أساس المقاطع، ويتيح تحرير الملفات بكفاءة
* يسرّع فهرس الصفحة عمليات التصفية أثناء البث المباشر ويتيح وصولاً عشوائياً فعالاً، على سبيل المثال في [عارض مجموعة البيانات](https://huggingface.co/docs/dataset-viewer)

تتطلب بعض المكتبات حجة إضافية لكتابة ملفات Parquet المحسّنة مثل `Pandas` و`PyArrow`:

* `use_content_defined_chunking=True` لتفعيل تقطيع Parquet المعرّف بالمحتوى، من أجل [إزالة التكرار](https://huggingface.co/blog/parquet-cdc) و[التحرير](./datasets-editing)
* `write_page_index=True` لتضمين فهرس الصفحات في بيانات Parquet الوصفية، من أجل [التدفق والوصول العشوائي](./datasets-streaming)

## مكتبات التدريب

مكتبات التدريب التي تتكامل مع مجموعات بيانات Hub لتدريب النماذج. تُظهر الجدول أدناه قدرات البث المباشر - أي القدرة على التدريب على مجموعات البيانات دون الحاجة إلى تنزيلها أولاً.

| المكتبة | الوصف | البث من Hub |
| ------- | ----------- | --------------- |
| [Axolotl](https://docs.axolotl.ai/docs/streaming.html) | إطار عمل منخفض الكود لتدريب نماذج اللغة الكبيرة | ✅ |
| [LlamaFactory](https://github.com/hiyouga/LLaMA-Factory) | ضبط موحّد لأكثر من 100 نموذج لغة كبير | ✅ |
| [جُمل التحويلات](https://sbert.net/docs/sentence_transformer/training_overview.html) | تضمينات النصوص والتشابه الدلالي | ✅ |
| [Transformers](https://huggingface.co/docs/transformers/trainer) | 🤗 Transformers Trainer لضبط نماذج | ✅ |
| [TRL](https://huggingface.co/docs/trl) | تدريب نماذج اللغة الكبيرة باستخدام التعلم المعزز (SFT، DPO، GRPO) | ✅ |
| [Unsloth](https://docs.unsloth.ai) | ضبط دقيق سريع للنماذج اللغوية الكبيرة (تسريع مرتين، تقليل الذاكرة بنسبة 70%) | ✅ |
| [LeRobot](https://huggingface.co/docs/lerobot/main/en/training_dataset_streaming) | تدريب سياسات الروبوتات | ✅ |

### البث من Hub

يتيح البث (Streaming) التدريب على مجموعات بيانات ضخمة دون الحاجة إلى تنزيلها أولاً. وهذا مفيد عندما:
- مجموعة بياناتك كبيرة جداً بحيث لا يمكن تخزينها على القرص
- تريد البدء بالتدريب فوراً
- أنت تستخدم [HF Jobs](https://huggingface.co/docs/hub/jobs) حيث يوفر الحوسبة المتقاربة بثًا أسرع

أدت التحسينات الأخيرة إلى زيادة كفاءة البث [بما يصل إلى 100 ضعف](https://huggingface.co/blog/streaming-datasets) مع بدء تشغيل أسرع، وجلب مسبق، وتوسع أفضل إلى العديد من العمال.

**ملاحظة:** يتطلب البث تحديد `max_steps` في حُجج التدريب لأن طول مجموعة البيانات غير معروف، كما أنه يستخدم الخلط القائم على المخازن المؤقتة. راجع [مجموعات البيانات البثية](./datasets-streaming) لمزيد من التفاصيل.

### التسجيل في Hub

يمكن لبعض الأدوات بث بيانات التدريب مرة أخرى إلى Hub أثناء التدريب:

- **[Trackio](https://github.com/gradio-app/trackio)**: يبث مقاييس التدريب إلى مجموعة بيانات على Hub في الوقت الفعلي

## تكامل مكتبات البيانات والأدوات مع Hub

صُمم هذا الدليل للمطورين وصانعي مكتبات البيانات وأدواتها الذين يرغبون في التكامل مع Hugging Face Hub. سواء كنت تبني مكتبة لمعالجة البيانات، أو أداة تحليل، أو أي برنامج يحتاج إلى التفاعل مع مجموعات البيانات، فإن هذه الوثائق ستساعدك على تنفيذ تكامل مع Hub.

يتناول الدليل:

- الأساليب الممكنة لتحميل البيانات من Hub إلى مكتبتك/أداتك
- الأساليب الممكنة لرفع البيانات من مكتبتك/أداتك إلى المستودع

### تحميل البيانات من Hub

إذا كان لديك مكتبة للتعامل مع البيانات، فقد يكون من المفيد لمستخدميك تحميل البيانات من Hub.

بشكل عام، نقترح الاعتماد على مكتبة موجودة مسبقًا مثل `datasets` أو `pandas` أو `polars` للقيام بذلك، ما لم يكن لديك سبب محدد لتنفيذ ذلك بنفسك. إذا كنت بحاجة إلى مزيد من التحكم في عملية التحميل، يمكنك استخدام مكتبة `huggingface_hub`، والتي ستتيح لك، على سبيل المثال، تنزيل مجموعة فرعية محددة من الملفات من مستودع.

يمكنك العثور على مزيد من المعلومات حول تحميل البيانات من Hub [هنا](https://huggingface.co/docs/hub/datasets-downloading).

#### التكامل عبر عارض مجموعات البيانات وملفات Parquet

توفر عارض مجموعات البيانات في Hub ونظام التحويل إلى Parquet طريقة موحّدة للتكامل مع مجموعات البيانات بغض النظر عن صيغتها الأصلية. تُعد هذه البنية التحتية طبقة تكامل موثوقة بين Hub والمكتبات الخارجية.

إذا لم يكن مجموعة البيانات بصيغة Parquet بالفعل، فإن Hub يقوم تلقائيًا بتحويل أول 5 جيجابايت من كل مجموعة بيانات إلى صيغة Parquet لتشغيل عارض مجموعات البيانات وتوفير أنماط وصول متسقة. توفر هذه المعايير عدة فوائد لتكاملات المكتبات:

- أنماط وصول متسقة إلى البيانات بغض النظر عن التنسيق الأصلي
- معاينة واستكشاف المجموعات البيانات المدمجة من خلال عارض مجموعات البيانات الخاص بالمركز. يمكن أيضًا تضمين عارض مجموعات البيانات كإطار مضمّن (iframe) في تطبيقاتك، مما يسهّل توفير معاينات غنية لمجموعات البيانات. لمزيد من المعلومات حول تضمين العارض، راجع [توثيق تضمين عارض مجموعات البيانات](https://huggingface.co/docs/hub/en/datasets-viewer-embed).
- تخزين عمودي فعّال مُحسَّن للاستعلام. على سبيل المثال، يمكنك استخدام أداة مثل [DuckDB](https://duckdb.org/) للاستعلام عن مجموعة فرعية محددة من البيانات أو تصفيتها.
- Parquet مدعوم بشكل جيد عبر منظومة تعلم الآلة وعلوم البيانات.

لمزيد من التفاصيل حول العمل مع واجهة برمجة تطبيقات Dataset Viewer، راجع [توثيق واجهة برمجة تطبيقات Dataset Viewer](https://huggingface.co/docs/dataset-viewer/index)

### رفع البيانات إلى Hub

يتناول هذا القسم الأساليب الممكنة لإضافة القدرة على رفع البيانات إلى Hub في مكتبتك، أي كيفية تنفيذ طريقة `push_to_hub`.

ستغطي هذه الدليل ثلاث طرق رئيسية لرفع البيانات إلى Hub:

- باستخدام مكتبة `datasets` وطريقة `push_to_hub`
- استخدام `pandas` للكتابة إلى Hub
- باستخدام مكتبة `huggingface_hub` وطريقة `upload_folder`

#### استخدم مكتبة `datasets`

أكثر الطرق مباشرةً لدفع البيانات إلى Hub هو الاعتماد على طريقة [`push_to_hub`](https://huggingface.co/docs/datasets/main/en/package_reference/main_classes#datasets.Dataset.push_to_hub) الموجودة مسبقًا في مكتبة `datasets`. ستتعامل طريقة `push_to_hub` تلقائيًا مع:

- إنشاء المستودع
- تحويل مجموعة البيانات إلى Parquet
- تقسيم مجموعة البيانات إلى أجزاء مناسبة
- رفع البيانات

على سبيل المثال، إذا كان لديك مكتبة لتوليد بيانات اصطناعية تُرجع قائمة من القواميس، يمكنك ببساطة القيام بما يلي:

```python
from datasets import Dataset

data = [{"prompt": "Write a cake recipe", "response": "Measure 1 cup ..."}]
ds = Dataset.from_list(data)
ds.push_to_hub("USERNAME_OR_ORG/repo_ID")
```

أمثلة على هذا النوع من التكامل:

- [Distilabel](https://github.com/argilla-io/distilabel/blob/8ad48387dfa4d7bd5639065661f1975dcb44c16a/src/distilabel/distiset.py#L77)

#### اعتمد على تكامل المكتبات الموجودة مع Hub

يمكن لكلٍّ من Polars وPandas وDask وSpark وDuckDB وDaft الكتابة إلى مستودع في Hugging Face Hub. راجع [جدول المكتبات](#libraries-table) أعلاه لمزيد من التفاصيل.

إذا كنت تستخدم بالفعل إحدى هذه المكتبات في كودك، فإن إضافة القدرة على الدفع إلى Hub أمر بسيط. على سبيل المثال، إذا كان لديك مكتبة لتوليد بيانات اصطناعية يمكنها إرجاع Pandas DataFrame، فإليك الكود الذي ستحتاج إلى كتابته إلى Hub:

```python
from huggingface_hub import HfApi

# Initialize the Hub API
hf_api = HfApi()

# Create a repository (if it doesn't exist)
hf_api.create_repo(repo_id="username/my-dataset", repo_type="dataset", exist_ok=True)

# Convert your data to a DataFrame and save directly to the Hub
df.to_parquet("hf://datasets/username/my-dataset/data.parquet")
```

#### باستخدام مكتبة huggingface_hub بلغة بايثون

توفر مكتبة `huggingface_hub` بلغة بايثون نهجًا أكثر مرونة لرفع البيانات إلى الـ Hub. تتيح لك المكتبة رفع ملفات محددة أو مجموعات فرعية من الملفات إلى مستودع. وهذا مفيد إذا كان لديك مجموعة بيانات كبيرة لا ترغب في تحويلها إلى Parquet، أو ترغب في رفع مجموعة فرعية محددة من الملفات، أو تريد مزيدًا من التحكم في بنية المستودع.

يعتمد على حالتك الاستخدامية، يمكنك رفع ملف أو مجلد في نقطة محددة من كودك، أي تصدير التعليقات التوضيحية من أداة إلى Hub عند نقر المستخدم على "push to Hub". على سبيل المثال،

```python
from huggingface_hub import HfApi
api = HfApi()

api.upload_folder(
    folder_path="/my-cool-library/data-folder",
    repo_id="username/my-dataset",
    repo_type="dataset",
    commit_message="Push annotations to Hub",
    allow_patterns="*.jsonl",
)
```

يمكنك العثور على مزيد من المعلومات حول طرق رفع البيانات إلى Hub [هنا](https://huggingface.co/docs/huggingface_hub/main/en/guides/upload).

بديلًا عن ذلك، توجد حالات قد ترغب فيها في رفع البيانات في الخلفية، على سبيل المثال، البيانات الاصطناعية التي يتم توليدها كل 10 دقائق. في هذه الحالة يمكنك استخدام فئة `CommitScheduler` من مكتبة `huggingface_hub`. لمزيد من التفاصيل، راجع [توثيق الرفع المجدول](https://huggingface.co/docs/huggingface_hub/main/en/guides/upload#scheduled-uploads).

يمكنك الاطلاع على مثال لاستخدام هذا النهج لرفع البيانات إلى Hub في

- مكتبة [fastdata](https://github.com/AnswerDotAI/fastdata/blob/main/nbs/00_core.ipynb)
- مساحة العرض [magpie](https://huggingface.co/spaces/davanstrien/magpie/blob/fc79672c740b8d3d098378dca37c0f191c208de0/app.py#L67) هذه

## دعم إضافي

بالنسبة للأسئلة التقنية المتعلقة بالدمج، لا تتردد في التواصل مع فريق مجموعات البيانات على datasets@huggingface.co.

