Skip to content

Commit

Permalink
Edits from Gail
Browse files Browse the repository at this point in the history
  • Loading branch information
jmlarson1 committed Oct 31, 2023
1 parent 82ce068 commit 35365a4
Showing 1 changed file with 23 additions and 23 deletions.
46 changes: 23 additions & 23 deletions docs/papers/joss/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,12 +41,12 @@ Therefore, many applications will struggle to efficiently use emerging
extreme-scale high-performance, parallel, and distributed systems.
libEnsemble is a complete Python toolkit and workflow system for intelligently driving
*ensembles* of experiments or simulations at massive scales.
It enables and encourages multi-disciplinary design, decision, and inference
It enables and encourages multidisciplinary design, decision, and inference
studies portably running on laptops, clusters, and supercomputers.

# Statement of Need

While there is a growing number of packages aimed at workflows, relatively few
While a growing number of packages are aimed at workflows, relatively few
focus on running dynamic ensembles of calculations on clusters and supercomputers.
Dynamic ensembles are workflows of computations that are defined and steered
based on intermediate results.
Expand All @@ -56,19 +56,19 @@ these examples, the ensemble members are typically simulations that use differen
parameters or data. Additional examples of applications that have used libEnsemble are
surveyed in [Representative libEnsemble Use Cases](#Representative-libEnsemble-Use-Cases).

Some key considerations for packages running dynamic ensembles include:
Key considerations for packages running dynamic ensembles include the following:

- Ease of use -- whether the software requires a complex setup.
- Ease of use -- whether the software requires a complex setup

- Portability -- running on diverse machines with different schedulers, hardware, and communication modes (e.g., MPI runners) with minimal modification to user scripts.
- Portability -- running on diverse machines with different schedulers, hardware, and communication modes (e.g., MPI runners) with minimal modification to user scripts

- Scalability -- working efficiently with large-scale and/or many concurrent simulations.
- Scalability -- working efficiently with large-scale and/or many concurrent simulations

- Interoperability -- the modularity of the package and the ability to interoperate with other packages.
- Interoperability -- the modularity of the package and the ability to interoperate with other packages

- Adaptive resource management -- the ability to adjust resources given to each simulation throughout the ensemble.
- Adaptive resource management -- the ability to adjust resources given to each simulation throughout the ensemble

- Efficient resource utilization -- including the ability to cancel simulations on the fly.
- Efficient resource utilization -- including the ability to cancel simulations on the fly

libEnsemble seeks to satisfy the above criteria using a generator--simulator--allocator
model. libEnsemble's generators, simulators, and allocators -- commonly referred to as
Expand All @@ -85,7 +85,7 @@ and communicate via the manager.

Other packages for managing workflows and ensembles include Colmena [@colmena21] and the
RADICAL-Ensemble Toolkit [@ensembletoolkit16] as well as packages such as Parsl
[@parsl] and Balsam [@Salim2019] that provide back-end dispatch and execution.
[@parsl] and Balsam [@Salim2019] that provide backend dispatch and execution.

libEnsemble's unique generator--simulator--allocator
paradigm eliminates the need for users to explicitly define task dependencies.
Expand All @@ -98,17 +98,17 @@ readily choose an existing generator function and tailor a simulator function
to their particular needs.

libEnsemble takes the philosophy of minimizing required dependencies while
supporting various back-end mechanisms when needed.
supporting various backend mechanisms when needed.
In contrast to other packages that cover only a
subset of such a workflow,
libEnsemble is a complete toolkit that includes generator-in-the-loop and
backend mechanisms.
For example, Colmena uses front-end components to create and
For example, Colmena uses frontend components to create and
coordinate tasks while using Parsl to dispatch simulations.

For example, the vast majority of current use cases do not require a database or
special run-time environment. For use cases that have such requirements, Balsam
can be used on the back end by
special runtime environment. For use cases that have such requirements, Balsam
can be used on the backend by
substituting the regular MPI executor for the Balsam executor. This approach
simplifies the user experience and reduces the initial setup and adoption costs
when using libEnsemble.
Expand Down Expand Up @@ -139,32 +139,32 @@ GPUs can also be specified for each simulation.
The close coupling between the libEnsemble generators and simulators enables a
generator to perform tasks such as asynchronously receiving results, updating
models, and canceling previously initiated simulations. Simulations that are
already running can be terminated and resources recovered. This is more
flexible compared to other packages, where the generation of simulations is
already running can be terminated and resources recovered. This approach is more
flexible compared with other packages, where the generation of simulations is
external to the dispatch of a batch of simulations.

libEnsemble also supports so-called "persistent user functions" that
libEnsemble also supports "persistent user functions" that
maintain their state while running on workers. This prevents the need to
store and reload data
as is done by other ensemble packages that support only a fire-and-forget
approach to ensemble components.

# Representative libEnsemble Use Cases

Examples of libEnsemble applications in science and engineering include:
Examples of libEnsemble applications in science and engineering include the following:

- Optimization of variational algorithms on quantum computers [@Liu2022layer].
- Parallelization of the ParMOO solver for multiobjective simulation optimization problems [@ParMOODesign23].
- Design of particle accelerators [@Neveu2023] [@PhysRevAccelBeams.26.084601] [@Pousa22].
- Sequential Bayesian experimental design [@Surer2023] and Bayesian calibration [@MCMPSW2022].
- Optimization of variational algorithms on quantum computers [@Liu2022layer]
- Parallelization of the ParMOO solver for multiobjective simulation optimization problems [@ParMOODesign23]
- Design of particle accelerators [@Neveu2023] [@PhysRevAccelBeams.26.084601] [@Pousa22]
- Sequential Bayesian experimental design [@Surer2023] and Bayesian calibration [@MCMPSW2022]

A selection of community-provided libEnsemble functions and workflows that
users can build off is maintained in [@libEnsembleCommunityExamples].

Additional details on the parallel features and scalability of libEnsemble can
be found in [@Hudson2022] and [@libensemble-man].

# Acknowledgements
# Acknowledgments

We acknowledge contributions from David Bindel.
This article was supported in part by the PETSc/TAO activity within the U.S.
Expand Down

0 comments on commit 35365a4

Please sign in to comment.