Skip to content

Commit

Permalink
Merge pull request #518 from Libensemble/release/v_0.7.1
Browse files Browse the repository at this point in the history
Release/v 0.7.1
  • Loading branch information
shuds13 committed Oct 16, 2020
2 parents a870bd4 + 5447d3f commit 0d699f4
Show file tree
Hide file tree
Showing 141 changed files with 3,748 additions and 1,586 deletions.
3 changes: 3 additions & 0 deletions .flake8
Expand Up @@ -22,6 +22,9 @@ per-file-ignores =
libensemble/__init__.py:F401
libensemble/libensemble/__init__.py:F401

# worker uses regex with chars that resemble escape sequences
libensemble/libE_worker.py:W605

# Need to turn of matching probes (before other imports) on some
# systems/versions of MPI:
libensemble/tests/standalone_tests/mpi_launch_test/create_mpi_jobs.py:E402
Expand Down
41 changes: 29 additions & 12 deletions .travis.yml
Expand Up @@ -36,15 +36,30 @@ jobs:
env: MPI=mpich PY=3.7 COMMS_TYPE=t # tcp
language: generic
python: 3.7

# Below will update the OSX octave used on Travis. This was so slow that we
# were hitting the 50 minute limit on Travis. We no longer update octave in
# homebrew, and can no longer run regression # tests using octave on OSX.
# addons:
# homebrew:
# packages:
# - octave
# update: true
- os: osx
osx_image: xcode11.3
env: MPI=mpich PY=3.8 COMMS_TYPE=m # mpi
language: generic
python: 3.8
- os: osx
osx_image: xcode11.3
env: MPI=mpich PY=3.8 COMMS_TYPE=l # local
language: generic
python: 3.8
- os: osx
osx_image: xcode11.3
env: MPI=mpich PY=3.8 COMMS_TYPE=t # tcp
language: generic
python: 3.8
fast_finish: true
allow_failures:
- python: 3.8
- os: osx
env: MPI=mpich PY=3.8 COMMS_TYPE=m # mpi
- os: osx
env: MPI=mpich PY=3.8 COMMS_TYPE=l # mpi
- os: osx
env: MPI=mpich PY=3.8 COMMS_TYPE=t # mpi

services:
- postgresql
Expand All @@ -66,7 +81,7 @@ before_install:
- conda info -a # For debugging conda issues
- conda config --add channels conda-forge
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
conda create --yes --name condaenv python=3.7;
conda create --yes --name condaenv python=$PY;
else
conda create --yes --name condaenv python=$TRAVIS_PYTHON_VERSION;
fi
Expand All @@ -90,14 +105,16 @@ install:
- if [[ "$TRAVIS_PYTHON_VERSION" == "3.8" ]]; then
conda install nlopt mpi4py scipy mpich;
export PETSC_CONFIGURE_OPTIONS='--with-batch';
pip install petsc petsc4py;
conda install petsc4py;
else
conda install nlopt petsc4py petsc $MUMPS mpi4py scipy $MPI;
fi

# Begin: Dependencies only for regression tests
- pip install DFO-LS
- pip install deap
- conda install psutil
- pip install mpmath
- if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then
pip install scikit-build packaging Tasmanian --user;
fi
Expand Down Expand Up @@ -125,7 +142,7 @@ before_script:

# Run test (-z show output)
script:
- ./libensemble/tests/run-tests.sh -z -$COMMS_TYPE
- ./libensemble/tests/run-tests.sh -A "-W error" -z -$COMMS_TYPE

# Track code coverage
after_success:
Expand Down
144 changes: 96 additions & 48 deletions CHANGELOG.rst
Expand Up @@ -4,6 +4,54 @@ Release Notes

Below are the notes from all libEnsemble releases.

Release 0.7.1
-------------

:Date: Oct 15, 2020

Dependencies:

* ``psutils`` is now a required dependency. (#478 #491)

API additions:

* Executor updates:

* Addition of a zero-resource worker option for persistent gens (does not allocate nodes to gen). (#500)
* Multiple applications can be registered to the Executor (and submitted) by name. (#498)
* Wait function added to Tasks. (#499)

* Gen directories can now be created with options analogous to those for sim dirs. (#349 / #489)

Other changes:

* Improve comms efficiency (Repack fields when NumPy version 1.15+). (#511)
* Fix multiprocessing error on macOS/Python3.8 (Use 'fork' instead of 'spawn'). (#502 / #503)

Updates to example functions:

* Allow APOSMM to trigger ensemble exit when condition reached. (#507)
* Improvement in how persistent APOSMM shuts down subprocesses (preventing PETSc MPI-abort). (#478)

Documentation:

* APOSMM Tutorial added. (#468)
* Writing guide for user functions added to docs (e.g., creating sim_f, gen_f, alloc_f). (#510)
* Addition of posters and presentations section to docs (inc. Jupyter notebooks/binder links). (#492 #497)

:Note:

* Tested platforms include Linux, MacOS, Theta (Cray XC40/Cobalt), Summit (IBM Power9/LSF), Bebop (Cray CS400/Slurm), and Bridges (HPE system at PSC).
* Cori (Cray XC40/Slurm) was not tested with release code due to system issues.
* Tested Python versions: (Cpython) 3.5, 3.6, 3.7, 3.8.

:Known issues:

* We currently recommended running in Central mode on Bridges as distributed runs are experiencing hangs.
* OpenMPI does not work with direct MPI job launches in mpi4py comms mode, since it does not support nested MPI launches
(Either use local mode or Balsam job controller).
* See known issues section in the documentation for more issues.

Release 0.7.0
-------------

Expand All @@ -20,34 +68,34 @@ Breaking API changes:

API additions:

* Added gen_funcs.rc configuration framework with option to select APOSMM Optimizers for import (#444)
* Provide ``alloc_specs`` defaults via `alloc_funcs.defaults` module (#325)
* Added ``extra_args`` option to the Executor submit function to allow addition of arbitrary MPI runner options (#445)
* Added ``custom_info`` argument to MPI Executor to allow overriding of detected settings (#448)
* Added ``libE_specs`` option to disable log files (#368)
* Added gen_funcs.rc configuration framework with option to select APOSMM Optimizers for import. (#444)
* Provide ``alloc_specs`` defaults via `alloc_funcs.defaults` module. (#325)
* Added ``extra_args`` option to the Executor submit function to allow addition of arbitrary MPI runner options. (#445)
* Added ``custom_info`` argument to MPI Executor to allow overriding of detected settings. (#448)
* Added ``libE_specs`` option to disable log files. (#368)

Other changes:

* Added libEnsemble Conda package, hosted on conda-forge.
* Bugfix: Intermittent failures with repeated libE calls under `mpi4py` comms
* Bugfix: Intermittent failures with repeated libE calls under `mpi4py` comms.
Every libE call now uses its own duplicate of provided communicator and closes out. (#373/#387)
* More accurate timing in `libE_stats.txt`. (#318)
* Addition of new post-processing scripts.

Updates to example functions:

* Persistent APOSMM is now the recommended APOSMM (`aposmm.py` renamed to `old_aposmm.py`) (#435)
* Persistent APOSMM is now the recommended APOSMM (`aposmm.py` renamed to `old_aposmm.py`). (#435)
* New alloc/gen func: Finite difference parameters with noise estimation. (#350)
* New example gen func: Tasmanian UQ generator. (#351)
* New example gen func: Deap/NSGA2 generator. (#407)
* New example gen func to interface with VTMOP.
* New example sim func: Borehole (#367)
* New example use-case: WarpX/APOSMM (#425)
* New example sim func: Borehole. (#367)
* New example use-case: WarpX/APOSMM. (#425)

:Note:

* Tested platforms include Linux, MacOS, Theta (Cray XC40/Cobalt), Summit (IBM Power9/LSF), Bebop (Cray CS400/Slurm), Cori (Cray XC40/Slurm), and Bridges (HPE system at PSC).
* Tested Python versions: (Cpython) 3.5, 3.6, 3.7, 3.8
* Tested Python versions: (Cpython) 3.5, 3.6, 3.7, 3.8.

:Known issues:

Expand All @@ -61,21 +109,21 @@ Release 0.6.0

API changes:

* sim/gen/alloc_specs options that do not directly involve these routines are moved to libE_specs (see docs) (#266, #269)
* sim/gen/alloc_specs now require user-defined attributes to be added under the ``'user'`` field (see docs and examples) (#266, #269).
* Addition of a utils module to help users create calling scripts. Includes an argument parser and utility functions (#308).
* check_inputs() function is moved to the utils module (#308).
* The libE_specs option ``nprocesses`` has been changed to ``nworkers`` (#235)
* sim/gen/alloc_specs options that do not directly involve these routines are moved to libE_specs (see docs). (#266, #269)
* sim/gen/alloc_specs now require user-defined attributes to be added under the ``'user'`` field (see docs and examples). (#266, #269)
* Addition of a utils module to help users create calling scripts. Includes an argument parser and utility functions. (#308)
* check_inputs() function is moved to the utils module. (#308)
* The libE_specs option ``nprocesses`` has been changed to ``nworkers``. (#235)

New example functions:

* Addition of a persistent APOSMM generator function (#217).
* Addition of a persistent APOSMM generator function. (#217)

Other changes:

* Overhaul of documentation, including HPC platform guides and a new pdf structure (inc. #232, #282)
* Addition of OpenMP threading and GPU support to forces test (#250).
* Balsam job_controller now tested on Travis (#47)
* Overhaul of documentation, including HPC platform guides and a new pdf structure. (inc. #232, #282)
* Addition of OpenMP threading and GPU support to forces test. (#250)
* Balsam job_controller now tested on Travis. (#47)

:Note:

Expand All @@ -97,7 +145,7 @@ Release 0.5.2
* All output from libEnsemble goes via logger. MANAGER_WARNING level added. This level and above are echoed to stderr by default. API option to change echo level.
* Simulation directories are created only during sim_f calls are suffixed by _worker. #146
* New user function libE.check_inputs() can be used to check valid configuration of inputs. Can be called in serial or under MPI (see libE API). #65
* Installation option has been added to install dependencies used in tests ``pip install libensemble[extras]``
* Installation option has been added to install dependencies used in tests ``pip install libensemble[extras]``.
* A profiling option has been added to sim_specs. #170
* Results comparison scripts have been included for convenience.

Expand All @@ -116,14 +164,14 @@ Release 0.5.1

:Date: July 11, 2019

* Fixed LSF resource detection for large jobs on LSF systems (e.g., Summit) #184
* Added support for macOS #182
* Improved the documentation (including addition of beginner's tutorial and FAQ)
* Fixed LSF resource detection for large jobs on LSF systems (e.g., Summit). #184
* Added support for macOS. #182
* Improved the documentation (including addition of beginner's tutorial and FAQ).

:Note:

* Tested platforms include Local Linux, Theta (Cray XC40/Cobalt), Summit (IBM Power9/LSF), and Bebop (Cray CS400/Slurm).
* Tested Python versions: (Cpython) 3.4, 3.5, 3.6, 3.7
* Tested Python versions: (Cpython) 3.4, 3.5, 3.6, 3.7.

:Known issues:

Expand All @@ -134,19 +182,19 @@ Release 0.5.0

:Date: May 22, 2019

* Added local (multiprocessing) and TCP options for manager/worker communications, in addition to mpi4py (#42).
* Added local (multiprocessing) and TCP options for manager/worker communications, in addition to mpi4py. (#42).

* Example: libEnsemble can be run on MOM/launch nodes (e.g., those of ALCF/Theta & OLCF/Summit) and can remotely detect compute resources.
* Example: libEnsemble can be run on a system without MPI.
* Example: libEnsemble can be run with a local manager and remote TCP workers.

* Added support for Summit/LSF scheduler in job controller.
* MPI job controller detects and retries launches on failure; adding resilience (#143).
* Job controller supports option to extract/print job times in libE_stats.txt (#136).
* Default logging level changed to INFO (#164).
* Logging interface added, which allows user to change logging level and file (#110).
* MPI job controller detects and retries launches on failure; adding resilience. (#143)
* Job controller supports option to extract/print job times in libE_stats.txt. (#136)
* Default logging level changed to INFO. (#164)
* Logging interface added, which allows user to change logging level and file. (#110)
* All worker logging and calculation stats are routed through manager.
* libEnsemble can be run without a gen_func, for example, when using a previously computed random sample (#122).
* libEnsemble can be run without a gen_func, for example, when using a previously computed random sample. (#122)
* Aborts dump persis_info with the history.

:Note:
Expand All @@ -167,22 +215,22 @@ Release 0.4.1

:Date: February 20, 2019

* Logging no longer uses root logger (also added option to change libEnsemble log level) (#105)
* Added wait_on_run option for job controller launch to block until jobs have started (#111)
* persis_info can be passed to sim as well as gen functions (#112)
* Postprocessing scripts added to create performance/utilization graphs (#102)
* New scaling test added (not part of current CI test suite) (#114)
* Logging no longer uses root logger (also added option to change libEnsemble log level). (#105)
* Added wait_on_run option for job controller launch to block until jobs have started. (#111)
* persis_info can be passed to sim as well as gen functions. (#112)
* Postprocessing scripts added to create performance/utilization graphs. (#102)
* New scaling test added (not part of current CI test suite). (#114)

Release 0.4.0
-------------

:Date: November 7, 2018

* Separated job controller classes into different modules including a base class (API change)
* Added central_mode run option to distributed type (MPI) job_controllers (API addition) (#93)
* Made poll and kill job methods (API change)
* In job_controller, set_kill_mode is removed and replaced by a wait argument for a hard kill (API change)
* Removed register module - incorporated into job_controller (API change)
* Separated job controller classes into different modules including a base class (API change).
* Added central_mode run option to distributed type (MPI) job_controllers (API addition). (#93)
* Made poll and kill job methods (API change).
* In job_controller, set_kill_mode is removed and replaced by a wait argument for a hard kill (API change).
* Removed register module - incorporated into job_controller (API change).
* APOSMM has improved asynchronicity when batch mode is false (with new example). (#96)
* Manager errors (instead of hangs) when alloc_f or gen_f don't return work when all workers are idle. (#95)

Expand All @@ -195,17 +243,17 @@ Release 0.3.0

:Date: September 7, 2018

* Issues with killing jobs have been fixed (#21)
* Fixed job_controller manager_poll to work with multiple jobs (#62)
* Issues with killing jobs have been fixed. (#21)
* Fixed job_controller manager_poll to work with multiple jobs. (#62)
* API change: persis_info now included as an argument to libE and is returned from libE instead of gen_info
* Gen funcs: aposmm_logic module renamed to aposmm.
* New example gen and allocation functions.
* Updated Balsam launch script (with new Balsam workflow)
* History is dumped to file on manager or worker exception and MPI aborted (with exit code 1) (#46)
* Default logging level changed to DEBUG and redirected to file ensemble.log
* Added directory of standalone tests (comms, job kills, and nested MPI launches)
* Improved and speeded up unit tests (#68)
* Considerable documentation enhancements
* Updated Balsam launch script (with new Balsam workflow).
* History is dumped to file on manager or worker exception and MPI aborted (with exit code 1). (#46)
* Default logging level changed to DEBUG and redirected to file ensemble.log.
* Added directory of standalone tests (comms, job kills, and nested MPI launches).
* Improved and speeded up unit tests. (#68)
* Considerable documentation enhancements.

:Known issues:

Expand Down
4 changes: 3 additions & 1 deletion MANIFEST.in
Expand Up @@ -4,8 +4,10 @@ include *.rst
include LICENSE
include CONTRIBUTING
include install/*
include .flake8

recursive-include libensemble *
recursive-include postproc_scripts *
recursive-include examples *
recursive-exclude * __pycache__
recursive-exclude * *.py[co]
Expand All @@ -14,4 +16,4 @@ recursive-exclude * *.o
recursive-exclude * *.npy
recursive-exclude * *.gitignore

recursive-include docs *.pdf *.rst conf.py Makefile make.bat
recursive-include docs *
8 changes: 5 additions & 3 deletions README.rst
Expand Up @@ -64,6 +64,7 @@ Required dependencies:

* Python_ 3.5 or above
* NumPy_
* psutil_

For libEnsemble running with the mpi4py parallelism:

Expand Down Expand Up @@ -213,16 +214,16 @@ Resources
David Bindel and John-Luke Navarro},
title = {{libEnsemble} Users Manual},
institution = {Argonne National Laboratory},
number = {Revision 0.7.0},
number = {Revision 0.7.1},
year = {2020},
url = {https://buildmedia.readthedocs.org/media/pdf/libensemble/latest/libensemble.pdf}
}
.. after_resources_rst_tag
.. _Balsam: https://www.alcf.anl.gov/support-center/theta/balsam
.. _Coveralls: https://coveralls.io/github/Libensemble/libensemble?branch=master
.. _Conda: https://docs.conda.io/en/latest/
.. _Coveralls: https://coveralls.io/github/Libensemble/libensemble?branch=master
.. _DFO-LS: https://github.com/numericalalgorithmsgroup/dfols
.. _GitHub: https://github.com/Libensemble/libensemble
.. _libEnsemble mailing list: https://lists.mcs.anl.gov/mailman/listinfo/libensemble
Expand All @@ -235,7 +236,8 @@ Resources
.. _NumPy: http://www.numpy.org
.. _petsc4py: https://bitbucket.org/petsc/petsc4py
.. _PETSc: http://www.mcs.anl.gov/petsc
.. _poster: https://figshare.com/articles/LibEnsemble_PETSc_TAO-_Sustaining_a_library_for_dynamic_ensemble-based_computations/7765454
.. _poster: https://figshare.com/articles/libEnsemble_A_Python_Library_for_Dynamic_Ensemble-Based_Computations/12559520
.. _psutil: https://pypi.org/project/psutil/
.. _PyPI: https://pypi.org
.. _pytest-cov: https://pypi.org/project/pytest-cov/
.. _pytest-timeout: https://pypi.org/project/pytest-timeout/
Expand Down
11 changes: 11 additions & 0 deletions binder/environment.yml
@@ -0,0 +1,11 @@
name: libensemble-python

channels:
- conda-forge

dependencies:
- numpy
- openmpi
- openmpi-mpicc
- mpi4py
- libensemble

0 comments on commit 0d699f4

Please sign in to comment.