Software Compatibility¶
e4s-cl wraps itself around a MPI command and inserts a container launch before the command is run. This implies an understanding of both the process launcher and the container technology to use. This section details the software e4s-cl was developped for and tested with.
MPI implementations¶
e4s-cl is able to launch executables compiled with a different version than the one available on the system at runtime.
MPI families¶
With the introduction of the MPICH ABI initiative and the MPI implementations that followed it, we see the emergence of multiple ‘families’ of MPI implementations. Members within a family can usually swap their libraries at runtime, while this is impossible accross families.
If you are unsure about the implementation used to compile a binary, a simple check is to run ldd
on the executable and looking at the MPI library listed as a dependency. The below table lists the usual libray name in the soname
column.
MPI implementation |
MPICH ABI compatible |
Family |
|
OpenMPI |
No |
|
|
MPICH |
Yes |
|
|
CRAY MPICH |
Yes |
|
|
MVAPICH |
Yes |
|
|
Intel MPI |
Yes* |
|
|
Enabling translation¶
e4s-cl is able to detect the MPI implementation used on the host from the input parameters; however the implementation used in the container cannot be ascertained easily. MPI translation is thus not needed when running executables with an implementation from the same family as the host’s; when this is not the case, one can enable it from the command line using the --from
flag:
# Enable translation from an OpenMPI binary to a MPICH-based profile
e4s-cl --from openmpi srun -n 4 [...] path/to/executable
This will install and leverage WI4MPI
(git repos here), which is a wrapper interface that performs translations from one MPI implementation to another. This allows e4s-cl
to function even when substituting two MPI libraries that are ABI-incompatible.
Container backends¶
During a launch
command, a list of required files will be computed on each target node, and bound to a container spawned on those nodes. Container backends are the container technologies e4s-cl is able to use.
apptainer
, podman
, shifter
and singularity
are supported. The docker
backend can be enabled by installing e4s-cl with the docker
extra feature.
Most of the container backends have some degree of configuration available to them.
Configuration is done by setting the corresponding values in the backends
section of the configuration file, or by passing a given environment variable.
An option passed in the environment will override the same option set in the configuration file.
apptainer
¶
apptainer
support is achieved using its command line interface. apptainer
has to be installed on the system and available for it to be used by e4s-cl.
The configuration file section for apptainer
is backends/apptainer
.
The available options are:
Configuration variable |
Environment variable |
Type |
Default |
Description |
---|---|---|---|---|
|
|
String |
|
Path to the |
|
|
List |
|
Options to pass to the spawned |
|
|
List |
|
Options to pass to the |
docker
¶
docker
support
docker
support in HPC is limited at best. Due to its architecture, it will most likely not work with your MPI implementation. To enable docker
support from e4s-cl, install with the docker
extra enabled.
docker
support is achieved using the docker-py
module. The docker
daemon has to be installed and running on the system to be accessed.
There are no configuration options for the docker
backend.
Warning
Using docker with MPI
Several MPI implementations expect their processes to inherit opened file descriptors; because of docker’s client-daemon architecture, this is not possible. To use docker images with MPI, it is encouraged to used podman.
podman
¶
podman
support is achieved using its command line interface. podman
has to be installed on the system and available for it to be used by e4s-cl.
The configuration file section for podman
is backends/podman
.
The available options are:
Configuration variable |
Environment variable |
Type |
Default |
Description |
---|---|---|---|---|
|
|
String |
|
Path to the |
|
|
List |
|
Options to pass to the spawned |
|
|
List |
|
Options to pass to the |
shifter
¶
The shifter
container technology is an interesting case, as it offers much of what e4s-cl is trying to propose, but in a much more restrictive way.
Warning
shifter
MPI modules
Some MPI libraries will be configured as modules for shifter
and imported automatically. You might not need e4s-cl ! Check the configuration file in /etc/shifter/udiRoot.conf
to see if the MPI library you are trying to use is imported.
Warning
Binding files with shifter
shifter
is the only container backend that does not support binding files to the container.
shifter
also forbids binding directories to certain locations, like /etc
.
This is circumvented by e4s-cl by copying all required libraries in a temporary directory, then binding it to the container. Files are ignored.
The configuration file section for shifter
is backends/shifter
.
Configuration variable |
Environment variable |
Type |
Default |
Description |
---|---|---|---|---|
|
|
String |
|
Path to the |
|
|
List |
|
Options to pass to the spawned |
singularity
¶
singularity
support is achieved using its command line interface. singularity
has to be installed on the system and available for it to be used by e4s-cl.
The configuration file section for singularity
is backends/singularity
.
The available options are:
Configuration variable |
Environment variable |
Type |
Default |
Description |
---|---|---|---|---|
|
|
String |
|
Path to the |
|
|
List |
|
Options to pass to the spawned |
|
|
List |
|
Options to pass to the |
barebones
¶
barebones
support is achieved by bypassing the use of a container technology.
The configuration file section for barebones
is backends/barebones
.
The available options are:
Configuration variable |
Environment variable |
Type |
Default |
Description |
---|---|---|---|---|
|
|
List |
|
Options to pass to the spawned process. |
|
|
List |
|
Options to pass to the script of the spawned process. |
Other container backends¶
More container technologies can be supported. Create an issue on github or write a dedicated module in e4s_cl/cf/containers
. Refer to e4s_cl/cf/containers/__init__.py
for details.
Process launchers¶
The following process managers were successfully tested with e4s-cl:
The stock
mpirun
of multiple MPI distributions;LLNL’s SLURM using
srun
;CRAY’s ALPS using
aprun
;IBM’s JSM using
jsrun
.
Support implies the automatic detection of parameters. If a launcher is not
supported, use the ‘--
’ syntax to separate launcher and process arguments.
Additional options can be configured through the configuration file or the environment:
Configuration variable |
Environment variable |
Type |
Default |
Description |
---|---|---|---|---|
|
|
List |
|
List of options to pass to the launcher |