Skip to content

Commit fbc1fc9

Browse files
committed
Update of most of the first part of the tutorial.
1 parent 7dc5b64 commit fbc1fc9

File tree

6 files changed

+334
-325
lines changed

6 files changed

+334
-325
lines changed

docs/2025-LUST/1_Intro/1_02_Lmod.md

Lines changed: 149 additions & 159 deletions
Large diffs are not rendered by default.

docs/2025-LUST/1_Intro/1_03_CPE.md

Lines changed: 109 additions & 93 deletions
Large diffs are not rendered by default.

docs/2025-LUST/1_Intro/1_04_LUMI_software_stack.md

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# LUMI software stacks (technical)
22

3+
[easybuild]: https://easybuild.io/
4+
35
*[[back: The Cray Programming Environment]](1_03_CPE.md)*
46

57
---
@@ -17,11 +19,11 @@ LUMI has different node types providing compute resources:
1719
- LUMI has 16 login nodes, though many of those are reserved for special purposes and not
1820
available to all users. These login nodes have a zen2 CPU. These nodes have a SlingShot 10
1921
interconnect.
20-
- There are 1536 regular CPU compute nodes in a partition denoted as LUMI-C. These
22+
- There are 2048 regular CPU compute nodes in a partition denoted as LUMI-C. These
2123
compute nodes have a zen3 CPU and run a reduced version of SUSE Linux optimised
2224
by Cray to reduce OS jitter. These nodes will in the future be equipped with a
2325
SlingShot 11 interconnect card.
24-
- There are 2560 GPU compute nodes in a partition denoted as LUMI-G. These nodes have
26+
- There are 2978 GPU compute nodes in a partition denoted as LUMI-G. These nodes have
2527
a single zen3-based CPU with optimised I/O die linked to 4 AMD MI250X GPUs. Each node
2628
has 4 SlingShot 11 interconnect cards, one attached to each GPU.
2729
- The interactive data analytics and visualisation partition is really two different partitions
@@ -32,9 +34,6 @@ LUMI has different node types providing compute resources:
3234
and are equipped with SlingShot 10 interconnect cards (2 each???)
3335
- 8 nodes have zen2 CPUs and 8 NVIDIA A40 GPUs each, and have 2 SlingShot 10
3436
interconnect cards each.
35-
- The early access platform (EAP) has 14 nodes equipped with a single 64-core
36-
zen2 CPU and 4 AMD MI100 GPUS. Each node has a single SlingShot 10 interconnect
37-
and also local SSDs.
3837

3938
SlingShot 10 and SlingShot 11 are different software-wise. SlingShot 10 uses a
4039
Mellanox CX5 NIC that support both OFI and UCX, and hence can also use the
@@ -49,7 +48,7 @@ libfabric and Cray MPICH.
4948

5049
## CrayEnv and LUMI modules
5150

52-
On LUMI, two types of software stacks are currently offered:
51+
On LUMI, three types of software stacks are currently offered:
5352

5453
- ``CrayEnv`` (module name) offers the Cray PE and enables one to use
5554
it completely in the way intended by HPE-Cray. The environment also offers a
@@ -89,14 +88,21 @@ On LUMI, two types of software stacks are currently offered:
8988
``LUMI`` module, users can always load a different version of the ``partition``
9089
module.
9190

91+
- `spack` offers some setups to install packages with Spack
92+
9293
Note that the ``partition`` modules are only used by the ``LUMI`` module. In the
9394
``CrayEnv`` environment, users should overwrite the configuration by loading their
9495
set of target modules after loading the ``CrayEnv`` module.
9596

97+
There are also local organisations that provide additional pre-installed software,
98+
often accessible by loading one of the `Local-*` modules. Currently there is software
99+
offered by CSC with module names that resemble those on their national systems puhti
100+
and mahti, and some software to access the quantum computers at VTT. Not all of that
101+
software is available to all LUMI users. There might be license and other restrictions.
96102

97103
---
98104

99-
## The ``partition`` module
105+
## The `partition` module
100106

101107
The ``LUMI`` module currently supports five partition modules, but that number may
102108
be reduced in the future:
@@ -107,22 +113,9 @@ be reduced in the future:
107113
| ``partition/C`` | ``craype-x86-milan`` | ``craype-accel-host`` |
108114
| ``partition/G`` | ``craype-x86-trento`` | ``craype-accel-amd-gfx90a`` |
109115
| ``partition/D`` | ``craype-x86-rome`` | ``craype-accel-nvidia80`` |
110-
| ``partition/EAP`` | ``craype-x86-rome`` | ``craype-accel-amd-gfx908`` |
111116

112117
All ``partition`` modules also load `craype-network-ofi``.
113118

114-
``pattition/D`` may be dropped in the future as it seems we have no working CUDA setup
115-
and can only use the GPU nodes in the LUMI-D partition for visualisation and not with CUDA.
116-
117-
Furthermore if it would turn out that there is no advantage in optimizing for Milan
118-
specifically, or that there are no problems at all in running Milan binaries on Rome
119-
generation CPUs, ``partition/L`` and ``partition/C`` might also be united in a single
120-
partition.
121-
122-
123-
124-
125-
126119

127120

128121
---

docs/2025-LUST/1_Intro/1_05_terminology.md

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ It is important to be familiar with these terms, so we'll briefly cover them one
1515
## Toolchains
1616

1717
A *compiler toolchain* (or just *toolchain* for short) is a **set of [compilers](https://en.wikipedia.org/wiki/Compiler)**,
18-
which are used to build software from source, together with a set of **additional libraries** that provide further core functionality.
18+
which are used to build software from source, together with a set of **additional libraries**
19+
with pretty standard APIs that provide further core functionality.
1920

2021
We refer to the different parts of a toolchain as **toolchain components**.
2122

@@ -52,7 +53,7 @@ The toolchain concept also maps nicely on the Programming Environment concept in
5253
Programming Environment. Each ``PrgEnv-*`` module in fact provides a full toolchain in a
5354
typical Cray PE installation, except for the FFTW library. Note that systems could configure
5455
the contents of a ``PrgEnv-*`` module differently as the MPI library and scientific library are
55-
optional. In the Cray PE, the MPI library is provided by the ``cray-mpic`` module,
56+
optional. In the Cray PE, the MPI library is provided by the ``cray-mpich`` module,
5657
the BLAS, LAPACK and ScaLAPACK libraries by the ``cray-libsci`` module (for CPU-only nodes)
5758
and the FFTW library through the ``cray-fftw`` module.
5859

@@ -66,11 +67,11 @@ organised in a hierarchy.
6667
The **`system` toolchain** is a special case which corresponds to using the compilers and libraries
6768
*provided by the operating system*, rather than using toolchain components that were installed using EasyBuild.
6869

69-
It used sparingly, mostly to install software where no actual compilation is done or
70+
It is used sparingly, mostly to install software where no actual compilation is done or
7071
to build a set of toolchain compilers and its dependencies, since the versions of the system compilers
7172
and libraries are beyond the control of EasyBuild, which could affect the reproducibility of the installation.
7273

73-
On LUMI however it is used a bit more and it takes some of the functions of the ``GCCcore`` toolchain in
74+
On LUMI however it is used a bit more and it takes some of the functions of the `GCCcore` toolchain in
7475
other EasyBuild toolchain hierarchies.
7576

7677

@@ -82,7 +83,7 @@ because they are widely adopted by the EasyBuild community.
8283
The `foss` toolchain consists of all open source components (hence the name:
8384
"FOSS" stands for Free & Open Source Software): [GCC](https://gcc.gnu.org/), [Open MPI](https://www.open-mpi.org/), [OpenBLAS](https://www.openblas.net/),
8485
[ScaLAPACK](https://www.netlib.org/scalapack/) and [FFTW](http://fftw.org/).
85-
In recent versions (since 2021a), [FlexiBLAS](https://www.mpi-magdeburg.mpg.de/projects/flexiblas)
86+
In more recent versions (since 2021a), [FlexiBLAS](https://www.mpi-magdeburg.mpg.de/projects/flexiblas)
8687
is used as the BLAS library, with OpenBLAS and LAPACK as the backend.
8788

8889
The `intel` toolchain consists of the
@@ -102,11 +103,13 @@ A[SYSTEM] --> B[GCCcore];
102103
B --> C[GCC];
103104
B --> D[iccifort];
104105
C --> E[gompi: Adds OpenMPI];
105-
D --> F[iimpi: Adds Intel MPI];
106-
D --> G[imkl: Adds Intel MKL];
107-
E --> H[foss: Adds OpenBLAS, LAPACK, ScaLAPACK, FFTW];
108-
F --> I[intel];
109-
G --> I;
106+
C --> F[gfbf: Adds FlexiBLAS, FFTW];
107+
D --> G[iimpi: Adds Intel MPI];
108+
D --> H[imkl: Adds Intel MKL];
109+
E --> I[foss: Adds ScaLAPACK];
110+
F --> I;
111+
G --> J[intel];
112+
H --> J;
110113
```
111114

112115
More information on these toolchains is available [in the EasyBuild documentation](https://docs.easybuild.io/en/latest/Common-toolchains.html).
@@ -116,7 +119,7 @@ More information on these toolchains is available [in the EasyBuild documentatio
116119

117120
## EasyBuild framework
118121

119-
EasyBuild is written in Python and organised in three layers, represented by the three blocks in the logo:
122+
EasyBuild is written in Python and organised in three layers, represented by the three lines in the logo:
120123
the EasyBuild framework, easyblocks and Easyconfig files.
121124

122125
The EasyBuild *framework* consists of a set of Python modules organised in packages (``easybuild.framework``,
@@ -169,20 +172,19 @@ EasyBuild.
169172

170173
Some easyconfig parameters are **mandatory**. The following parameters *must* be defined in *every* easyconfig file:
171174

172-
* ``name`` and ``version``, which specify the name and version of the software to install;
173-
* ``homepage`` and ``description``, which provide key metadata for the software;
174-
* ``toolchain``, which specifies the compiler toolchain to use to install the software (see
175-
``toolchains`` tab);
175+
* `name` and `version`, which specify the name and version of the software to install;
176+
* `homepage` and `description`, which provide key metadata for the software;
177+
* `toolchain`, which specifies the compiler toolchain to use to install the software;
176178

177179
Other easyconfig parameters are **optional**: they can be used to provide required information,
178180
or to control specific aspects of the installation procedure performed by the easyblock.
179181

180182
Some commonly used optional easyconfig parameters include:
181183

182-
* ``easyblock``, which specifies which (generic) easyblock should be used for the installation;
183-
* ``sources`` and ``source_urls``, which specify the list of source files and where to download them;
184-
* ``dependencies`` and ``builddependencies``, which specify the list of (build) dependencies;
185-
* ``configopts``, ``buildopts``, and ``installopts``, which specify options for the configuration/build/install commands, respectively;
184+
* `easyblock`, which specifies which (generic) easyblock should be used for the installation;
185+
* `sources` and `source_urls`, which specify the list of source files and where to download them;
186+
* `dependencies` and `builddependencies`, which specify the list of (build) dependencies;
187+
* `configopts`, `buildopts`, and `installopts`, which specify options for the configuration/build/install commands, respectively;
186188

187189
If no value is specified for an optional easyconfig parameter, the corresponding default value will be used.
188190

@@ -278,6 +280,9 @@ There are three main types of dependencies for computer software:
278280

279281
EasyBuild currently doesn't treat link-time dependencies differently from run-time dependencies
280282
and hence has no specific easyconfig parameter for them.
283+
(Even EasyBuild 5 doesn't even though that version defaults to "rpath"-linking so that no
284+
`LD_LIBRARY_PATH` is needed and hence modules that do not define other variables that are
285+
needed to run a package don't need to be loaded at runtime.)
281286

282287
---
283288

docs/2025-LUST/1_Intro/1_06_installation.md

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ for the remainder of this tutorial.
2626

2727
!!! summary
2828

29-
* *Requirements*: Linux, Python 2.7 or 3.5+, environment modules tool (Lmod is recommended).
29+
* *Requirements*: Linux, Python 3.6+, environment modules tool (Lmod is recommended).
3030
* *Installation methods*:
3131
* <a href=#method-1-using-pip>``pip install easybuild``</a>
3232
* <a href="#method-2-bootstrapping-easybuild">installing EasyBuild with EasyBuild</a>
@@ -50,15 +50,22 @@ like development or contributing back to the project.
5050

5151
### Python
5252

53-
EasyBuild is implemented in Python, and is **compatible with both Python 2.7 and Python 3.5+**
54-
(that is, Python 3.5 or a newer version of Python 3).
53+
EasyBuild is implemented in Python, and is **requires Python 3.6+**
54+
(that is, Python 3.6 or a newer version of Python 3), though Python 3.9 or more
55+
recent is highly recommended.
5556

5657
To check which Python version you have, use:
5758

5859
```shell
5960
python -V
6061
```
6162

63+
or, if that command is not available,
64+
65+
```shell
66+
python3 -V
67+
```
68+
6269
*No additional Python packages are required by EasyBuild*, the ones that come with the standard
6370
Python distribution are sufficient. Some additional Python packages *can* be leveraged for specific features.
6471
More on that later.
@@ -77,7 +84,7 @@ To check if you have a modules tool installed, use:
7784
module --version
7885
```
7986

80-
If this produces output that starts with something like "`Modules based on Lua: Version 8.3.1`" you have Lmod installed,
87+
If this produces output that starts with something like "`Modules based on Lua: Version 8.7.32`" you have Lmod installed,
8188
which is the default modules tool used by EasyBuild, and you are all set for installing and using EasyBuild.
8289
Any sufficiently recent Lmod version (8.x or even 7.x) should be fine.
8390

@@ -99,9 +106,9 @@ we use Lmod as the default module system for users, and EasyBuild is configured
99106
## EasyBuild as a Python package
100107

101108
EasyBuild consists of a number of interdependent Python packages,
102-
and is available via both GitHub at <a href="https://github.com/easybuilders">https://github.com/easybuilders</a>,
109+
and is available via both GitHub at <a href="github.com/easybuilders">https://github.com/easybuilders</a>,
103110
as well as via the standard Python Package Index (PyPI) at
104-
<a href="https://pypi.org/project/easybuild/">https://pypi.org/project/easybuild</a>.
111+
<a href="pypi.org/project/easybuild/">https://pypi.org/project/easybuild</a>.
105112

106113
As you may be aware the Python packaging ecosystem is bit convoluted,
107114
which is reflected in the many different ways in which you can install a Python package.
@@ -119,17 +126,20 @@ via the standard *Python Package Index* (PyPI), through one of the standard Pyth
119126
And since EasyBuild is a software installation tool in its own right, we actually have a couple
120127
of additional tricks up our sleeve!
121128

122-
### Python 2 or Python 3?
129+
### Which version of Python?
123130

124-
For EasyBuild it does not matter much whether you install it on top of Python 2 or Python 3.
125-
Since version 4.5, Python 3 does offer some optional features (requiring additional packages)
126-
that are not available with Python 2.
127-
Since <a href="https://www.python.org/doc/sunset-python-2/">Python 2 is end-of-life</a>,
128-
we strongly recommend using Python 3 if you have the choice.
131+
Recent versions of EasyBuild no longer support Python 2.7 and require version 3.6 or
132+
newer. Some functionality only works on Python 3.9 or more recent.
129133

130134
By default EasyBuild will use the `python` command to run,
131135
but you <a href="#eb_python">can control this if needed via ``$EB_PYTHON``</a>.
132136

137+
!!! Note "On LUMI"
138+
On LUMI, we modify the scripts that run EasyBuild and hard-code the
139+
Python executable and Python path in the script. This avoids accidentally using
140+
the wrong Python executable or interference with other Python software that may
141+
be loaded.
142+
133143

134144
## Installing EasyBuild
135145

@@ -307,14 +317,6 @@ you can consider installing EasyBuild with EasyBuild. This can be done in 3 step
307317
* Step 2: Using EasyBuild to install EasyBuild as a module
308318
* Step 3: Loading the EasyBuild module
309319

310-
!!! note
311-
A [bootstrap script](https://docs.easybuild.io/en/latest/Installation.html#bootstrapping-easybuild)
312-
is available that automates this procedure,
313-
but is known to be problematic in some contexts, and is not being actively
314-
maintained anymore.
315-
316-
As a result, we do not recommend using the bootstrap script anymore.
317-
318320

319321
#### Step 1: Installing EasyBuild into a temporary location
320322

@@ -412,7 +414,7 @@ export EB_PYTHON=python3
412414
### Approach on LUMI
413415

414416
*Documentation on the inner workings of the LUMI software stack can be found in the
415-
[LUMI-SoftwareStack GitHub, docs subdirectory](https://github.com/Lumi-supercomputer/LUMI-SoftwareStack/tree/main/docs).*
417+
[LUMI-SoftwareStack texts on the lumi-supercomputer.github.io](https://lumi-supercomputer.github.io/LUMI-SoftwareStack/).*
416418

417419
To keep the different versions of the LUMI software stack as independent from one another as possible,
418420
EasyBuild is bootstrapped for each software stack by the ``prepare_LUMI_stack.sh`` script. We use the
@@ -425,7 +427,7 @@ are each untarred and then installed into their location by running
425427
We do so only for the framework and easyblocks files as the easconfig files are not used to
426428
install EasyBuild. Instead we create our own EasyConfig file for EasyBuild which contains
427429
some additional packages that enable extra features in EasyBuild and also provide more information
428-
to Lmod. Next the configuration module for EasyBuild (see the next section,
430+
to Lmod. Next we load the LUMI-specific configuration module for EasyBuild (see the next section,
429431
["Configuring EasyBuild"](../1_07_configuration), for more information) and use the temporary
430432
installation of EasyBuild with our own EasyConfig file to do a proper installation of EasyBuild
431433
with module in the final location.

docs/2025-LUST/1_Intro/1_07_configuration.md

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ and to configure EasyBuild according to your preferences and the system on which
2828

2929
There are two more admin-only configuration modules for EasyBuild. The main one is
3030
``EasyBuild-production`` which is used for software installations in the central software stack.
31-
The other one is ``EasyBuild-infrastructure`` which is used to install infrastructure modules
32-
that need to be installed in a pure Lmod hierarchy, e.g., the modules that load the toolchains.
31+
The other one is ``EasyBuild-infrastructure`` which can be used to install infrastructure modules
32+
that need to be installed in a pure Lmod hierarchy, e.g., the modules that do the EasyBuild
33+
configuration (though these are currently not installed through EasyBuild) and the compiler
34+
toolchain modules.
3335

3436

3537
---
@@ -42,7 +44,7 @@ in a large amount of available configuration settings.
4244

4345
The full list of configuration settings can be consulted via `eb --help`,
4446
which shows the corresponding command line option accompanied by a short description.
45-
At the time of writing, *over 240 different configuration settings* are supported by EasyBuild.
47+
At the time of writing, *over 270 different configuration settings* are supported by EasyBuild.
4648

4749
For the sake of this tutorial we will focus on a specific subset of configuration settings,
4850
and cover only the most prominent and important ones.
@@ -105,7 +107,7 @@ and the default `software` and `modules/all` names for the subdirectories are us
105107
This makes it slightly easier to organise the module tree with user-friendly labeling, but above
106108
all also makes the synchronisation process of the 4 instances of the software directory more robust
107109
as it is now easy to synchronise all modules in the last step, which is a much quicker process than
108-
syncrhonising the software installations.
110+
synchronising the software installations.
109111

110112
We also use short paths for software installations (to avoid overrunning the maximum length of a
111113
shebang line in scripts) while we use longer, more descriptive names for subdirectories in the
@@ -139,8 +141,9 @@ or specific mount options like `noexec`).
139141

140142
The configuration modules on LUMI will use a RAM disk for the build path. On the login nodes,
141143
``$XDG_RUNTIME_DIR`` is used as that space is automatically cleared when the last session of a user
142-
ends. However, on the compute nodes a job- or user-specific subdirectory of ``/dev/shm`` is currently used
143-
as ``$XDG_RUNTIME_DIR`` does not exist.
144+
ends. However, on the compute nodes a job- or user-specific subdirectory of ``/tmp`` is currently used
145+
as ``$XDG_RUNTIME_DIR`` does not exist. The user can also overwrite the build directory by
146+
setting `EBU_WORKDIR` before loading the EasyBuild configuration module (e.g., `EasyBuild-user`).
144147

145148

146149
---
@@ -562,7 +565,7 @@ Leave other configuration settings set to their default value.
562565
Try running the following command:
563566

564567
```shell
565-
eb bzip2-1.0.6.eb
568+
eb bzip2-1.0.8.eb
566569
```
567570

568571
Where do you expect to find the installation?
@@ -584,23 +587,23 @@ Where do you expect to find the installation?
584587
$ ls $HOME/easybuild/software
585588
bzip2
586589
$ ls $HOME/easybuild/software/bzip2
587-
1.0.6
588-
$ ls $HOME/easybuild/software/bzip2/1.0.6
590+
1.0.8
591+
$ ls $HOME/easybuild/software/bzip2/1.0.8
589592
bin easybuild include lib man
590593
```
591594

592595
```shell
593596
$ ls $HOME/easybuild/modules/all
594597
bzip2
595598
$ ls $HOME/easybuild/modules/all/bzip2
596-
1.0.6.lua
599+
1.0.8.lua
597600
```
598601

599-
The source file for bzip2 1.0.6 was downloaded to `$HOME/easybuild/sources`:
602+
The source file for bzip2 1.0.8 was downloaded to `$HOME/easybuild/sources`:
600603

601604
```shell
602605
$ ls $HOME/easybuild/sources/b/bzip2
603-
bzip2-1.0.6.tar.gz
606+
bzip2-1.0.8.tar.gz
604607
```
605608

606609
We will discuss this in more detail in the next part of the tutorial.

0 commit comments

Comments
 (0)