Skip to main content

Fork of PredictiveIntelligenceLab/JAX-BO with updates and compatibility improvements for Colab and pipelines

Project description

jaxbo: Bayesian optimization in JAX

CI PyPI License

A maintained, modern-JAX Bayesian optimization library: a small stable core (exact GP regression, 5 kernels, the classic acquisition functions plus a batched score_candidates helper, input priors, L-BFGS training) with optional research extras (MCMC inference, multifidelity and manifold GPs, weighted sampling) that install on demand and are never paid for otherwise.

This is a maintained fork of PredictiveIntelligenceLab/JAX-BO; see the acknowledgment below.

Install

pip install jaxbo

# The quickstart below needs 0.2.0 (score_candidates, extras). Until it is
# on PyPI, install from the repo:
# pip install "jaxbo @ git+https://github.com/ricardogr07/JAX-BO"

The core installs with exactly 4 dependencies: jax, jaxlib, numpy, scipy. Everything else lives behind optional extras:

Install Adds Extra dependencies
pip install jaxbo core: jaxbo.gp, jaxbo.kernels, jaxbo.acquisitions, jaxbo.optimizers, jaxbo.priors, jaxbo.test_functions none
pip install jaxbo[mcmc] jaxbo.mcmc: NUTS-based GP models numpyro
pip install jaxbo[multifidelity] jaxbo.multifidelity: multifidelity, manifold, gradient, and multi-output GPs none
pip install jaxbo[weighted] jaxbo.weights: GMM/KDE weighted acquisition machinery scikit-learn, KDEpy
pip install jaxbo[all] all of the above union

import jaxbo never imports an extra's dependencies; importing an extra without them raises an ImportError naming the pip install jaxbo[extra] fix.

Supported versions

The package pins jax>=0.6,<0.11 (matching jaxlib) and requires Python 3.10 or newer. CI tests every lane below at the jax floor and the newest jax the pin allows:

Python jax tested Status
3.10 0.6.0 to 0.6.2 supported (0.6.2 is the last jax with 3.10 wheels)
3.11 0.6.0 to 0.10.2 supported
3.12 0.6.0 to 0.10.2 supported
3.13 0.6.0 to 0.10.2 tested, advisory until the CI lanes hold a green streak
3.14 0.7.2 to 0.10.2 tested, advisory until the CI lanes hold a green streak

Quickstart: 60 seconds to the next point

Fit a GP to observations of an objective, then score a batch of candidates with expected improvement in one vmapped pass:

import jax.numpy as jnp
import numpy as np
from jax import random

from jaxbo.acquisitions import score_candidates
from jaxbo.gp import GP
from jaxbo.priors import uniform_prior
from jaxbo.utils import normalize


def f(x):
    return ((x - 1.5) ** 2).ravel()


# Domain and observations (raw domain)
lb, ub = jnp.array([-2.0]), jnp.array([3.0])
bounds = {"lb": lb, "ub": ub}
X = jnp.linspace(-2.0, 3.0, 8)[:, None]
y = f(X)

# GP expects an already normalized training batch
batch, norm_const = normalize(X, y, bounds)

gp = GP({"kernel": "RBF", "input_prior": uniform_prior(lb, ub), "criterion": "EI"})
params = gp.train(batch, random.PRNGKey(0), num_restarts=5)

# Score 256 raw-domain candidates in one vmapped pass and pick the best
X_cand = np.linspace(-2.0, 3.0, 256)[:, None]
scores = score_candidates(
    gp, X_cand, params=params, batch=batch, bounds=bounds,
    best=float(np.min(batch["y"])),
)
x_next = X_cand[np.argmin(scores)]
print("next point to evaluate:", x_next)  # close to the true minimum at 1.5

Two contract points worth knowing before you swap in a real objective:

  • Normalization: train consumes batch["X"] exactly as given, so pass the already normalized batch (utils.normalize). predict and score_candidates normalize raw-domain inputs internally against bounds. Normalized batch in, raw candidates in; mixing these up fails silently.
  • Scores: lower is better for every acquisition in jaxbo.acquisitions (EI is returned negated), so the next point is X_cand[np.argmin(scores)].

Prefer a notebook? Launch the interactive tutorial on Colab: Open Demo in Colab

Docker

A quickstart image with jaxbo[all], JupyterLab, and the examples/ notebooks is published to GHCR with each release, starting with 0.2.0:

docker run -p 8888:8888 ghcr.io/ricardogr07/jaxbo

Then open the printed http://127.0.0.1:8888/lab?token=... URL.

Project documentation

  • CONTRIBUTING.md: dev setup (uv + committed lockfile), tox envs, the CI gate map, PR rules, and the benchmark delta rule
  • SCOPE.md: the 0.2.0 revamp scope, architecture, and locked decisions
  • benchmarks/: the performance harness and the "no optimization without a delta" rule
  • docs/audits/: reposage audit baseline the revamp is measured against
  • CHANGELOG.md: release notes, generated by release-please

Acknowledgment

This project is a fork of JAX-BO by the Predictive Intelligence Lab at the University of Pennsylvania (Paris Perdikaris, Yibo Yang, Mohamed Aziz Bhouri). The core model structure, kernels, and acquisition functions originate there; this fork modernizes the library (current jax/python support, core/extras packaging, tests, benchmarks, CI) and is maintained independently by Ricardo García Ramírez. It is not affiliated with the original authors.

If you use this library in your research, please cite the original work (see also CITATION.cff):

@software{jaxbo2020github,
  author = {Paris Perdikaris, Yibo Yang, Mohamed Aziz Bhouri},
  title = {{JAX-BO}: A Bayesian optimization library in {JAX}},
  url = {https://github.com/PredictiveIntelligenceLab/JAX-BO},
  version = {0.2},
  year = {2020},
}

License

Apache License 2.0. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jaxbo-0.2.0.tar.gz (72.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

jaxbo-0.2.0-py3-none-any.whl (87.2 kB view details)

Uploaded Python 3

File details

Details for the file jaxbo-0.2.0.tar.gz.

File metadata

  • Download URL: jaxbo-0.2.0.tar.gz
  • Upload date:
  • Size: 72.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for jaxbo-0.2.0.tar.gz
Algorithm Hash digest
SHA256 e9f83c0cf4d66b77b9b5a4f2cca0f74a25540ee2dbcd0b50fed83eb29fc7bbac
MD5 466a06146fa2bf1a05dab245cc748ccb
BLAKE2b-256 fb78709ec623e58e0d069a870eb476aac2e2363a80d82c47490165ba1f5826f7

See more details on using hashes here.

Provenance

The following attestation bundles were made for jaxbo-0.2.0.tar.gz:

Publisher: release.yml on ricardogr07/JAX-BO

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jaxbo-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: jaxbo-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 87.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for jaxbo-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8d7834eb9d12b179e5a4c907e6e7188d838d50be931f659563993a9713570952
MD5 74f493e61b1899e24327459016100f3a
BLAKE2b-256 57a6c4755c8b645f1e249da5e2ea089193bc8ee8b05721f66f16416d757437eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for jaxbo-0.2.0-py3-none-any.whl:

Publisher: release.yml on ricardogr07/JAX-BO

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page