Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 0.1.8rc2 #414

Merged
merged 1,015 commits into from
Jul 2, 2020
Merged

Release 0.1.8rc2 #414

merged 1,015 commits into from
Jul 2, 2020

Conversation

bouthilx
Copy link
Member

Important changes

The python API is finally ready for release v0.1.8! 🎉

Python API

An API is now available to run experiments directly from python instead of using the commandline.

from orion.client import create_experiment

experiment = create_experiment(
   name='foo',
   space=dict(x='uniform(-50,50)'))

trial = experiment.suggest()

# Do something using trial.params['x']

results = [dict(
    name='dummy_objective',
    type='objective',
    value=dummy_objective)]

experiment.observe(trial, results)

Current API provides a simple function workon for cheap experiments that can be executed by a single worker, and a generic ExperimentClient (see example above) object for optimization with multiple workers.

See documentation for more details.

New Algorithms

Hyperband

Hyperband extends the Successive Halving algorithm by providing a way to exploit a fixed budget with different number of configurations for SuccessiveHalving algorithm to evaluate. It is especially useful when the trials are expensive to run and cheap noisy evaluations are possible. Think of it as using early evaluation during training to filter out bad candidates.

For more information on the algorithm, see original paper.

TPE

Tree-structured Parzen Estimator (TPE) algorithm is one of Sequential Model-Based Global Optimization (SMBO) algorithms, which will build models to propose new points based on the historical observed trials.

Instead of modeling p(y|x) like other SMBO algorithms, TPE models p(x|y) and p(y), and p(x|y) is modeled by transforming that generative process, replacing the distributions of the configuration prior with non-parametric densities.

TPE has the advantage of scaling particularly well compared to most Model-Based algorithm which are typically sequential. It does not model however dependencies between hyper-parameters, they
are assumed independent.

For more information on the algorithm, see original papers at:

Storage

To support integration with other tools and services such as MLFlow or Weight & Biases we wrapped our previous database backend with a storage backend. The database backends are now available within the Legagy storage backend. In addition, we now have a backend for Track. The latter is planned to serve as a bridge between Oríon and other experiment management platforms
or services. Track package development is on the ice for now, but contributions are very much welcomed. :)

Drop python 3.5, support 3.8

Although Oríon may still be compatible with python 3.5 we do not maintain it's support anymore. Python 3.8 is now officially supported.

Precision of real dimensions

By default Oríon now rounds hyperparameters to 4 decimals (ex 0.00041239123 would become 0.0004124). The rational is that little variations on continuous hyperparameters typically leads
to little variations in the in objective. When sharing hyperparameters (ex: in publications), one can now share the rounded values with the exact corresponding objectives instead of rounding the hyperparameters after the execution and risk sharing unreproducible results.

Rework of documentation

The documentation has been through a major rework.

  • The introduction has been updated to better reflect current features.
  • A section Getting Started and an Overview was added.
  • The plugins documentation was updated with a new cookiecutter template to create algorithm plugins.
  • A minimalist example of scikit-learn was added to serve as the simplest tutorial for Oríon.
  • Extensive documentation on contributions has been added.

Detailed list of changes

New features

Breaking changes

Bug Fixes

Other improvements

Documentation improvements

Thomsch and others added 30 commits March 27, 2020 12:39
Co-Authored-By: Xavier Bouthillier <[email protected]>
Why:

The helper functions were in different modules which was confusing.
Moving them to storage/base and storage/legacy makes it more coherent.
Why:

The method fetch many trials, not only one, hence the name is confusing.
Why:

Database corruption occurs when there is Timeouts in PickledDB. The
objective is saved but status is not set to completed.

How:

We catch
non-completed trials with objective and log a warning with a pointer to
documentation to manually fix corrupted trials.
bouthilx and others added 23 commits June 19, 2020 10:55
Why:

When there are issues that are expected, we silent the stack trace,
print a user-friendly error and return an error code. The main script
should leave with SystemExit(error code) otherwise it looks like it
ended without any errors.
Handle producer config in experiment section
Why:

Some commands such as `orion hunt` cannot be called without any
arguments. The most helpful thing to do in such case is to print the
help message instead of an error.

How:

Mark commands like `hunt` with `help_empty` in the base parser so that it
knows that if no arguments are passed help should be printed.
Add roadmap update to the list of steps for a release
Why:

The doc was referring to the test algo gradient descent instead of
reusing the extensive documentation of the cookiecutter.
Raise exception when no prior is provided
Why:

By merging the release branch on develop, master would have one
additional commit ahead of develop at each release. Merging master on
develop syncs them properly.
@codecov-commenter
Copy link

codecov-commenter commented Jun 25, 2020

Codecov Report

Merging #414 into master will decrease coverage by 47.16%.
The diff coverage is 86.51%.

Impacted file tree graph

@@             Coverage Diff             @@
##           master     #414       +/-   ##
===========================================
- Coverage   94.69%   47.52%   -47.17%     
===========================================
  Files          62       70        +8     
  Lines        9826    13009     +3183     
  Branches      218      322      +104     
===========================================
- Hits         9305     6183     -3122     
- Misses        504     6800     +6296     
- Partials       17       26        +9     
Impacted Files Coverage Δ
tests/functional/algos/test_algos.py 100.00% <ø> (ø)
...functional/backward_compatibility/test_versions.py 87.50% <ø> (-10.74%) ⬇️
tests/functional/branching/test_branching.py 99.29% <ø> (+0.13%) ⬆️
tests/functional/client/test_cli_client.py 100.00% <ø> (ø)
tests/functional/commands/conftest.py 88.07% <ø> (+1.51%) ⬆️
tests/functional/commands/test_db_commands.py 100.00% <ø> (ø)
tests/functional/commands/test_hunt_command.py 100.00% <ø> (ø)
tests/functional/commands/test_info_command.py 100.00% <ø> (ø)
...ests/functional/commands/test_init_only_command.py 100.00% <ø> (ø)
tests/functional/commands/test_insert_command.py 100.00% <ø> (ø)
... and 101 more

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 6d217af...eaa74af. Read the comment docs.

@bouthilx bouthilx merged commit d192c02 into master Jul 2, 2020
@Thomsch Thomsch deleted the release-0.1.8rc2 branch July 2, 2020 19:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants