3. Example

In default, your training function (ex: pseudo_train) was called with params and exp_info arguments. You also can pass the extra arguments as tuple with args keyword for Polaris instance (picklable instance only).

3.1. Single Execution

from polaris import Polaris, STATUS_SUCCESS, Trials, Bounds


def pseudo_train(params, exp_info, extra_args):
    lr_squared = (params['lr'] - 0.006) ** 2
    weight_decay_squared = (params['weight_decay'] - 0.02) ** 2
    loss = lr_squared + weight_decay_squared

    return {
        'loss':  loss,
        'status': STATUS_SUCCESS,
    }


if __name__ == '__main__':
    bounds = [
        Bounds('lr', 0.001, 0.01),
        Bounds('weight_decay', 0.0002, 0.04),
    ]
    trials = Trials()

    extra_args = 'extra_args!!'

    polaris = Polaris(
            pseudo_train, bounds, 'bayesian_opt',
            trials, max_evals=100, exp_key='this_is_test', args=(extra_args,))
    best_params = polaris.run()
    print(best_params)

3.2. Parallel Execution

3.2.1. Single Process

  1. Run rabbitmq-server
  2. Set RABBITMQ_URL environment variable (Ex: ampq://guest:guest@localhost//)
  3. Run polaris-worker –exp-key this_is_test
  4. Run client as follows

3.2.2. Multiple Processes (Use MPI)

  1. Run rabbitmq-server
  2. Run pip install mpi4py
  3. Set RABBITMQ_URL environment variable (Ex: ampq://guest:guest@localhost//)
  4. Run mpirun -n 4 polaris-worker –mpi –exp-key this_is_test
  5. Run client as follows
...

if __name__ == '__main__':
    bounds = [
        Bounds('lr', 0.001, 0.01),
        Bounds('weight_decay', 0.0002, 0.04),
    ]
    trials = Trials()
    polaris = Polaris(
            pseudo_train, bounds, 'bayesian_opt',
            trials, max_evals=100, exp_key='this_is_test')
    best_params = polaris.run_parallel()
    print(best_params)