Source code for orion.core.cli.hunt

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Module running the optimization command
=======================================

Gets an experiment and iterates over it until one of the exit conditions is met

"""

import logging

import orion.core
import orion.core.io.experiment_builder as experiment_builder
from orion.core.cli import base as cli
from orion.core.cli import evc as evc_cli
from orion.core.worker import workon

log = logging.getLogger(__name__)
SHORT_DESCRIPTION = "Conducts hyperparameter optimization"
DESCRIPTION = """
This command starts hyperparameter optimization process for the user-provided model using the
configured optimization algorithm and search space.
"""


[docs]def add_subparser(parser): """Add the subparser that needs to be used for this command""" hunt_parser = parser.add_parser( "hunt", help=SHORT_DESCRIPTION, description=DESCRIPTION ) orion_group = cli.get_basic_args_group( hunt_parser, group_name="Hunt arguments", group_help="" ) orion.core.config.experiment.add_arguments( orion_group, rename=dict(max_broken="--exp-max-broken", max_trials="--exp-max-trials"), ) orion_group.add_argument( "--max-trials", type=int, metavar="#", help="(DEPRECATED) This argument will be removed in v0.3. Use --exp-max-trials instead", ) orion_group.add_argument( "--init-only", default=False, action="store_true", help="Only create the experiment and register in database, but do not execute any trial.", ) worker_args_group = hunt_parser.add_argument_group( "Worker arguments (optional)", description="Arguments to automatically resolved branching events.", ) orion.core.config.worker.add_arguments( worker_args_group, rename=dict(max_broken="--worker-max-broken", max_trials="--worker-max-trials"), ) evc_cli.get_branching_args_group(hunt_parser) cli.get_user_args_group(hunt_parser) hunt_parser.set_defaults(func=main) hunt_parser.set_defaults(help_empty=True) # Print help if command is empty return hunt_parser
[docs]def main(args): """Build experiment and execute hunt command""" args["root"] = None args["leafs"] = [] # TODO: simplify when parameter parsing is refactored experiment = experiment_builder.build_from_args(args) if args["init_only"]: return config = experiment_builder.get_cmd_config(args) worker_config = orion.core.config.worker.to_dict() if config.get("worker"): worker_config.update(config.get("worker")) workon( experiment, ignore_code_changes=config["branching"].get("ignore_code_changes"), **worker_config )