Managing HPC Software Complexity with Spack Supercomputing 2019 Full-day Tutorial November 18, 2018 The most recent version of these slides can be found at: Dallas, Texas https://spack-tutorial.readthedocs.io LLNL-PRES-806064 spack.io This work was performed under the auspices of the U.S. Department of Energy by Lawrence Livermore National Laboratory under contract DE-AC52-07NA27344. Lawrence Livermore National Security, LLC
Tutorial Materials Download the latest version of slides and handouts at: spack-tutorial.readthedocs.io For more: § Spack website: spack.io § Spack GitHub repository: github.com/spack/spack § Spack Reference Documentation: spack.readthedocs.io spack.io Follow along at spack-tutorial.readthedocs.io 2 LLNL-PRES-806064
Tutorial Presenters Todd Gamblin, Greg Becker, Peter Scheibel Mario Melara Adam Stewart Massimiliano LLNL NERSC UIUC Culpo Sylabs, Inc. spack.io Follow along at spack-tutorial.readthedocs.io 3 LLNL-PRES-806064
Software complexity in HPC is growing glm suite-sparse yaml-cpp metis cmake ncurses pkgconf parmetis nalu hwloc libxml2 xz bzip2 openssl boost trilinos superlu openblas netlib-scalapack mumps openmpi zlib netcdf hdf5 matio m4 libsigsegv parallel-netcdf Nalu: Generalized Unstructured Massively Parallel Low Mach Flow spack.io Follow along at spack-tutorial.readthedocs.io 4 LLNL-PRES-806064
Software complexity in HPC is growing adol-c automake autoconf perl glm suite-sparse yaml-cpp gmp libtool metis cmake ncurses m4 libsigsegv parmetis pkgconf nalu hwloc libxml2 xz p4est pkgconf bzip2 openssl hwloc libxml2 boost xz trilinos superlu openblas netlib-scalapack netcdf-cxx netcdf mumps openmpi zlib nanoflann netcdf hdf5 matio m4 libsigsegv matio parallel-netcdf hdf5 Nalu: Generalized Unstructured Massively Parallel Low Mach Flow sundials glm netlib-scalapack openmpi mumps trilinos hypre openblas gdbm superlu-dist parmetis sqlite readline zlib petsc python dealii slepc ncurses arpack-ng openssl cmake metis gmsh oce suite-sparse tetgen intel-tbb netgen bzip2 assimp boost gsl muparser dealii: C++ Finite Element Library spack.io Follow along at spack-tutorial.readthedocs.io 5 LLNL-PRES-806064
Software complexity in HPC is growing r-randomforest glm suite-sparse yaml-cpp r-labeling metis cmake ncurses parmetis pkgconf r-munsell nalu r-lazyeval hwloc libxml2 xz r-colorspace r-rcolorbrewer bzip2 openssl boost r-viridislite trilinos superlu openblas r-scales r-dichromat netlib-scalapack mumps r-tibble r-assertthat openmpi zlib netcdf hdf5 r-rlang r-gtable matio m4 libsigsegv r-ggplot2 parallel-netcdf r-plyr r-reshape2 r-rcpp Nalu: Generalized Unstructured Massively Parallel Low Mach Flow r-modelmetrics freetype bzip2 gperf r-r6 fontconfig r-minqa r-nloptr r-caret r-digest cairo libxml2 r-rcppeigen pixman r-lme4 harfbuzz libpng r-praise r-testthat pango sed xz adol-c automake gobject-introspection autoconf perl glib gettext r-mgcv r-crayon tar gmp libtool m4 libsigsegv libffi p4est r-nlme libtiff pkgconf hwloc libxml2 help2man r-pbkrtest xz r-mass zlib r-foreach r-iterators flex r-car netcdf-cxx netcdf r-sparsem curl r python ncurses nanoflann pkgconf openssl readline r-quantreg r-matrixmodels matio pcre hdf5 jdk libjpeg-turbo r-matrix cmake sundials icu4c sqlite font-util r-lattice r-adabag r-glmnet glm tk tcl nasm libxau gdbm xproto netlib-scalapack r-cubist r-mlbench libxdmcp openmpi mumps xextproto r-magrittr perl libpthread-stubs trilinos xtrans r-data-table libxcb util-macros r-stringr xcb-proto hypre r-xgboost libx11 inputproto r-rminer r-e1071 r-class r-codetools openblas kbproto gdbm bison r-kknn r-stringi r-igraph r-irlba r-rpart automake superlu-dist parmetis sqlite autoconf readline r-nnet r-pkgconfig zlib petsc gmp libtool m4 libsigsegv python dealii slepc ncurses arpack-ng openssl r-mda metis cmake r-kernlab gmsh oce suite-sparse r-strucchange r-zoo r-sandwich tetgen intel-tbb r-party r-survival netgen bzip2 r-multcomp r-th-data assimp r-plotrix boost r-coin r-mvtnorm r-modeltools gsl r-pls muparser dealii: C++ Finite Element Library R Miner: R Data Mining Library spack.io Follow along at spack-tutorial.readthedocs.io 6 LLNL-PRES-806064
What is the “production” environment for HPC? § Someone’s home directory? § LLNL? LANL? Sandia? ANL? LBL? TACC? — Environments at large-scale sites are very different. § Which MPI implementation? § Which compiler? § Which dependencies? § Which versions of dependencies? — Many applications require specific dependency versions. Real answer: there isn’t a single production environment or a standard way to build. Reusing someone else’s software is HARD. spack.io Follow along at spack-tutorial.readthedocs.io 7 LLNL-PRES-806064
The complexity of the exascale ecosystem threatens productivity. 5+ target architectures/platforms x x 15+ applications 80+ software packages Xeon Power KNL NVIDIA ARM Laptops? Up to 7 compilers 10+ Programming Models 2-3 versions of each package x x x Intel GCC Clang XL OpenMPI MPICH MVAPICH OpenMP CUDA + external dependencies PGI Cray NAG OpenACC Dharma Legion RAJA Kokkos = up to 1,260,000 combinations! § Every application has its own stack of dependencies. § Developers, users, and facilities dedicate (many) FTEs to building & porting. § Often trade reuse and usability for performance. We must make it easier to rely on others’ software! spack.io Follow along at spack-tutorial.readthedocs.io 8 LLNL-PRES-806064
What about containers? § Containers provide a great way to reproduce and distribute an already-built software stack § Someone needs to build the container! — This isn’t trivial — Containerized applications still have hundreds of dependencies § Using the OS package manager inside a container is insufficient — Most binaries are built unoptimized — Generic binaries, not optimized for specific architectures § HPC containers may need to be rebuilt to support many different hosts, anyway. — Not clear that we can ever build one container for all facilities — Containers likely won’t solve the N-platforms problem in HPC We need something more flexible to build the containers spack.io Follow along at spack-tutorial.readthedocs.io 9 LLNL-PRES-806064
Spack is a flexible package manager for HPC § How to install Spack: $ git clone https://github.com/spack/spack $ . spack/share/spack/setup-env.sh § How to install a package: $ spack install hdf5 § HDF5 and its dependencies are installed within the Spack directory. github.com/spack/spack § Unlike typical package managers, Spack can also install many variants of the same build. — Different compilers — Different MPI implementations @spackpm — Different build options spack.io Follow along at spack-tutorial.readthedocs.io 10 LLNL-PRES-806064
Who can use Spack? People who want to use or distribute software for HPC! End Users of HPC Software 1. — Install and run HPC applications and tools HPC Application Teams 2. — Manage third-party dependency libraries Package Developers 3. — People who want to package their own software for distribution User support teams at HPC Centers 4. People who deploy software for users at large HPC sites — spack.io Follow along at spack-tutorial.readthedocs.io 11 LLNL-PRES-806064
Spack is used worldwide! Over 3,500 software packages Over 2,300 monthly active users (on docs site) Over 450 contributors from labs, academia, industry Plot shows sessions on spack.readthedocs.io for one month spack.io Follow along at spack-tutorial.readthedocs.io 12 LLNL-PRES-806064
Spack has been gaining adoption rapidly (if stars are an indicator) Stars over time Stars per day (same data, 60-day window) spack.io Follow along at spack-tutorial.readthedocs.io 13 LLNL-PRES-806064
Users on our documentation site have also been increasing spack.io Follow along at spack-tutorial.readthedocs.io 14 LLNL-PRES-806064
Spack is being used on many of the top HPC systems § Official deployment tool for the U.S. Exascale Computing Project § 7 of the top 10 supercomputers § High Energy Physics community Fermilab, CERN, collaborators — § Astra (Sandia) Fugaku coming to RIKEN in 2021 DOE/MEXT collaboration § Fugaku (Japanese National Supercomputer Project) Summit (ORNL), Sierra (LLNL) Edison, Cori, Perlmutter (NERSC) SuperMUC-NG (LRZ, Germany) spack.io Follow along at spack-tutorial.readthedocs.io 15 LLNL-PRES-806064
Contributions to Spack continue to grow! § In November 2015, LLNL provided most of the contributions to Spack § Since then, we’ve gone from 300 to over 3,500 packages § Most packages are from external contributors! § Many contributions in core, as well. § We are committed to sustaining Spack’s open source ecosystem! spack.io Follow along at spack-tutorial.readthedocs.io 16 LLNL-PRES-806064
Recommend
More recommend