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 tarafından temel model eğitimi için geliştirilmiş bir veri yükleyicidir. Eğitim sırasında verileri belirteçlere ayırır, paketler ve karıştırır; GPU sayısını değiştirdiğinizde aynı partileri üretir (esnek determinizm). Zephon, veri kümelerini hf:// yolları üzerinden doğrudan Hugging Face Hub'dan okur.

Kurulum

hf eklentisi, Hub veri kümeleri ve Parquet dosyaları için destek ekler. Aşağıdaki örnekler için tokenizasyon amacıyla transformers da gereklidir:

pip install "zephon[hf]" transformers

Hub'dan bir veri seti yükleyin

Dataset.from_path fonksiyonuna bir hf:// yolu iletin. Yol, bir veri setini, bir yapılandırmayı ve bir bölüntüyü belirtir; örneğin HuggingFaceFW/fineweb-edu veri setinin sample-10BT yapılandırmasının train bölüntüsü. Zephon, Hub veri setlerini shard önbelleği üzerinden okuduğu için önbelleği etkinleştirmeniz gerekir. Önbelleği hızlı bir yerel diske yerleştirin ve bir boyut sınırı belirleyin:

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 sütununu token kimliklerine dönüştürür. pack_flat, tokenize edilmiş belgeleri max_length token uzunluğundaki dizilere birleştirir. max_length değerini bağlam uzunluğunun bir fazlası olarak ayarlayın: return_labels=True ile to_training, etiketleri bir konum kaydırır, böylece hem input_ids hem de labels bağlam uzunluğuna sahip olur.

Pipeline bir Python iterable'dir, bu nedenle herhangi bir eğitim döngüsünde kullanabilirsiniz. Zephon, bir shard'dan okumadan önce onu tamamen indirir, bu yüzden ilk batch biraz zaman alabilir.

Özel veya kısıtlı veri setlerini okumak için önce Hugging Face hesabınızla oturum açın, örneğin hf auth login ile. Zephon ayrıca HF_TOKEN ortam değişkenini de okur.

Yol biçimi

Zephon’un Hub veri kümeleri için hf:// yolları şu biçimde olmalıdır:

hf://{org}/{name}[@[{revision}][~{source}]]/[{config}/]{split}
  • revision: bir dal, etiket veya commit. Varsayılan değer main'dir. Zephon, veri setini yüklediğinde yolu bir commite sabitler, böylece tüm rank'lar aynı dosyaları okur.
  • source: original, depoya yüklenen dosyaları okur; parquet ise Hub’ın otomatik Parquet dönüşümünü okur. Kaynağı @ işaretinden sonra belirtin, örneğin @~parquet. Varsayılan olarak Zephon, formatlarını desteklediğinde yüklenen dosyaları okur, desteklemediğinde ise Parquet dönüşümünü kullanır.
  • config: veri seti yapılandırması. Veri setinin birden fazla yapılandırması varsa bunu dahil edin.
YolOkumalar
hf://HuggingFaceFW/fineweb-edu/sample-10BT/trainmain dalından, sample-10BT yapılandırmasının train bölümü
hf://HuggingFaceFW/fineweb-edu@v1.4.0/sample-10BT/trainv1.4.0 dalından aynı bölünme
hf://yahma/alpaca-cleaned@~parquet/trainOtomatik Parquet dönüşümünden train bölümü

Zephon yolları bir dosya değil, bir veri seti ve bir bölünmeyi adlandırır. pandas, Polars ve DuckDB’nin kullandığı hf://datasets/... dosya yollarını kullanmazlar. hf://datasets/HuggingFaceFW/fineweb-edu/sample-10BT/train yerine hf://HuggingFaceFW/fineweb-edu/sample-10BT/train kullanın.

Veri kümelerini karıştır

Birden fazla Hub veri seti üzerinde eğitim yapmak için bunları, her birinin oranıyla birlikte çalışma kaynağına ekleyin. Bu örnek, token bazında %70/%30 bir karışım hedefleyerek FineWeb-Edu'yu İngilizce Wikipedia ile birleştirir:

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)
)

Örnekler üzerinden karıştırmak için token_estimation parametresini atlayın.

Daha fazla bilgi edinin

Update on GitHub