Spaces:
Sleeping
Sleeping
| import argparse | |
| parser = argparse.ArgumentParser() | |
| ######### Data-related arguments ######### | |
| parser.add_argument("-c", "--data-config", type=str, help="data config YAML file", default="config_files/config_jets.yaml") | |
| parser.add_argument( | |
| "-train", | |
| "--data-train", | |
| nargs="*", | |
| default=[], | |
| help="training files; supported syntax:" | |
| " (a) plain list, `--data-train /path/to/a/* /path/to/b/*`;" | |
| " (b) (named) groups [Recommended], `--data-train a:/path/to/a/* b:/path/to/b/*`," | |
| " the file splitting (for each dataloader worker) will be performed per group," | |
| " and then mixed together, to ensure a uniform mixing from all groups for each worker.", | |
| ) | |
| parser.add_argument( | |
| "-val", | |
| "--data-val", | |
| nargs="*", | |
| help="validation files", | |
| ) | |
| parser.add_argument( | |
| "-tag", | |
| "--tag", | |
| type=str, | |
| required=False | |
| ) | |
| parser.add_argument( | |
| "-ckpt-step", | |
| "--ckpt-step", | |
| type=int, | |
| required=False, | |
| default=0 | |
| ) # to make it easier to find the actual number of steps | |
| parser.add_argument( | |
| "-load-from-run", | |
| "--load-from-run", | |
| required=False, | |
| default="", | |
| type=str, | |
| help="WandB run name from which to pull the training settings" | |
| ) | |
| parser.add_argument("--train-dataset-size", type=int, default=None, help="number of events to use from the training dataset") | |
| parser.add_argument("--val-dataset-size", type=int, default=None, help="number of events to use from the validation dataset") | |
| parser.add_argument("--test-dataset-max-size", type=int, default=None, help="number of events to use from the testing dataset (per signal hypothesis)") | |
| parser.add_argument( | |
| "-test", | |
| "--data-test", | |
| nargs="*", | |
| default=[], | |
| help="testing files; supported syntax:" | |
| " (a) plain list, `--data-test /path/to/a/* /path/to/b/*`;" | |
| " (b) keyword-based, `--data-test a:/path/to/a/* b:/path/to/b/*`, will produce output_a, output_b;" | |
| " (c) split output per N input files, `--data-test a%10:/path/to/a/*`, will split per 10 input files", | |
| ) | |
| ######### Model and training-related arguments ######### | |
| parser.add_argument( | |
| "-net", | |
| "--network-config", | |
| type=str, | |
| help="network architecture configuration file; the path must be relative to the current dir", | |
| ) | |
| parser.add_argument( | |
| "-n-blocks", | |
| "--num-blocks", | |
| type=int, | |
| help="Number of blocks for GATr/LGATr/Transformer", | |
| required=False, | |
| default=10 | |
| ) | |
| ##### Transformer-specific arguments ##### | |
| parser.add_argument( | |
| "-internal-dim", | |
| "--internal-dim", | |
| type=int, | |
| help="Internal dim for transformer", | |
| required=False, | |
| default=128 | |
| ) | |
| parser.add_argument("--no-pid", "-np", action="store_true", help="If turned on, the PID is not going to be used as an input feature") | |
| parser.add_argument( | |
| "-heads", | |
| "--n-heads", | |
| type=int, | |
| help="N attention heads for transformer", | |
| required=False, | |
| default=4 | |
| ) | |
| ##### L-GATr-specific arguments ##### | |
| parser.add_argument( | |
| "-mv-ch", | |
| "--hidden-mv-channels", | |
| type=int, | |
| help="Hidden multivector channels for GATr and L-GATr", | |
| required=False, | |
| default=16 | |
| ) | |
| parser.add_argument( | |
| "-s-ch", | |
| "--hidden-s-channels", | |
| type=int, | |
| help="Hidden scalar channels for GATr and L-GATr", | |
| required=False, | |
| default=64 | |
| ) | |
| parser.add_argument( | |
| "--load-model-weights", | |
| type=str, | |
| default=None, | |
| help="initialize model with pre-trained weights", | |
| ) | |
| parser.add_argument( | |
| "--run-name", | |
| type=str, | |
| help="The name of the run. The wandb name and the folder it gets saved to will be this name + timestamp.", | |
| ) | |
| parser.add_argument( | |
| "--prefix", | |
| type=str, | |
| default="", | |
| help="Path to the results folder, if empty, it will be set to the results folder in the current environment.", | |
| ) | |
| parser.add_argument( | |
| "--debug", | |
| action="store_true", | |
| default=False, | |
| help="quickly test the setup by running over only a small number of events - use for debugging", | |
| ) | |
| parser.add_argument( | |
| "--wandb-projectname", type=str, help="project where the run is stored inside wandb", default="svj_clustering" | |
| ) | |
| parser.add_argument("--batch-size", "-bs", type=int, default=128, help="batch size") | |
| parser.add_argument("--num-epochs", type=int, default=20, help="number of epochs") | |
| parser.add_argument("--num-steps", type=int, default=-1, help="Number of steps. If set to -1, it will be ignored and only num_epochs will be considered. Otherwise, training will stop after the reached number of steps.") | |
| parser.add_argument( | |
| "--gpus", | |
| type=str, | |
| default="0", | |
| help='device for the training/testing; to use CPU, set to empty string (""); to use multiple gpu, set it as a comma separated list, e.g., `1,2,3,4`', | |
| ) | |
| parser.add_argument( | |
| "--num-workers", | |
| type=int, | |
| default=1, | |
| help="number of threads to load the dataset; memory consumption and disk access load increases (~linearly) with this numbers", | |
| ) | |
| ### Loss-related arguments ### | |
| parser.add_argument( | |
| "--loss", | |
| type=str, | |
| default="oc", | |
| choices=["oc", "quark_distance"], | |
| help="Loss function to use (oc is object condensation, quark_distance aims to cluster things around the corresponding dark quark)" | |
| ) | |
| parser.add_argument("--gt-radius", type=float, default=0.8, help="GT radius R - within the radius of a dark quark, GT points to the dark quark, out of the radius it's noise") | |
| parser.add_argument("--attr-loss-weight", type=float, default=1.0, help="weight for the attractive loss") | |
| parser.add_argument("--repul-loss-weight", type=float, default=1.0, help="weight for the repulsive loss") | |
| parser.add_argument("--coord-loss-weight", type=float, default=0.0, help="weight for the coordinate loss") | |
| parser.add_argument( | |
| "--beta-type", | |
| type=str, | |
| default="default", | |
| choices=["default", "pt", "pt+bc"], | |
| help="How to predict betas", | |
| ) | |
| parser.add_argument( | |
| "--lorentz-norm", | |
| help="Whether the norm in clustering space should be the Lorentz one (otherwise it's usual Euclidean 2-norm)", | |
| action="store_true", | |
| default=False, | |
| ) | |
| parser.add_argument( | |
| "--scalars-oc", | |
| help="For L-GATr, use scalar virtual coordinates in the OC loss", | |
| action="store_true", | |
| default=False, | |
| ) | |
| parser.add_argument( | |
| "--spatial-part-only", | |
| help="For L-GATr: if turned on, the spatial part is only going to be used for the loss.", | |
| action="store_true", | |
| default=False, | |
| ) | |
| # defaults: --min-cluster-size 11 --min-samples 18 --epsilon 0.48 | |
| parser.add_argument( | |
| "--min-cluster-size", | |
| help="parameter of the HDBSCAN clustering", | |
| type=int, | |
| default=2 | |
| ) | |
| parser.add_argument( | |
| "--min-samples", | |
| help="parameter of the HDBSCAN clustering", | |
| type=int, | |
| default=1 | |
| ) | |
| parser.add_argument( | |
| "--parton-level", | |
| help="Run on parton-level particles", | |
| action="store_true" | |
| ) | |
| parser.add_argument( | |
| "--gen-level", | |
| help="Run on gen-level final particles", | |
| action="store_true" | |
| ) | |
| parser.add_argument( | |
| "--epsilon", | |
| help="parameter of the HDBSCAN clustering", | |
| type=float, | |
| default=0.3 | |
| ) | |
| parser.add_argument( | |
| "-embed-as-vectors", | |
| "--embed-as-vectors", | |
| action="store_true", | |
| default=False, | |
| help="Whether to embed the input p_xyz as vectors (translations) or points", | |
| ) | |
| #### Optimizer and LR-related arguments #### | |
| parser.add_argument( | |
| "--optimizer", | |
| type=str, | |
| default="ranger", | |
| choices=["adam", "adamW", "radam", "ranger"], | |
| help="optimizer for the training", | |
| ) | |
| parser.add_argument( | |
| "--optimizer-option", | |
| nargs=2, | |
| action="append", | |
| default=[], | |
| help="options to pass to the optimizer class constructor, e.g., `--optimizer-option weight_decay 1e-4`", | |
| ) | |
| parser.add_argument( | |
| "--lr-scheduler", | |
| type=str, | |
| default="flat+decay", | |
| choices=[ | |
| "none", | |
| "steps", | |
| "flat+decay", | |
| "flat+linear", | |
| "flat+cos", | |
| "one-cycle", | |
| "reduceplateau", | |
| ], | |
| help="learning rate scheduler", | |
| ) | |
| parser.add_argument("--start-lr", type=float, default=5e-3, help="start learning rate") | |
| parser.add_argument("--validation-steps", type=float, default=1000, help="Run eval on validation set every x steps") | |
| parser.add_argument( | |
| "--backend", | |
| type=str, | |
| choices=["gloo", "nccl", "mpi"], | |
| default=None, | |
| help="backend for distributed training", | |
| ) | |
| parser.add_argument( | |
| "--log", | |
| type=str, | |
| default="", | |
| help="path to the log file; `{auto}` can be used as part of the path to auto-generate a name, based on the timestamp and network configuration", | |
| ) | |
| parser.add_argument( | |
| "--use-amp", | |
| action="store_true", | |
| default=False, | |
| help="use mixed precision training (fp16)", | |
| ) | |
| # Objectness score submodel settings | |
| parser.add_argument( | |
| "-obj-score", | |
| "--train-objectness-score", | |
| action="store_true", | |
| help="Whether to train the objectness classifier next to the usual clustering loss", | |
| ) | |
| parser.add_argument( | |
| "--obj-score-module", | |
| default="src/models/transformer/transformer.py", | |
| help="Path to the objectness score model", | |
| type=str | |
| ) | |
| parser.add_argument( | |
| "-obj-score-gt", | |
| "--objectness-score-gt-mode", | |
| default="all_in_radius", | |
| choices=["all_in_radius", "closest_only"], | |
| help="Whether to train the objectness classifier next to the usual clustering loss", | |
| ) | |
| parser.add_argument( | |
| "-obj-score-weights", | |
| "--load-objectness-score-weights", | |
| type=str, | |
| help="Ckpt file for the objectness score model", | |
| default=None, | |
| required=False | |
| ) | |
| parser.add_argument( | |
| "--global-features-obj-score", | |
| "-global-features-os", | |
| action="store_true", | |
| help="Whether to use global features in the objectness score model", | |
| default=False | |
| ) | |
| parser.add_argument( | |
| "--augment-soft-particles", | |
| "-aug-soft", | |
| help="add soft particles to the event - will add 10, 100, 1000, 10000 soft particles to the events (alternating in this order) and will split an energy of 0.5 GeV evenly among them", | |
| action="store_true", | |
| default=False | |
| ) | |
| parser.add_argument( | |
| "--irc-safety-loss", | |
| "-irc", | |
| help="add an IRC safety loss term", | |
| action="store_true", | |
| default=False | |
| ) | |