# Configuration guide The CLI composes the installed `gnn4colliders.configs/config.yaml` with semantic Hydra groups. A config describes experiment intent; it does not contain arbitrary Python module or class import paths. ## Groups | Group | Purpose | | --- | --- | | `data` | ROOT source or graph-cache path, batch settings, and fold splits | | `model` | Model family and supported ROOT-GNN constructor settings | | `task` | Binary or multiclass loss, score, and metric semantics | | `trainer` | Device, seed, epochs, optimizer, scheduler, and early stopping | | `checkpoint` | Output directory, resume checkpoint, or pretrained checkpoint | | `inference` | Checkpoint, split, output path, and output format | | `environment` | Device and experiment output root | | `distributed` | Single-process/DDP selection and process-group backend | The active model groups are `root_gnn/edge_network` and `root_gnn/fine_tuned_edge_network`. The active task groups are `pretraining_multiclass`, `binary_classification`, and `tth_cp_finetune`. ## Preparation `prepare` requires `data.files`, `data.cache.path`, `data.feature_branches`, `data.object_types`, and `data.scales`. `feature_branches` follows the shared seven-column feature contract: one branch/constant specification per output column and one entry per configured object type. `CALC_E` and `NODE_TYPE` are reserved derived specifications. `object_types` entries are `vector` or `single`. Preparation reads the configured tree in file order and writes a versioned `GraphSampleCache`. Example overrides are easiest to maintain in a YAML file for real datasets: ```yaml # project-local example: data/my_events.yaml files: [data/events.root] tree_name: Events cache: path: cache/events.pt feature_branches: - [jet_pt] - [jet_eta] - [jet_phi] - CALC_E - [1.0] - [0.0] - NODE_TYPE object_types: [vector] scales: [1, 1, 1, 1, 1, 1, 1] fold_var: eventNumber weight_var: weight ``` Then compose it with `data=my_events`. The cache stores processed graph samples, labels, globals, named metadata, and feature/graph/cache schema versions. Changing the feature or graph schema requires a new compatible cache; loading a mismatched schema raises an error. ## Common overrides ```bash uv run gnn4colliders train \ data.cache.path=cache/events.pt \ data.batch_size=64 \ trainer.max_epochs=50 \ trainer.seed=123 \ environment.output_root=outputs/my_run ``` `data.batch_size` is per process. `data.splits.train_folds`, `validation_folds`, and `test_folds` define conventional train/validation/test selection and must be disjoint. Model/task mismatches are rejected during config validation; binary tasks require `model.out_size=1`, while multiclass tasks require `model.out_size=task.num_classes`. ## Hugging Face ROOT data Training preparation can resolve ROOT files directly from a pinned Hugging Face dataset. Use `data.source` instead of local `data.files`: ```yaml source: type: huggingface repo_id: HWresearch/Delphes repo_type: dataset revision: 76a6c362bfba8e766ba7255a5c08a55257f78d0e files: - path: testing/ttH_NLO_64.root label: 0 sha256: 89d69eae9cd4d28a5d414d77bbc07185ea5b7de03481fdafe28899e2f3a09dec size_bytes: 15050 ``` The resolver uses the Hugging Face cache, downloads only configured files, and verifies optional size and SHA-256 metadata before ROOT ingestion. Ready-to-use configurations are `config_hf_smoke` for the 64-event fixture and `config_hf_delphes` for the pinned 12-process pretraining sources: ```bash uv run gnn4colliders prepare --config-name config_hf_smoke uv run gnn4colliders prepare --config-name config_hf_delphes ``` The full Delphes configuration may download a large dataset. It is never used by the default configuration and is cached by the Hub client for later runs. `data.num_workers` controls local process parallelism during `prepare`. The default is `0` (single-process). Positive values split the ordered event range into independent temporary graph-cache shards and merge them deterministically; workers do not write the final cache concurrently. This setting does not launch distributed preparation and should be benchmarked on the target machine. ## Checkpoints and resolved configuration Training writes `epoch_####.pt` and the fully resolved configuration at `/resolved_config.yaml`. A checkpoint includes schema version, model weights/config, task config, trainer/optimizer/scheduler state, early stopping state, metadata, and optional RNG state. Set `checkpoint.resume=/path/to/epoch_####.pt` to continue a run. Set `checkpoint.pretrained=/path/to/epoch_####.pt` with the fine-tuned model group to load weights into a new task head; these options are mutually exclusive. ## Environment profiles `environment=local` selects CPU by default. `environment=macos` selects the Apple MPS device for the portable PyTorch ROOT-GNN backend. `environment=perlmutter` selects the CUDA device and a conventional output-root pattern. Profiles should hold device/output policy only; site-specific module loads and filesystem paths belong in a launcher or shell environment.