libEnsemble: A complete toolkit for dynamic ensembles of calculations¶
libEnsemble empowers model-driven ensembles to solve design, decision, and inference problems on the world’s leading supercomputers such as Frontier, Aurora, and Perlmutter.
Dynamic ensembles: Generate parallel tasks on-the-fly based on previous computations.
Extreme portability and scaling: Run on or across laptops, clusters, and leadership-class machines.
Heterogeneous computing: Dynamically and portably assign CPUs, GPUs, or multiple nodes.
Application monitoring: Ensemble members can run, monitor, and cancel apps.
Data-flow between tasks: Running ensemble members can send and receive data.
Low start-up cost: No additional background services or processes required.
New: libEnsemble nows supports the gest-api generator standard, and can run with Optimas and Xopt generators.
The to generate customized scripts for running ensembles with your
MPI applications.
Installation¶
Install libEnsemble and its dependencies from PyPI using pip:
pip install libensemble
Other install methods are described in the docs.
Basic Usage¶
Create an Ensemble, then customize it with general settings, simulation and generator parameters,
and an exit condition.
import numpy as np
from gest_api.vocs import VOCS
from libensemble import Ensemble
from libensemble.gen_classes.sampling import UniformSample
from libensemble.sim_funcs.six_hump_camel import six_hump_camel
from libensemble.specs import ExitCriteria, GenSpecs, LibeSpecs, SimSpecs
if __name__ == "__main__":
# Define problem using VOCS
vocs = VOCS(
variables={"x": [-3, 3], "y": [-2, 2]},
objectives={"f": "MINIMIZE"},
)
# General settings
libE_specs = LibeSpecs(nworkers=4)
# Simulation parameters
sim_specs = SimSpecs(
sim_f=six_hump_camel,
inputs=["x"],
outputs=[("f", float)],
)
# Generator parameters (standardized generator)
gen_specs = GenSpecs(
generator=UniformSample(vocs),
inputs=["sim_id"],
persis_in=["x", "f"],
outputs=[("x", float, 2)],
vocs=vocs,
user={"gen_batch_size": 50},
)
# Exit criteria
exit_criteria = ExitCriteria(sim_max=100)
# Create and run ensemble
sampling = Ensemble(
libE_specs=libE_specs,
sim_specs=sim_specs,
gen_specs=gen_specs,
exit_criteria=exit_criteria,
)
sampling.run()
if sampling.is_manager:
sampling.save_output(__file__)
print("Some output data:\n", sampling.H[["x", "f"]][:10])
Try some other examples live in Colab.
Description |
Try online |
|---|---|
Simple Ensemble that makes a Sine wave. |
|
Ensemble with an MPI application. |
|
Optimization example that finds multiple minima. |
|
Surrogate model generation with gpCAM. |
|
Bayesian Optimization with Xopt. |
There are many more examples in the regression tests and Community Examples repository.
Resources¶
Support:
Ask questions or report issues on GitHub.
Email
libEnsemble@lists.mcs.anl.govto request libEnsemble Slack page.Join the libEnsemble mailing list for updates about new releases.
Further Information:
Documentation is provided by ReadtheDocs.
Contributions to libEnsemble are welcome.
Browse production functions and workflows in the Community Examples repository.
Cite libEnsemble:
@article{Hudson2022,
title = {{libEnsemble}: A Library to Coordinate the Concurrent
Evaluation of Dynamic Ensembles of Calculations},
author = {Stephen Hudson and Jeffrey Larson and John-Luke Navarro and Stefan M. Wild},
journal = {{IEEE} Transactions on Parallel and Distributed Systems},
volume = {33},
number = {4},
pages = {977--988},
year = {2022},
doi = {10.1109/tpds.2021.3082815}
}
See the tutorial for a step-by-step beginners guide.
See the user guide for more information.
Example Compatible Packages
libEnsemble and the Community Examples repository include example generator functions for the following libraries:
APOSMM Asynchronously parallel optimization solver for finding multiple minima. Supported local optimization routines include:
DFO-LS Derivative-free solver for (bound constrained) nonlinear least-squares minimization
NLopt Library for nonlinear optimization, providing a common interface for various methods
scipy.optimize Open-source solvers for nonlinear problems, linear programming, constrained and nonlinear least-squares, root finding, and curve fitting.
PETSc/TAO Routines for the scalable (parallel) solution of scientific applications
DEAP Distributed evolutionary algorithms
Distributed optimization methods for minimizing sums of convex functions. Methods include:
Primal-dual sliding (https://arxiv.org/pdf/2101.00143).
Distributed gradient descent with gradient tracking (https://arxiv.org/abs/1908.11444).
Proximal sliding (https://arxiv.org/abs/1406.0919).
ECNoise Estimating Computational Noise in Numerical Simulations
Surmise Modular Bayesian calibration/inference framework
Tasmanian Toolkit for Adaptive Stochastic Modeling and Non-Intrusive ApproximatioN
VTMOP Fortran package for large-scale multiobjective multidisciplinary design optimization
libEnsemble has also been used to coordinate many computationally expensive simulations. Select examples include:
OPAL Object Oriented Parallel Accelerator Library. (See this IPAC manuscript.)
WarpX Advanced electromagnetic particle-in-cell code.