Installation
GPI-Space targets x86-64 Linux systems. Other architectures are not supported at this point. It is built and tested daily on
- Centos 7
- Oracle Linux 8
- Ubuntu 18.04 LTS
- Ubuntu 20.04 LTS
The virtual memory layer can be backed with either Ethernet, Infiniband or BeeOND.
GPI-Space is usually installed on cluster systems where a shared filesystem is available on all nodes. It is suggested to use a previously empty directory on such a shared filesystem for the GPI-Space installation and all manually installed dependencies.
The source and build directories are not required to be shared and for best performance it is recommended to place them in a fast (local) file system.
Spack Package
The recommended way of installing GPI-Space is with the Spack
package
manager:
The most recent version of GPI-Space can be installed using the following command:
spack install gpi-space
NOTE:
There might be a time delay between a GPI-Space release and its availability in the Spack package.
Manual Installation
Alternatively, GPI-Space can also be installed manually. GPI-Space requires some third-party dependencies. Most of the following are provided out of the box as (-devel/-dev) packages or other binary distributions on most supported operating systems.
Boost
and GPI-2
require a manual installation on all systems.
libssh2
is also required to be built manually on some systems, due
to build version compatibility issues with other dependencies.
Note that some GPI-Space components can be disabled, which may remove some dependencies needed. Also see the “Building GPI-Space” section and subsection “Optional Components” below.
- GCC (>= 5.5.0), or compatible compiler
- CMake (>= 3.15)
- Some distributions name the binary
cmake3
while others usecmake
. Snippets below assumecmake
.
- Some distributions name the binary
- pkg-config (>= 0.23)
, or an equivalent pkgconf. Both offer the
pkg-config
program. - OpenSSL (>= 0.9)
- When using OpenSSL >= 1.1, Boost >= 1.62 and libssh2 (>= 1.8) are required for compatibility.
- hwloc (>= 1.10)
- Qt5 (>= 5.9)
- Only required if GPI-Space is built with
-DGSPC_WITH_MONITOR_APP=ON
.
- Only required if GPI-Space is built with
- chrpath (>= 0.13)
- Boost (>= 1.61, <= 1.63)
- When using OpenSSL >= 1.1, Boost >= 1.62 is required.
- libssh2 (>= 1.7, built with OpenSSL backend)
- When SSH keys are generated with OpenSSH >= 7.8, only libssh2 >= 1.9 is compatible.
- Among others, Ubuntu 20.04 ships with libgcrypt as backend as well as OpenSSH 8.2, thus needs a custom installation of libssh2.
- GPI-2 (>= 1.5.0)
- Only required if GPI-Space is built with
-D GSPC_WITH_IML=ON
.
- Only required if GPI-Space is built with
WARNING:
It is important to keep the versions of all dependencies used in GPI-Space as well as the applications using GPI-Space synchronized to avoid hard to debug conflicts at run-time. Using a single environment to build the entire stack is strongly encouraged.
Boost
WARNING:
Boost 1.61 is not compatible with OpenSSL >= 1.1.
Boost needs to be installed to a directory containing only the Boost installation, hence GPI-Space requires to build Boost from source.
Due to the size of Boost, extracting the sources and building might take some time. A local non-shared filesystem is strongly suggested to be used for building Boost.
As this Boost installation is also used by GPI-Space applications, additional requirements like specifying a Python installation to use may be required.
export BOOST_ROOT=<boost-install-prefix>
boost_version=1.63.0
wget "https://downloads.sourceforge.net/project/boost/boost/${boost_version}/boost_${boost_version//./_}.tar.gz" \
-O boost_${boost_version//./_}.tar.gz
tar xf "boost_${boost_version//./_}.tar.gz"
cd "boost_${boost_version//./_}"
./bootstrap.sh --prefix="${BOOST_ROOT}"
./b2 \
cflags="-fPIC -fno-gnu-unique" \
cxxflags="-fPIC -fno-gnu-unique" \
link=static \
variant=release \
install \
-j $(nproc)
GPI-2
GPI-2 supports both Infiniband and Ethernet, but the decision has to
be made at compilation time. If the system used does not support
Infiniband, with_ethernet=--with-ethernet
needs to be specified
below or installing GPI-2 will fail.
GPI2_ROOT=<gpi2-install-prefix>
#with_ethernet=--with-ethernet ## remove '#' if no Infiniband
gpi2_version=1.3.3
export PKG_CONFIG_PATH="${GPI2_ROOT}/lib64/pkgconfig"${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}
wget "https://github.com/cc-hpc-itwm/GPI-2/archive/v${gpi2_version}.tar.gz" \
-O "GPI-2-${gpi2_version}.tar.gz"
tar xf "GPI-2-${gpi2_version}.tar.gz"
cd "GPI-2-${gpi2_version}"
grep "^CC\s*=\s*gcc$" . -lR | xargs sed -i'' -e '/^CC\s*=\s*gcc$/d'
./install.sh -p "${GPI2_ROOT}" \
--with-fortran=false \
${with_ethernet:-}
libssh2
WARNING:
- libssh2 1.7 is not compatible with OpenSSL >= 1.1.
- libssh2 <= 1.8 is incompatible with the new default SSH-key format in OpenSSH >= 7.8.
libssh2
can be built with various backends, but GPI-Space requires
OpenSSL
to be used, which is not the default on various
distributions. In some distributions the OpenSSH
default settings
are incompatible with the libssh2
package. It is thus highly
recommended to build libssh2
version 1.9 from scratch.
libssh2
requires the dependencies OpenSSL
and zlib
(which are
assumed to be installed via the system package manager below).
Libssh2_ROOT=<libssh2-install-prefix>
libssh2_version=1.9.0
export PKG_CONFIG_PATH="${Libssh2_ROOT}/lib/pkgconfig:${Libssh2_ROOT}/lib64/pkgconfig"${PKG_CONFIG_PATH:+:${PKG_CONFIG_PATH}}
wget "https://github.com/libssh2/libssh2/releases/download/libssh2-${libssh2_version}/libssh2-${libssh2_version}.tar.gz" \
-O "libssh2-${libssh2_version}.tar.gz"
tar xf "libssh2-${libssh2_version}.tar.gz"
mkdir "libssh2-${libssh2_version}/build"
cd "libssh2-${libssh2_version}/build"
cmake -D CRYPTO_BACKEND=OpenSSL \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX="${Libssh2_ROOT}" \
-D ENABLE_ZLIB_COMPRESSION=ON \
-D BUILD_SHARED_LIBS=ON \
-D BUILD_TESTING=OFF \
..
cmake --build . --target install -- -j$(nproc)
Building GPI-Space
GPI-Space can be built as described below. The dependencies are found via various environment variables in addition to being searched in system directories. Some dependencies may have multiple ways to be found. The dependency-install snippets above already set the corresponding variables. It may be required to set additional environment or CMake variables if packages are not installed system-wide.
- Boost:
BOOST_ROOT
. Newer versions use CMake’s new config format and will be automatically preferred if existing. Using config format installations can be disabled with the CMake option-DBoost_NO_BOOST_CMAKE=on
. - GPI-2:
PKG_CONFIG_PATH
- libssh2:
PKG_CONFIG_PATH
. Note that libssh2 also installs a CMake new-config-format file, but GPI-Space currently does not support it. - OpenSSL:
OPENSSL_ROOT_DIR
- hwloc:
PKG_CONFIG_PATH
- Qt5:
PATH
(theqmake
/qmake-qt5
binary),Qt5_ROOT
,Qt5_DIR
orCMAKE_PREFIX_PATH
- chrpath:
PATH
By default, GPI-Space does not build unit- and system tests. To enable
them, the options -DBUILD_TESTING=ON
and
-DSHARED_DIRECTORY_FOR_TESTS=<shared-directory>
need to be
given to CMake by setting build_tests
in the snippet
below. SHARED_DIRECTORY_FOR_TESTS
shall point to an existing but
empty directory on a shared filesystem. The tests can then be run with
GSPC_NODEFILE_FOR_TESTS=<path to nodefile> ctest
within the build
directory.
export GPISpace_ROOT=<gpispace-install-prefix>
# to build tests, remove leading # and choose a shared directory to be
# used to store temporary data.
#build_tests="-DBUILD_TESTING=on -DSHARED_DIRECTORY_FOR_TESTS=<shared-directory>"
gpispace_version=main
# While CMake finds GPI-Space via GPISpace_ROOT, many applications
# and tools still use this variable for legacy reasons.
export GSPC_HOME="${GPISpace_ROOT}"
wget "https://github.com/cc-hpc-itwm/gpispace/archive/${gpispace_version}.tar.gz" \
-O "gpispace-${gpispace_version}.tar.gz"
tar xf "gpispace-${gpispace_version}.tar.gz"
cmake -D CMAKE_INSTALL_PREFIX="${GPISpace_ROOT}" \
-B "gpispace-${gpispace_version}/build" \
-S "gpispace-${gpispace_version}" \
${build_tests:-}
cmake --build "gpispace-${gpispace_version}/build" \
--target install \
-j $(nproc)
After installing, the installation can be verified by running a simple self-test example as follows:
NOTE:
GPI-Space requires a working SSH environment with a password-less SSH-key when using the SSH RIF strategy, the default for most applications.
By default,
${HOME}/.ssh/id_rsa
is used for authentication. If no such key exists,ssh-keygen -t rsa -b 4096 -N '' -f "${HOME}/.ssh/id_rsa" ssh-copy-id -f -i "${HOME}/.ssh/id_rsa" "${HOSTNAME}"
can be used to create and register one.
# to test with multiple nodes, set GSPC_NODEFILE_FOR_TESTS
# Slurm: export GSPC_NODEFILE_FOR_TESTS="$(generate_pbs_nodefile)"
# PBS/Torque: export GSPC_NODEFILE_FOR_TESTS="${PBS_NODEFILE}"
# and SWH_INSTALL_DIR:
# export SWH_INSTALL_DIR=<a-shared-directory-visible-on-all-nodes>
# for GPI-Space installations using Spack
spack load gpi-space
$(spack location -i gpi-space)/share/GPISpace/doc/example/stochastic_with_heureka/selftest
# for manual GPI-Space installations:
# <gpispace-install-prefix>/share/GPISpace/doc/example/stochastic_with_heureka/selftest
If GPI-Space has been built with testing enabled, then ctest
can be
used to execute the unit- and system tests:
# it is always required to set GSPC_NODEFILE_FOR_TESTS for ctest:
# Slurm: export GSPC_NODEFILE_FOR_TESTS="$(generate_pbs_nodefile)"
# PBS/Torque: export GSPC_NODEFILE_FOR_TESTS="${PBS_NODEFILE}"
# single-host: export GSPC_NODEFILE_FOR_TESTS=/etc/hostname
# or hostname > nodefile; export ...="${PWD}/nodefile"
export GSPC_NODEFILE_FOR_TESTS=<path-to-a-nodefile>
cd "gpispace-${gpispace_version}/build"
ctest --output-on-failure \
-j $(nproc)
Optional Components
GPI-Space supports disabling some components at configuration time to reduce the dependencies needed as well as build time.
GSPC Monitor
The gspc-monitor
(also known as “gantt”) application for execution monitoring
requires Qt5. The following options can be used to enable or disable this
feature (enabled by default):
Spack | CMake |
---|---|
[+|~]monitor |
-D GSPC_WITH_MONITOR_APP=[ON|OFF] |
IML
The Independent Memory Layer (IML
) is an abstraction layer for easy distributed memory management, allowing applications to cache data, or to prepare and extract data independent of GPI-Space across runs.
The following options can be used to enable or disable this feature (enabled by default):
Spack | CMake |
---|---|
[+|~]iml |
-D GSPC_WITH_IML=[ON|OFF] |
Next steps
After a successful GPI-Space installation, the next step is to make use of it and create the first application. For that, a step-by-step guide on how to get started and create a first application is available here.