jetclustering / src /utils /parser_args.py
gregorkrzmanc's picture
.
e75a247
raw
history blame
10.1 kB
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
)