cursus.steps.scripts.graph_feature_processing¶
GraphFeatureProcessing step script (Nexus feature_processing → Cursus).
Ports Nexus’s run_feature_processing.py orchestrator: it runs the bundled
prepare_graphstorm_format.py → custom features → sanity_check.py from the BYO GraphStorm
image’s code bundle (mounted at /opt/ml/processing/input/code). The heavy feature-engineering
modules (prepare_graphstorm_format.py + graph_utils + compute_order_features +
custom_features + sanity_check.py, ~46KB) live in that image, NOT in cursus — this is a
BYO-container step, so cursus vendors only the thin contract-driven orchestrator.
- Contract (from
graph_feature_processing.step.yaml): inputs: SUBGRAPHS (/opt/ml/processing/input/subgraphs), SEEDS (/opt/ml/processing/input/seeds) args: –config (the materialized config.yaml, staged in the code/source dir)
–num-chunks
- output: /opt/ml/processing/output (the GConstruct input tree: nodes/ edges/ *_idx.parquet
gconstruct_config.json), uploaded EndOfJob.
- Load-bearing behaviors (preserved by delegating to the bundled scripts verbatim):
type-aware node/edge feature extraction (numerical log1p, temporal, spatial-haversine, aggregation, structural), reverse-edge generation, 1e-6 constant-column noise, label clip ≥0,
node-ID-keyed multi-task train/val/test masks, gconstruct_config.json emission,
sanity_check.py validation of the output tree.