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によって開発された、基盤モデルの学習用のデータローダーです。 学習の実行中にデータをトークナイズ、パック、ミックスし、GPUの数を 변경しても同じバッチを生成します(エラスティック・デターミニズム)。 Zephonは、hf://パスを介して、Hugging Face Hubからデータセットを直接読み取ります。

インストール

hf 追加機能により、Hub データセットおよび Parquet ファイルのサポートが追加されます。以下の例では、トークナイズのために transformers も必要です:

pip install "zephon[hf]" transformers

Hubからデータセットを読み込む

hf:// パスを Dataset.from_path に渡します。このパスは、データセット、設定、スプリットを指定します。例えば、HuggingFaceFW/fineweb-edu の sample-10BT 設定の train スプリットなどです。 Zephon は shard cache を通じて 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)
    break

tokenize は text 列をトークン ID に変換します。 pack_flat は、トークン化された文書を max_length トークンのシーケンスに結合します。 max_length はコンテキスト長に 1 を加えた値に設定してください。 return_labels=True の場合、to_training はラベルを 1 ポジションずらすため、input_ids と labels の両方がコンテキスト長になります。

Pipeline は Python の反復可能オブジェクト(iterable)であるため、任意の学習ループで使用できます。Zephon は、シャードから読み取る前に完全なシャードをダウンロードするため、最初のバッチの取得に時間がかかる場合があります。

プライベートまたはゲート付きのデータセットを読み取るには、まず Hugging Face アカウントでログインしてください。例えば、hf auth login を使用します。Zephon は HF_TOKEN 環境変数も読み取ります。

パス形式

ZephonのHub用データセットのhf://パスは、以下の形式です:

hf://{org}/{name}[@[{revision}][~{source}]]/[{config}/]{split}
  • revision: ブランチ、タグ、またはコミット。デフォルトはmainです。Zephonはデータセットを読み込む際にパスをコミットに固定するため、すべてのランクが同じファイルを読み取ります。
  • source: original はリポジトリにアップロードされたファイルを読み取り、parquet は Hub の 自動 Parquet 変換を読み取ります。@ の後にソースを指定します。例えば @~parquet のようにします。デフォルトでは、Zephon はその形式をサポートしている場合にアップロードされたファイルを読み取り、サポートしていない場合は Parquet 変換を使用します。
  • config: データセットの構成です。データセットに複数の構成がある場合は、これを指定してください。
パス読み込み
hf://HuggingFaceFW/fineweb-edu/sample-10BT/trainmainブランチのsample-10BT設定のtrain分割
hf://HuggingFaceFW/fineweb-edu@v1.4.0/sample-10BT/trainv1.4.0ブランチからの同じ分割
hf://yahma/alpaca-cleaned@~parquet/train自動 Parquet 変換による train スプリット

Zephon のパスはファイルではなく、データセットとスプリットを指定します。pandas、Polars、DuckDB が使用する hf://datasets/... 形式のファイルパスは使用しません。hf://datasets/HuggingFaceFW/fineweb-edu/sample-10BT/train ではなく、hf://HuggingFaceFW/fineweb-edu/sample-10BT/train を使用してください。

データセットを混合する

複数の Hub データセットで学習するには、ワークソースに各データセットの割合を指定して追加します。この例では、FineWeb-Edu と英語版 Wikipedia を、トークン数で 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を省略してください。

詳細はこちら

Update on GitHub