Hub documentation
Zephon
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]" transformersHub'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)
breaktokenize, 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ğermain'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;parquetise 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.
| Yol | Okumalar |
|---|---|
hf://HuggingFaceFW/fineweb-edu/sample-10BT/train | main dalından, sample-10BT yapılandırmasının train bölümü |
hf://HuggingFaceFW/fineweb-edu@v1.4.0/sample-10BT/train | v1.4.0 dalından aynı bölünme |
hf://yahma/alpaca-cleaned@~parquet/train | Otomatik 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/trainyerinehf://HuggingFaceFW/fineweb-edu/sample-10BT/trainkullanı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.