AINovice2005's picture
|
download
raw
2.87 kB
# Streaming OOM Datasets
Demonstrate the pattern for working with datasets that are too large to load
fully into memory.
## What this example shows
- Why streaming datasets need different handling from in-memory `Dataset` assets
- Avoiding `len(dataset)` on streamed inputs
- Emitting bounded reports instead of materializing an entire large corpus
- Keeping memory use predictable by processing a fixed number of records
- Documenting the tradeoff between exact row counts and streaming safety
## Dataset pattern
Large text corpora such as Dolma, FineWeb, or Common Crawl derivatives can be
too large for local materialization. In those cases, use Hugging Face streaming
mode and consume only the records needed for the current asset.
| Concern | In-memory dataset | Streaming dataset |
|---------|-------------------|-------------------|
| Row count | `len(dataset)` is available | Often unavailable |
| Access | Random access and full transforms | Iterator-style processing |
| Best use | Small and medium datasets | Very large corpora, sampling, audits |
| Persistence | Save full transformed dataset | Save bounded sample or report |
## Intended asset graph
```
dolma_stream
|
v
streaming_report
```
`dolma_stream` represents a bounded streamed sample. `streaming_report` records
the sample size and any aggregate metrics that can be computed without loading
the full source dataset.
## Key API
```python
@hf_dataset_asset(
path="allenai/dolma",
split="train",
streaming=True,
group_name="streaming_oom_datasets",
)
def dolma_stream(context, dataset) -> MaterializeResult:
rows = list(islice(dataset, 1000))
sample = Dataset.from_list(rows)
return MaterializeResult(
value=sample,
metadata={
"sample_rows": len(sample),
"streaming": True,
},
)
```
The important rule is to treat streamed inputs as iterators. Do not call
`len(dataset)`, do not assume random access, and keep materialized outputs
bounded.
## Metadata to surface
| Key | Description |
|-----|-------------|
| `sample_rows` | Number of streamed examples retained locally |
| `streaming` | Confirms the source was read in streaming mode |
| `source_dataset` | Hub dataset identifier |
| `processing_limit` | Maximum number of rows consumed from the stream |
## Storage layout
```
.dagster_hf_storage/
└── dolma_stream/ # bounded sample, not the full corpus
```
`streaming_report` returns a `MaterializeResult` with report data and metadata.
## How to run
```bash
pip install dagster dagster-hf-datasets
cd dagster_hf_datasets_examples
dagster dev -m streaming_oom_datasets.definitions
```
Materialize the streamed sample first, then the report. Keep the sample limit
small for local development and increase it only when the Dagster run worker has
enough memory and disk budget.

Xet Storage Details

Size:
2.87 kB
·
Xet hash:
650acd996c4cc91c3ccd5f0255d75dad7fcebe227d89a0a045fee04333707079

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