BoTorch is a library for Bayesian Optimization built on PyTorch.
BoTorch is currently in beta and under active development!
Why BoTorch ?
- Provides a modular and easily extensible interface for composing Bayesian
optimization primitives, including probabilistic models, acquisition functions,
- Harnesses the power of PyTorch, including auto-differentiation, native support
for highly parallelized modern hardware (e.g. GPUs) using device-agnostic code,
and a dynamic computation graph.
- Supports Monte Carlo-based acquisition functions via the
reparameterization trick, which makes it
straightforward to implement new ideas without having to impose restrictive
assumptions about the underlying model.
- Enables seamless integration with deep and/or convolutional architectures in PyTorch.
- Has first-class support for state-of-the art probabilistic models in
GPyTorch, including support for multi-task Gaussian
Processes (GPs) deep kernel learning, deep GPs, and approximate inference.
The primary audience for hands-on use of BoTorch are researchers and
sophisticated practitioners in Bayesian Optimization and AI.
We recommend using BoTorch as a low-level API for implementing new algorithms
for Ax. Ax has been designed to be an easy-to-use platform
for end-users, which at the same time is flexible enough for Bayesian
Optimization researchers to plug into for handling of feature transformations,
(meta-)data management, storage, etc.
We recommend that end-users who are not actively doing research on Bayesian
Optimization simply use Ax.
- Python >= 3.6
- PyTorch >= 1.1
- gpytorch >= 0.3.2
Installing the latest release
The latest release of BoTorch is easily installed either via
conda install botorch -c pytorch
pip install botorch
Important note for MacOS users:
- You will want to make sure your PyTorch build is linked against MKL (the
non-optimized version of BoTorch can be up to an order of magnitude slower in
some settings). Setting this up manually on MacOS can be tricky - to ensure
this works properly please follow the
PyTorch installation instructions.
- If you need CUDA on MacOS, you will need to build PyTorch from source. Please
consult the PyTorch installation instructions above.
Installing from latest master
If you'd like to try our bleeding edge features (and don't mind potentially
running into the occasional bug here or there), you can install the latest
master directly from GitHub (this will also require installing the current GPyTorch master):
pip install git+https://github.com/cornellius-gp/gpytorch.git pip install git+https://github.com/pytorch/botorch.git
Manual / Dev install
Alternatively, you can do a manual install. For a basic install, run:
git clone https://github.com/pytorch/botorch.git cd botorch pip install -e .
To customize the installation, you can also run the following variants of the
pip install -e .[dev]: Also installs all tools necessary for development
(testing, linting, docs building; see Contributing below).
pip install -e .[tutorials]: Also installs all packages necessary for running the tutorial notebooks.
- Fit a Gaussian Process model to data
import torch from botorch.models import SingleTaskGP from botorch.fit import fit_gpytorch_model from gpytorch.mlls import ExactMarginalLogLikelihood train_X = torch.rand(10, 2) Y = 1 - torch.norm(train_X - 0.5, dim=-1) + 0.1 * torch.rand(10) train_Y = (Y - Y.mean()) / Y.std() gp = SingleTaskGP(train_X, train_Y) mll = ExactMarginalLogLikelihood(gp.likelihood, gp) fit_gpytorch_model(mll)
- Construct an acquisition function
from botorch.acquisition import UpperConfidenceBound UCB = UpperConfidenceBound(gp, beta=0.1)
- Optimize the acquisition function
from botorch.optim import joint_optimize bounds = torch.stack([torch.zeros(2), torch.ones(2)]) candidate = joint_optimize( UCB, bounds=bounds, q=1, num_restarts=5, raw_samples=20, )