the optimal values for your experiments' hyperparameters that yield the best performing models.
## How Does `clearml-param-search` Work?
1. Execute `clearml-param-search`, specifying the base task whose parameters will be optimized, and a set of parameter
values and/or ranges to test. This creates an Optimization Task which manages the whole optimization process.
1.`clearml-param-search` creates multiple clones of the base task: each clone's parameters are set to values from the
specified parameter space.
1. Each clone is enqueued for execution by a [ClearML Agent](../clearml_agent.md).
The Optimization Task records and monitors the cloned tasks' configuration and execution details, and returns a summary
of the optimization results in table and graph forms.
## Execution Configuration
### Command Line Options
<divclassName="tbl-cmd">
|Name | Description| Optional |
|---|----|---|
|`--project-name`|Name of the project in which the optimization task will be created. If the project does not exist, it is created. If unspecified, the repository name is used.|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--task-name`|Name of the optimization task. If unspecified, the base Python script's file name is used.|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--task-id`|ID of an existing ClearML task whose hyperparameters will be optimized. Required unless `--script` is specified.|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--script`|Script to run the parameter search on. Required unless `--task-id` is specified.|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--queue`|Queue to enqueue the experiments on.|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--params-search`|Parameters space for optimization. See more information [here](#specifying-the-parameter-space). |<imgsrc="/docs/latest/icons/ico-optional-no.svg"alt="No"className="icon size-md center-md"/>|
|`--params-override`|Additional parameters of the base task to override for this parameter search. Use the following JSON format for each parameter: `{"name": "param_name", "value": <new_value>}`. Windows users, see JSON format note [here](#json_note).|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--objective-metric-title`| Objective metric title to maximize/minimize (e.g. 'validation').|<imgsrc="/docs/latest/icons/ico-optional-no.svg"alt="No"className="icon size-md center-md"/>|
|`--objective-metric-series`| Objective metric series to maximize/minimize (e.g. 'loss').|<imgsrc="/docs/latest/icons/ico-optional-no.svg"alt="No"className="icon size-md center-md"/>|
|`--objective-metric-sign`| Optimization target, whether to maximize or minimize the value of the objective metric specified. Possible values: "min", "max", "min_global", "max_global". See more information [here](#optimization-objective). |<imgsrc="/docs/latest/icons/ico-optional-no.svg"alt="No"className="icon size-md center-md"/>|
|`--optimizer-class`|The optimizer to use. Possible values are: OptimizerOptuna (default), OptimizerBOHB, GridSearch, RandomSearch. See more information [here](../fundamentals/hpo.md#supported-optimizers). |<imgsrc="/docs/latest/icons/ico-optional-no.svg"alt="No"className="icon size-md center-md"/>|
|`--optimization-time-limit`|The maximum time (minutes) for the optimization to run. The default is `None`, indicating no time limit.|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--compute-time-limit`|The maximum compute time in minutes that experiment can consume. If this time limit is exceeded, all jobs are aborted.|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--pool-period-min`|The time between two consecutive polls (minutes).|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--total-max-jobs`|The total maximum jobs for the optimization process. The default value is `None` for unlimited.|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--min-iteration-per-job`|The minimum iterations (of the objective metric) per single job.|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--max-iteration-per-job`|The maximum iterations (of the objective metric) per single job. When iteration maximum is exceeded, the job is aborted.|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--save-top-k-tasks-only`| Keep only the top \<k\> performing tasks, and archive the rest of the experiments. Input `-1` to keep all tasks. Default: `10`.|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
|`--time-limit-per-job`|Maximum execution time per single job in minutes. When time limit is exceeded, the job is aborted. Default: no time limit.|<imgsrc="/docs/latest/icons/ico-optional-yes.svg"alt="Yes"className="icon size-md center-md"/>|
</div>
### Specifying the Parameter Space
To configure the parameter values to test in the hyperparameter optimization process, pass through the `--params-search`
option the parameter search specification as a list of the parameters definitions.
Use the following JSON format for each parameter:
```python
{
"name": str, # Name of the parameter you want to optimize