Ejemplo n.º 1
0
def main(args):
    """List all experiments inside database."""
    config = experiment_builder.get_cmd_config(args)
    experiment_builder.setup_storage(config.get('storage'))

    query = {}

    if args['name']:
        query['name'] = args['name']

    experiments = get_storage().fetch_experiments(query)

    if args['name']:
        root_experiments = experiments
    else:
        root_experiments = [
            exp for exp in experiments
            if exp['refers'].get('root_id', exp['_id']) == exp['_id']
        ]

    if not root_experiments:
        print("No experiment found")
        return

    for root_experiment in root_experiments:
        root = experiment_builder.build_view(
            name=root_experiment['name'],
            version=root_experiment.get('version')).node
        print_tree(root, nameattr='tree_name')
Ejemplo n.º 2
0
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"))

    # If EVC is not enabled, we force Consumer to ignore code changes.
    if not config["branching"].get("enable", orion.core.config.evc.enable):
        ignore_code_changes = True
    else:
        ignore_code_changes = config["branching"].get("ignore_code_changes")

    with sigterm_as_interrupt():
        workon(experiment,
               ignore_code_changes=ignore_code_changes,
               **worker_config)
Ejemplo n.º 3
0
def main(args):
    """Upgrade the databases for current version"""
    print(
        "Upgrading your database may damage your data. Make sure to make a backup before the "
        "upgrade and stop any other process that may read/write the database during the upgrade."
    )

    if not args.get('force'):
        action = ''
        while action not in ['y', 'yes', 'no', 'n']:
            action = ask_question("Do you wish to proceed? (y/N)", "N").lower()

        if action in ['no', 'n']:
            sys.exit(0)

    config = experiment_builder.get_cmd_config(args)
    storage_config = config.get('storage')

    if storage_config is None:
        storage_config = {'type': 'legacy'}

    storage_config['setup'] = False

    experiment_builder.setup_storage(storage_config)

    storage = get_storage()

    upgrade_db_specifics(storage)

    print('Updating documents...')
    upgrade_documents(storage)
    print('Database upgrade completed successfully')
Ejemplo n.º 4
0
def main(args):
    """Upgrade the databases for current version"""
    print(
        "Upgrading your database may damage your data. Make sure to make a backup before the "
        "upgrade and stop any other process that may read/write the database during the upgrade."
    )

    if not args.get("force"):
        action = ""
        while action not in ["y", "yes", "no", "n"]:
            action = ask_question("Do you wish to proceed? (y/N)", "N").lower()

        if action in ["no", "n"]:
            sys.exit(0)

    config = experiment_builder.get_cmd_config(args)
    storage_config = config.get("storage")

    if storage_config is None:
        storage_config = {"type": "legacy"}

    storage_config["setup"] = False

    experiment_builder.setup_storage(storage_config)

    storage = get_storage()

    upgrade_db_specifics(storage)

    print("Updating documents...")
    upgrade_documents(storage)
    print("Database upgrade completed successfully")
Ejemplo n.º 5
0
def main(args):
    """List all experiments inside database."""
    config = experiment_builder.get_cmd_config(args)
    experiment_builder.setup_storage(config.get("storage"))

    query = {}

    if args["name"]:
        query["name"] = args["name"]

    experiments = get_storage().fetch_experiments(query)

    if args["name"]:
        root_experiments = experiments
    else:
        root_experiments = [
            exp for exp in experiments
            if exp["refers"].get("root_id", exp["_id"]) == exp["_id"]
        ]

    if not root_experiments:
        print("No experiment found")
        return

    for root_experiment in root_experiments:
        root = experiment_builder.load(
            name=root_experiment["name"],
            version=root_experiment.get("version")).node
        print_tree(root, nameattr="tree_name")
Ejemplo n.º 6
0
def main(args):
    """Remove the experiment(s) or trial(s)."""
    config = experiment_builder.get_cmd_config(args)
    experiment_builder.setup_storage(config.get("storage"))

    # Find root experiment
    root = experiment_builder.load(
        name=args["name"], version=args.get("version", None)
    ).node

    try:
        query = build_query(args["query"])
        update = build_update(args["update"])
    except ValueError as e:
        print(f"Error: {e}", file=sys.stderr)
        return 1

    # List all experiments with children
    print_tree(root, nameattr="tree_name")

    confirmed = confirm_name(
        CONFIRM_MESSAGE.format(query=args["query"], update=args["update"]),
        args["name"],
        args["force"],
    )

    if not confirmed:
        print("Confirmation failed, aborting operation.")
        return 1

    storage = get_storage()

    process_updates(storage, root, query, update)

    return 0
Ejemplo n.º 7
0
def main(args):
    """Starts an application server to serve http requests"""
    config = experiment_builder.get_cmd_config(args)

    web_api = WebApi(config)

    gunicorn_app = GunicornApp(web_api)
    gunicorn_app.run()
Ejemplo n.º 8
0
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)
    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, **worker_config)
Ejemplo n.º 9
0
def main(args):
    """Remove the experiment(s) or trial(s)."""
    config = experiment_builder.get_cmd_config(args)
    experiment_builder.setup_storage(config.get("storage"))

    # Find root experiment
    root = experiment_builder.load(name=args["name"],
                                   version=args.get("version", None)).node

    # List all experiments with children
    print_tree(root, nameattr="tree_name")

    storage = get_storage()

    release_locks(storage, root, args["name"], args["force"])
Ejemplo n.º 10
0
def test_get_cmd_config(config_file):
    """Test local config (cmdconfig, cmdargs)"""
    cmdargs = {"config": config_file}
    local_config = experiment_builder.get_cmd_config(cmdargs)

    assert local_config["algorithms"] == "random"
    assert local_config["max_trials"] == 100
    assert local_config["max_broken"] == 5
    assert local_config["name"] == "voila_voici"
    assert local_config["storage"] == {
        "database": {
            "host": "mongodb://*****:*****@localhost",
            "name": "orion_test",
            "type": "mongodb",
        }
    }
    assert local_config["metadata"] == {"orion_version": "XYZ", "user": "******"}
Ejemplo n.º 11
0
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)
Ejemplo n.º 12
0
def test_get_cmd_config_from_incomplete_config(incomplete_config_file):
    """Test local config with incomplete user configuration file
    (default, env_vars, cmdconfig, cmdargs)

    This is to ensure merge_configs update properly the subconfigs
    """
    cmdargs = {"config": incomplete_config_file}
    local_config = experiment_builder.get_cmd_config(cmdargs)

    assert "algorithms" not in local_config
    assert "max_trials" not in local_config
    assert "max_broken" not in local_config
    assert "name" not in local_config["storage"]["database"]
    assert (
        local_config["storage"]["database"]["host"] == "mongodb://*****:*****@localhost"
    )
    assert local_config["storage"]["database"]["type"] == "incomplete"
    assert local_config["name"] == "incomplete"
    assert local_config["metadata"] == {"orion_version": "XYZ", "user": "******"}
Ejemplo n.º 13
0
    def check_configuration_file(self):
        """Check if configuration file has valid database configuration."""
        config = experiment_builder.get_cmd_config(self.cmdargs)

        if not len(config):
            return "Skipping", "Missing configuration file."

        if 'database' not in config.get('storage', {}):
            return "Skipping", "No database found in configuration file."

        config = config['storage']['database']
        names = ['type', 'name', 'host', 'port']

        if not any(name in config for name in names):
            return "Skipping", "No configuration value found inside `database`."

        self.db_config.update(config)

        print('\n   ', config)

        return "Success", ""
Ejemplo n.º 14
0
def test_get_cmd_config_from_incomplete_config(incomplete_config_file):
    """Test local config with incomplete user configuration file
    (default, env_vars, cmdconfig, cmdargs)

    This is to ensure merge_configs update properly the subconfigs
    """
    cmdargs = {"config": incomplete_config_file}
    local_config = experiment_builder.get_cmd_config(cmdargs)

    assert 'algorithms' not in local_config
    assert 'max_trials' not in local_config
    assert 'pool_size' not in local_config
    assert 'name' not in local_config['storage']['database']
    assert local_config['storage']['database'][
        'host'] == 'mongodb://*****:*****@localhost'
    assert local_config['storage']['database']['type'] == 'incomplete'
    assert local_config['name'] == 'incomplete'
    assert local_config['metadata'] == {
        'orion_version': 'XYZ',
        'user': '******'
    }
Ejemplo n.º 15
0
    def check_configuration_file(self):
        """Check if configuration file has valid database configuration."""
        config = experiment_builder.get_cmd_config(self.cmdargs)

        if not len(config):
            return "Skipping", "Missing configuration file."

        if "database" not in config.get("storage", {}):
            return "Skipping", "No database found in configuration file."

        config = config["storage"]["database"]
        names = ["type", "name", "host", "port"]

        if not any(name in config for name in names):
            return "Skipping", "No configuration value found inside `database`."

        self.db_config.update(config)

        print("\n   ", config)

        return "Success", ""
Ejemplo n.º 16
0
def test_get_cmd_config(config_file):
    """Test local config (cmdconfig, cmdargs)"""
    cmdargs = {"config": config_file}
    local_config = experiment_builder.get_cmd_config(cmdargs)

    assert local_config['algorithms'] == 'random'
    assert local_config['strategy'] == 'NoParallelStrategy'
    assert local_config['max_trials'] == 100
    assert local_config['name'] == 'voila_voici'
    assert local_config['pool_size'] == 1
    assert local_config['storage'] == {
        'database': {
            'host': 'mongodb://*****:*****@localhost',
            'name': 'orion_test',
            'type': 'mongodb'
        }
    }
    assert local_config['metadata'] == {
        'orion_version': 'XYZ',
        'user': '******'
    }
Ejemplo n.º 17
0
def main(args):
    """Fetch config and status experiments"""
    config = experiment_builder.get_cmd_config(args)
    experiment_builder.setup_storage(config.get("storage"))

    args["all_trials"] = args.pop("all", False)

    experiments = get_experiments(args)

    if not experiments:
        print("No experiment found")
        return

    if args.get("name"):
        print_evc([experiments[0]], **args)
        return

    if args.get("version"):
        if args.get("collapse") or args.get("expand_versions"):
            raise RuntimeError(
                "Cannot fetch specific version of experiments with --collapse "
                "or --expand-versions.")

    print_evc(experiments, **args)