AINovice2005's picture
|
download
raw
2.72 kB
# Multi-Asset Split Routing
Materialize train, validation, and test splits as independently tracked
Dagster assets using `hf_multi_asset`.
## What this example shows
- Using `@hf_multi_asset` to auto-resolve all splits from a `DatasetDict`
- Each split becoming a first-class asset with its own lineage, history, and metadata
- Downstream `@asset` nodes referencing individual splits by name (e.g. `glue_sst2_train`)
- A cross-split report asset consuming all three splits simultaneously
- Label distribution metadata per split visible in the Dagster UI
## Dataset
[`nyu-mll/glue`](https://huggingface.co/datasets/nyu-mll/glue) (`sst2` config) — Stanford Sentiment Treebank binary
classification benchmark. Ships with canonical train / validation / test
splits, making split count and row counts predictable.
| Split | Rows | Labels |
|-------|------|--------|
| train | 67,349 | 0 (negative), 1 (positive) |
| validation | 872 | 0, 1 |
| test | 1,821 | -1 (unlabeled) |
> **Note:** The test split labels are `-1` (withheld for the leaderboard).
> The `split_lineage_report` asset surfaces this in its output metadata.
## Key API
```python
@hf_multi_asset(
path="nyu-mll/glue",
config="sst2",
io_manager_key="hf_parquet_io_manager",
)
def glue_sst2(
context: AssetExecutionContext,
datasets: dict[str, Dataset],
) -> dict[str, MaterializeResult]:
...
```
`hf_multi_asset` calls `datasets.get_dataset_split_names()` at decoration
time and generates one `AssetOut` per split. The function receives
`datasets: dict[str, Dataset]` — a mapping of split name to loaded dataset.
The return value must be `dict[str, MaterializeResult]` keyed by split name.
### Referencing individual splits downstream
Split assets are named `{asset_name}_{split}`, so downstream assets
declare their dependencies as:
```python
@asset
def my_downstream(glue_sst2_train: Dataset, glue_sst2_validation: Dataset):
...
```
## Asset graph
```
glue_sst2
/ | \
_train _validation _test
| |
glue_sst2_train_normalized \
\
split_lineage_report (consumes all 3)
```
## Storage layout
```
.dagster_hf_storage/
├── glue_sst2_train/
├── glue_sst2_validation/
├── glue_sst2_test/
└── glue_sst2_train_normalized/
```
## How to run
```bash
pip install dagster dagster-hf-datasets
cd dagster_hf_datasets_examples
dagster dev -m multi_asset_split_routing.definitions
```
Materialize `glue_sst2` first (all three splits in one run), then
`glue_sst2_train_normalized` and `split_lineage_report` downstream.
Individual splits can also be re-materialized independently.

Xet Storage Details

Size:
2.72 kB
·
Xet hash:
dff773033ed4591bd11fad29e49db484b1b70aa5f4550a2144ca40d2269919ea

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.