Hub documentation
Zephon
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)
breaktokenize يحوّل عمود 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 فارغاً.