Hub documentation
Zephon
Zephon
Zephonは、DatologyAIによって開発された、基盤モデルの学習用のデータローダーです。
学習の実行中にデータをトークナイズ、パック、ミックスし、GPUの数を 변경しても同じバッチを生成します(エラスティック・デターミニズム)。
Zephonは、hf://パスを介して、Hugging Face Hubからデータセットを直接読み取ります。
インストール
hf 追加機能により、Hub データセットおよび Parquet ファイルのサポートが追加されます。以下の例では、トークナイズのために transformers も必要です:
pip install "zephon[hf]" transformersHubからデータセットを読み込む
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)
breaktokenize は 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/train | mainブランチのsample-10BT設定のtrain分割 |
hf://HuggingFaceFW/fineweb-edu@v1.4.0/sample-10BT/train | v1.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を省略してください。