Hub documentation

Zephon

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Zephon

Zephon هو مُحمِّل بيانات لتدريب نماذج الأساس، طوّرته DatologyAI. يقوم بتجزئة البيانات وتجميعها وخلطها أثناء تشغيل التدريب، ويمنح نفس الدفعات عند تغيير عدد وحدات معالجة الرسومات (المرونة الحتمية). تقرأ Zephon مجموعات البيانات مباشرةً من Hugging Face Hub باستخدام مسارات hf://.

التثبيت

يضيف الإصدار الإضافي hf دعمًا لمجموعات بيانات Hub وملفات Parquet. كما تتطلب الأمثلة أدناه transformers لعملية الترميز:

pip install "zephon[hf]" transformers

تحميل مجموعة بيانات من المستودع

مرّر مسار hf:// إلى Dataset.from_path. يحدد هذا المسار مجموعة بيانات، وإعداداً، وقسماً، على سبيل المثال قسم train من إعداد sample-10BT الخاص بـ HuggingFaceFW/fineweb-edu. تقرأ Zephon مجموعات بيانات Hub عبر ذاكرة التخزين المؤقت للتجزئة الخاصة بها، لذا يجب عليك تفعيل ذاكرة التخزين المؤقت. ضع ذاكرة التخزين المؤقت على قرص محلي سريع وحدد حدّاً لحجمها:

from zephon import Pipeline
from zephon.io import CacheOptions, Dataset, StoreOptions
from zephon.work import MixtureSpec, StaticMixtureWorkSource

dataset = Dataset.from_path("fineweb_edu", "hf://HuggingFaceFW/fineweb-edu/sample-10BT/train")
work_source = StaticMixtureWorkSource(
    datasets=[dataset],
    mixture=MixtureSpec({"fineweb_edu": 1.0}),
    seed=42,
)
cache = CacheOptions(enabled=True, root="/tmp/zephon-cache", limit_bytes=50 << 30)  # 50 GiB

pipeline = (
    Pipeline(work_source)
    .options(io_options=StoreOptions(cache=cache))
    .tokenize(tokenizer_id="gpt2", field="text")
    .pack_flat(max_length=2049, algorithm="wrap")
    .batch(microbatch_size=8)
)

for batch in pipeline:
    tensors = batch.to_training(return_labels=True)
    print(tensors["input_ids"].shape, tensors["labels"].shape)  # (8, 2048) (8, 2048)
    break

tokenize يحوّل عمود text إلى معرّفات الرموز. يدمج pack_flat المستندات المُرمَّزة في تسلسلات من max_length رمزًا. اضبط max_length على طول السياق زائد واحد: عند استخدام return_labels=True، يُزاح to_training التسميات بموضع واحد، بحيث يصبح لكلٍّ من input_ids وlabels طول السياق.

يُعدّ Pipeline قابلًا للتكرار في بايثون، لذا يمكنك استخدامه في أي حلقة تدريب. يقوم Zephon بتنزيل شريحة كاملة قبل قراءتها، لذا قد يستغرق الدفعة الأولى بعض الوقت.

للقراءة من مجموعات البيانات الخاصة أو المحمية، سجّل الدخول أولاً بحسابك على Hugging Face، على سبيل المثال باستخدام hf auth login. كما يقرأ Zephon متغير البيئة HF_TOKEN.

صيغة المسار

تتبع مسارات hf:// الخاصة بمجموعات بيانات Hub في Zephon هذا التنسيق:

hf://{org}/{name}[@[{revision}][~{source}]]/[{config}/]{split}
  • revision: فرع أو وسم أو التزام. القيمة الافتراضية هي main. يقوم Zephon بتثبيت المسار إلى التزام عند تحميل مجموعة البيانات، بحيث تقرأ جميع الرتب نفس الملفات.
  • source: original يقرأ الملفات المرفوعة إلى المستودع، بينما parquet يقرأ التحويل التلقائي إلى Parquet الخاص بـ Hub. ضع المصدر بعد @، على سبيل المثال @~parquet. افتراضيًا، يقرأ Zephon الملفات المرفوعة عندما يدعم صيغتها، ويستخدم تحويل Parquet إذا لم يكن كذلك.
  • config: تكوين مجموعة البيانات. قم بتضمينه عندما تحتوي مجموعة البيانات على أكثر من تكوين واحد.
المساريقرأ
hf://HuggingFaceFW/fineweb-edu/sample-10BT/trainجزء train من تكوين sample-10BT، من الفرع main
hf://HuggingFaceFW/fineweb-edu@v1.4.0/sample-10BT/trainنفس التقسيم من فرع v1.4.0
hf://yahma/alpaca-cleaned@~parquet/trainتقسيم train الناتج عن التحويل التلقائي إلى Parquet

مسارات Zephon تُسمّي مجموعة بيانات وقسمًا منها، وليس ملفًا. فهي لا تستخدم مسارات الملفات hf://datasets/... التي يستخدمها pandas وPolars وDuckDB. استخدم hf://HuggingFaceFW/fineweb-edu/sample-10BT/train وليس hf://datasets/HuggingFaceFW/fineweb-edu/sample-10BT/train.

خلط مجموعات البيانات

لتدريب النموذج على عدة مجموعات بيانات من Hub، أضفها إلى مصدر العمل مع تحديد نسبة كل واحدة منها. يمزج هذا المثال FineWeb-Edu مع ويكيبيديا الإنجليزية، مستهدفًا خلطة بنسبة 70/30 حسب عدد الرموز:

from zephon import Pipeline
from zephon.io import CacheOptions, Dataset, StoreOptions
from zephon.work import MixtureSpec, StaticMixtureWorkSource, TokenEstimation

work_source = StaticMixtureWorkSource(
    datasets=[
        Dataset.from_path("fineweb_edu", "hf://HuggingFaceFW/fineweb-edu/sample-10BT/train"),
        Dataset.from_path("wikipedia", "hf://wikimedia/wikipedia/20231101.en/train"),
    ],
    mixture=MixtureSpec({"fineweb_edu": 0.7, "wikipedia": 0.3}),
    seed=42,
    token_estimation=TokenEstimation(primer="measure", calibration_samples=2048, calibration_shards_max=4),
)
cache = CacheOptions(enabled=True, root="/tmp/zephon-cache", limit_bytes=50 << 30)  # 50 GiB

pipeline = (
    Pipeline(work_source)
    .options(io_options=StoreOptions(cache=cache))
    .tokenize(tokenizer_id="gpt2", field="text")
    .pack_flat(max_length=2049, algorithm="wrap")
    .batch(microbatch_size=8)
)

للمزج حسب العينات بدلاً من ذلك، اترك token_estimation فارغاً.

اعرف المزيد

Update on GitHub