Hub documentation
Zephon
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]" transformersMuat 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)
breaktokenize 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 adalahmain. Zephon mengunci path ke commit saat memuat dataset, sehingga semua rank membaca file yang sama.source:originalmembaca file yang diunggah ke repositori, danparquetmembaca 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.
| Jalur | Membaca |
|---|---|
hf://HuggingFaceFW/fineweb-edu/sample-10BT/train | Split train dari konfigurasi sample-10BT, dari branch main |
hf://HuggingFaceFW/fineweb-edu@v1.4.0/sample-10BT/train | Split yang sama dari cabang v1.4.0 |
hf://yahma/alpaca-cleaned@~parquet/train | Split 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. Gunakanhf://HuggingFaceFW/fineweb-edu/sample-10BT/train, bukanhf://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.