L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Données et recherche · SKILL.md

datapipes

datapipes

Build and debug PhysicsNeMo reader-to-Dataset-to-DataLoader data pipelines for TensorDict, mesh, streaming, and Hydra-configured workflows.

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: datapipes description: "Build and debug PhysicsNeMo reader-to-Dataset-to-DataLoader data pipelines for TensorDict, mesh, streaming, and Hydra-configured workflows." metadata: disco-role: operating disable-model-invocation: true license: Apache 2.0

PhysicsNeMo Datapipes Operating Skill

Use this sub-skill when the user needs to load scientific ML data into PhysicsNeMo, build reader → dataset → transform → DataLoader workflows, validate TensorDict payloads, choose file formats, configure Hydra datapipes, or debug data-format/collation/device/streaming failures.

Trigger phrases

Use this sub-skill for requests that mention any of:

  • PhysicsNeMo datapipes, readers, Dataset, DataLoader, TensorDict, MultiDataset, MeshDataset, or IterableDatasetBase.
  • Loading NPZ/NumPy, HDF5, Zarr/TensorStore, VTK/STL, .pmsh, or .pdmsh data into a model.
  • Normalize, SubsamplePoints, Compose, KNearestNeighbors, MeshToTensorDict, custom readers/transforms/collators, Hydra ${dp:...} configs, or data-pipeline reproducibility.
  • Errors involving missing fields, wrong file patterns, mismatched TensorDict keys/shapes, optional dependencies, CPU↔CUDA transfer, stream prefetching, or online/iterable generators.

Fast route

  1. Classify the data source. Use the reader selection notes below, then open references/data-formats.md for exact layout expectations.
  2. Build the smallest pipeline. Start with Reader, inspect len(reader), reader.field_names, and reader[0]; then wrap with Dataset, then DataLoader. Recipes are in references/datapipe-workflows.md.
  3. Validate the payload. Confirm keys, shapes, dtypes, metadata, device, batch dimension, and collation strategy before connecting to a model.
  4. Add transforms last. Apply Normalize, SubsamplePoints, spatial/mesh transforms, or custom transforms only after raw reader output is correct. Use references/api-reference.md for exact constructor names.
  5. Debug synchronously first. For hard failures, set prefetch_factor=0 or call loader.disable_prefetch() before investigating CUDA streams or threaded I/O. See references/troubleshooting.md.
  6. Run a tiny smoke when in doubt. The bundled helper scripts/create_tiny_npz_datapipe.py creates a temporary NPZ fixture and exercises NumpyReader → Dataset → DataLoader on CPU or CUDA.

Reader selection

  • Single .npz with sample axis in the first dimension: use NumpyReader(path, fields=..., index_key=...).
  • Directory of .npz sample files: use NumpyReader(directory, file_pattern="sample_*.npz", fields=...); this mode supports reader-side coordinated subsampling.
  • Single or directory HDF5: use HDF5Reader; it reads root-level datasets by key and indexes the first dimension in single-file mode.
  • Zarr groups: use ZarrReader for local Zarr groups, attributes-as-tensors, store caching, and single-group or directory mode.
  • Large/local Zarr with async reads: use TensorStoreZarrReader when tensorstore is installed and you want explicit cache/concurrency controls.
  • STL-style VTK surface samples: use VTKReader only when the optional VTK/PyVista stack is installed and the sample directories contain supported mesh files.
  • Native PhysicsNeMo mesh archives: use MeshReader for .pmsh single meshes and DomainMeshReader for .pdmsh domain meshes; pair with MeshDataset and mesh transforms.
  • No stable length or index: implement IterableDatasetBase and let DataLoader use the main-thread generator path.

Validation checklist

Before handing a datapipe to a training or inference loop, verify:

  • len(reader) is correct for map-style data, or len(loader) intentionally raises for iterable data.
  • reader.field_names or the first sample contains the expected keys.
  • reader[0] returns (TensorDict, metadata) for tensor readers, or (Mesh/DomainMesh, metadata) for mesh readers.
  • Dataset(reader, device=...) moves tensors to the intended device before transforms.
  • Transform input keys exist and have compatible first dimensions for coordinated subsampling.
  • The selected collator matches sample shape: default stacking for fixed shapes; concat/custom collation for variable-length point clouds or graph objects.
  • DataLoader(..., collate_metadata=True) returns metadata only if the training loop needs source indices, filenames, or dataset_index.
  • seed= and loader.set_epoch(epoch) are used when stochastic readers/transforms must be reproducible.

Route to sibling sub-skills

  • For which model family or example to pair with a datapipe, route to model-selection.
  • For mesh creation, mesh validation, repair, geometry calculations, or mesh serialization beyond loading, route to mesh-and-geometry.
  • For distributed samplers, DDP/FSDP2, ShardTensor, domain parallel input scatter, or multi-GPU launch issues, route to distributed-and-domain-parallel.
  • For diffusion/generative datasets tied to sampler or preconditioner workflows, route to diffusion-and-generative after the data path is validated.
  • For active-learning orchestration, logging/checkpoints, or ONNX export after data loading, route to active-learning-and-deployment.

Operating cautions

  • Treat readers as CPU I/O adapters. Do not put GPU kernels, model calls, downloads, credential prompts, or long preprocessing inside a Reader._load_sample implementation.
  • Transforms mutate/update TensorDict-style payloads; order matters.
  • PhysicsNeMo's DataLoader is thread/stream oriented rather than PyTorch multiprocessing oriented. Pinned reader output plus device="cuda" is what enables asynchronous host-to-device transfer.
  • Never assume large domain examples are smoke tests. Use tiny generated fixtures for validation, then document external-data and optional-dependency requirements separately.
Skills enregistrées