FOSDEM 2018 HPC, Big Data & Data Science devroom Feb 4th 2018, Brussels (Belgium) Installing software for scientists on a multi-user HPC system A comparison between: Nix Kenneth Hoste kenneth.hoste@ugent.be GitHub: @boegel Twitter: @kehoste
Installing software for scientists on a multi-user HPC system • getting scientific software installed can be challenging • lack of documentation & good software engineering practices • non-standard installation procedures • dependency hell " If we would know what we are doing, • ... it wouldn't be called 'research'. " • scientists mostly care about the science • they're often not software engineers or system administrators • the software they need should be (made) easily accessible 2
Installing software for scientists on a multi-user HPC system • a supercomputer is very di ff erent from your laptop... • both in good (performance, parallellism) and 'bad' ways (ease of use) • often broad spectrum of users, with varying requirements • typically central installation of (scientific) software • multiple software versions (& variants) side-by-side • software installations remain available 'indefinitely' • performance is key • get the most out of the available hardware (processor architecture, ...) • maximise amount of "science" that can be done • 10% performance di ff erence can be a big deal... 3
Disclaimer & acknowledgements • my intention is to make this an objective comparison • not easy as lead developer/release manager of • I spent hours of hands-on with each of the tools to familiarise myself • there is definitely still some personal bias here and there... • thanks to many people for their feedback: • Todd Gamblin • Bruno Bzeznik • Ludovic Courtès • Ward Poelmans • Ricardo Wurmus • Jillian Rowe • Valentin Reis • + anyone else who answered any of my questions... 4
30-second introductions Nix 5
• focus: • OS: Linux, macOS, Windows - binary packages • impl. in Python (2.7 or >= 3.3) - quick & easy software installation • target audience: https://conda.io end users, scientists - cross-platform package, dependency and environment management "for any language" (originally created for Python, but now also supports C, C++, FORTRAN, R, ...) • tool for installing binary packages and setting up 'environments' • included in Anaconda: optimised Python/R distribution (batteries incl.) • packages are available via Anaconda cloud and many other ' channels ' • package recipes are written in YAML syntax + a script (.sh or .bat) • building of packages is done via " conda build " • GitHub organisation for hosting recipes: https://conda-forge.org • supported software: > 3,500 6
• focus: • OS: Linux, Cray, (macOS) - building from source • impl. in Python (2.6 or 2.7) - easy installation of software • target audience: - good performance HPC user support teams http://easybuilders.github.io/easybuild framework for building & installing (scientific) software on HPC systems • build procedures are implemented in easyblocks (Python modules), which leverage the functionality of the EasyBuild framework • separate easyconfig files specify (in Python syntax) what to install, and using which toolchain (compiler + MPI/BLAS/LAPACK/FFT libraries) • aims for good performance by default: compiler options, libraries, ... • generates environment module files (easy interface for end users) • various features to allow site-specific customisations • support for using own easyconfig files (recipes), 'plugins', hooks, ... • supported software: > 2,000 (> 1,300 + > 700 'extensions') 7
• focus: • OS: Linux, macOS, Unix Nix - binary installations • implemented in C++ - isolated build environment • target audience: - portability system administrators, https://nixos.org/nix (experienced) end users, ... the purely functional package manager • package (and configuration) manager for NixOS, but can also be used stand-alone on other Unix systems • strong focus on (bitwise) reproducibility through build isolation, etc. • supports atomic package upgrades & rollbacks • downloads and installs binary packages (or builds from source if not available) • multi-user support via profiles with nix-env • package recipes are implemented in custom Nix DSL • supported software: > 13,000 (+ 12,000 Haskell packages) 8
• focus: • OS: GNU/Linux • binary installations • implemented in Scheme, C++ • isolated build environment • target audience: • free software & GNU philosophy system administrators, https://www.gnu.org/software/guix (experienced) end users, ... the GNU package manager • package manager for GuixSD, the Guix System Distribution (+ GNU Hurd), but can also be used on other GNU/Linux distributions • design is quite similar to Nix, but di ff erent implementation • package definitions in GNU Guile (Scheme) rather than custom Nix DSL • Guix can leverage the Nix build daemon if available • also strong focus on (bitwise) reproducibility of installations • only supports free software, no proprietary software • transactional upgrades & rollbacks, per-user profiles, etc. • supported software: > 6,500 9
• focus: • OS: Linux, macOS, Cray • building from source • impl. in Python (>=2.6 or >=3.3) • flexibility • target audience: • cross-platform (scientific) software developers https://spack.io Spack is a flexible package manager for supercomputers, Linux, and macOS • supports multiple (software) versions, configurations, compilers, ... • quite similar to EasyBuild in some ways, but has a di ff erent design & focus • packages are (also) Python modules, but no separate 'recipe' files (cfr. easyconfigs) • in-memory DAG resolution, dependency resolution, database of installed packages • support for exposing installations through environment modules (or dotkit) • powerful CLI to specify partial DAG w.r.t. dependencies, compiler, etc. spack install mpileaks@1.1.2 %gcc@4.7.3 +debug ^libelf@0.8.12 • supported software: > 2,300 10
Project comparison Nix Linux, macOS, Linux, macOS, Linux, macOS, platforms Linux, Cray GNU/Linux Windows Unix Cray Python 2/3, C++, implementation Python 2 Scheme, Guile Python 2/3 YAML Nix (DSL) supp. software > 3,500 > 2,000 < 6,500 > 13,000 > 2,300 releases, this comparison table will be completed install & update in the remainder of this talk with stars documentation excellent configuration very good usage good ok time to result average performance bad reproducibility 11
Releases, installing & updating sudo required? • • installation: no 195 releases since September 2012 • usage: no • install via shell install script (via Miniconda or Anaconda ) • self-update using " conda update conda " • dependencies: none (even Python is included in installation!) 32 16 77 v2.0.0 66 (latest) v4.4.4 v1.0.0 v3.0.0 v4.0.0 2012 2013 2014 2015 2016 2017 2018 12
Releases, installing & updating sudo required? • 58 releases since April 2012 • installation: no • usage: no! • stable (v1.0) since November 2012 • 3 years of in-house development prior to first public release • installation via custom bootstrap script, or standard Python tools ( pip , ...) • self-update using " eb --install-latest-eb-release " • dependencies: environment modules, Python 2.x, setuptools, C++ compiler, ... 3 26 12 12 v0.5 v1.0.0 v2.0.0 v3.0.0 v3.5.1 2012 2013 2014 2015 2016 2017 2018 13
Releases, installing & updating Nix • 49 releases since April 2004 sudo required? • installation: yes • • usage: no stable (v1.0) since May 2012 • custom install script to install binary release (or from build source) • build daemon ( nix-daemon ) required (as root ) for multi-user support • self-update via nix-channel --update && nix-env --install nix • dependencies: none (unless you build Nix from source) 14 15 16 v1.0 v1.11 v1.11.16 v0.5 2004 2005 2012 2013 2014 2015 2016 2017 2018 14
Releases, installing & updating • 17 releases since January 2013 sudo required? • installation: yes • still in beta (no v1.0 yet) • usage: no • install by unpacking binary distribution, or build from source • no installation script available, manual installation process... • build daemon ( guix-daemon ) required (as root ) • self-update using " guix pull " • dependencies: Guile, libgcrypt, make, .. 15 v0.1 v0.14 2012 2013 2014 2015 2016 2017 2018 15
Releases, installing & updating • 12 releases since July 2014 sudo required? • installation: no • usage: no • still in beta (no v1.0 yet) • install by unpacking source tarball or using " git clone " (recommended) + setting up environment (update $PATH or source a script) • update Spack using " git pull " • dependencies: C/C++ compiler, git, curl, ... 8 v0.11.1 v0.8 v0.10 v0.11.0 2012 2013 2014 2015 2016 2017 2018 16
Documentation All 5 projects have good to excellent documentation! (but there's always room for improvement...) conda.io easybuild.readthedocs.io www.gnu.org/software/guix/manual/guix.html nixos.org/nix/manual Nix spack.readthedocs.io 17
Recommend
More recommend