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 adalah pemuat data untuk pelatihan model fondasi, yang dibangun oleh DatologyAI. Zephon melakukan tokenisasi, pengemasan, dan pencampuran data selama pelatihan berjalan, dan menghasilkan batch yang sama ketika Anda mengubah jumlah GPU (determinisme elastis). Zephon membaca dataset langsung dari Hugging Face Hub dengan jalur hf://.

Instalasi

Ekstra hf menambahkan dukungan untuk dataset Hub dan file Parquet. Contoh di bawah ini juga membutuhkan transformers untuk tokenisasi:

pip install "zephon[hf]" transformers

Muat dataset dari Hub

Lewati jalur hf:// ke Dataset.from_path. Jalur tersebut menentukan dataset, konfigurasi, dan split, misalnya split train dari konfigurasi sample-10BT dari HuggingFaceFW/fineweb-edu. Zephon membaca dataset Hub melalui shard cache-nya, sehingga Anda harus mengaktifkan cache. Letakkan cache di disk lokal yang cepat dan atur batas ukuran:

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 mengonversi kolom text menjadi ID token. pack_flat menggabungkan dokumen yang telah ditokenisasi menjadi urutan max_length token. Atur max_length menjadi panjang konteks ditambah satu: dengan return_labels=True, to_training menggeser label satu posisi, sehingga input_ids dan labels keduanya memiliki panjang konteks.

Sebuah Pipeline adalah iterable Python, sehingga Anda dapat menggunakannya di loop pelatihan mana pun. Zephon mengunduh shard lengkap sebelum membacanya, sehingga batch pertama mungkin membutuhkan waktu beberapa saat.

Untuk membaca dataset privat atau bergerbang, masuk terlebih dahulu dengan akun Hugging Face Anda, misalnya dengan hf auth login. Zephon juga membaca variabel lingkungan HF_TOKEN.

Format jalur

Path hf:// Zephon untuk dataset Hub memiliki format ini:

hf://{org}/{name}[@[{revision}][~{source}]]/[{config}/]{split}
  • revision: cabang, tag, atau commit. Nilainya secara default adalah main. Zephon mengunci path ke commit saat memuat dataset, sehingga semua rank membaca file yang sama.
  • source: original membaca file yang diunggah ke repositori, dan parquet membaca konversi Parquet otomatis dari Hub. Letakkan sumber setelah @, misalnya @~parquet. Secara default, Zephon membaca file yang diunggah jika formatnya didukung, dan menggunakan konversi Parquet jika tidak.
  • config: konfigurasi dataset. Sertakan ini ketika dataset memiliki lebih dari satu konfigurasi.
JalurMembaca
hf://HuggingFaceFW/fineweb-edu/sample-10BT/trainSplit train dari konfigurasi sample-10BT, dari branch main
hf://HuggingFaceFW/fineweb-edu@v1.4.0/sample-10BT/trainSplit yang sama dari cabang v1.4.0
hf://yahma/alpaca-cleaned@~parquet/trainSplit train dari konversi Parquet otomatis

Path Zephon menamai dataset dan split, bukan file. Path ini tidak menggunakan path file hf://datasets/... yang digunakan oleh pandas, Polars, dan DuckDB. Gunakan hf://HuggingFaceFW/fineweb-edu/sample-10BT/train, bukan hf://datasets/HuggingFaceFW/fineweb-edu/sample-10BT/train.

Mencampur dataset

Untuk melatih pada beberapa dataset Hub, tambahkan mereka ke sumber kerja dengan proporsi masing-masing. Contoh ini mencampurkan FineWeb-Edu dengan Wikipedia bahasa Inggris, menargetkan campuran 70/30 berdasarkan token:

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

Untuk mencampur berdasarkan sampel, tinggalkan token_estimation.

Pelajari lebih lanjut

Update on GitHub