Skip to content

Commit 47290c5

Browse files
committed
Make EESSI-extend support accelerator installations
1 parent fa16001 commit 47290c5

File tree

5 files changed

+74
-17
lines changed

5 files changed

+74
-17
lines changed

.github/workflows/scripts/verify_eessi_environment.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ def check_env_endswith(var1, var2):
4545
check_env_equals("EESSI_ACCELERATOR_TARGET_OVERRIDE", "EESSI_ACCEL_SUBDIR")
4646
# special case is where EESSI_ACCELERATOR_TARGET_OVERRIDE may not match the final
4747
# accelerator architecture chosen.
48-
# In CI we set FINAL_ACCELERATOR_PATH_EXPECTED to allow us to compare against an expected value.
49-
check_env_equals("EESSI_ACCELERATOR_TARGET", "FINAL_ACCELERATOR_PATH_EXPECTED")
48+
# In CI we set FINAL_ACCELERATOR_TARGET_EXPECTED to allow us to compare against an expected value.
49+
check_env_equals("EESSI_ACCELERATOR_TARGET", "FINAL_ACCELERATOR_TARGET_EXPECTED")
5050
# verify the software paths that should exist
5151
check_env_endswith("EESSI_SOFTWARE_PATH", "EESSI_SOFTWARE_SUBDIR")
5252
check_env_endswith("EESSI_SITE_SOFTWARE_PATH", "EESSI_SOFTWARE_SUBDIR")

.github/workflows/tests_eessi_extend_module.yml

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,9 @@ jobs:
7272
module use "$MY_INSTALLATION_PATH"/modules/all
7373
check_disallowed_env_prefix EASYBUILD_
7474
75+
# Set an environment variable to use when we want to target accelerators
76+
export STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE="accel/nvidia/cc80"
77+
7578
# Configure for CVMFS install
7679
export EESSI_CVMFS_INSTALL=1
7780
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
@@ -87,7 +90,16 @@ jobs:
8790
check_env_var "EASYBUILD_UMASK" "022"
8891
# unload and check the environment is clean again
8992
module unload EESSI-extend
93+
# check an accerator installation
94+
export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE
95+
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
96+
check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SOFTWARE_PATH" # installation path should be the same unless we ask for an explicit GPU installation
97+
EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
98+
check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # installation path should be the same unless we ask for an explicit GPU installation
99+
# unload and make sure the environment is clean again
100+
module unload EESSI-extend
90101
check_disallowed_env_prefix EASYBUILD_
102+
unset EESSI_ACCELERATOR_TARGET_OVERRIDE
91103
unset EESSI_CVMFS_INSTALL
92104
93105
# Now configure for a site
@@ -98,30 +110,59 @@ jobs:
98110
check_env_var "EASYBUILD_UMASK" "022"
99111
# unload and check the environment is clean again
100112
module unload EESSI-extend
113+
# check an accelerator installation
114+
export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE
115+
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
116+
check_env_var "EASYBUILD_INSTALLPATH" "$EESSI_SITE_SOFTWARE_PATH" # installation path should be the same unless we ask for an explicit GPU installation
117+
EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
118+
check_env_var "EASYBUILD_INSTALLPATH" "${EESSI_SITE_SOFTWARE_PATH}/accel/${EESSI_ACCELERATOR_TARGET_OVERRIDE}" # installation path should be the same unless we ask for an explicit GPU installation
119+
# unload and make sure the environment is clean again
120+
module unload EESSI-extend
101121
check_disallowed_env_prefix EASYBUILD_
122+
unset EESSI_ACCELERATOR_TARGET_OVERRIDE
102123
unset EESSI_SITE_INSTALL
103124
104125
# Now for a project
105126
export EESSI_PROJECT_INSTALL="$MY_INSTALLATION_PATH"
106127
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
107128
# check some specific envvars
108-
check_env_var "EASYBUILD_INSTALLPATH" "$MY_INSTALLATION_PATH/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR"
129+
export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR"
130+
check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH"
109131
check_env_var "EASYBUILD_UMASK" "002"
110132
check_env_var "EASYBUILD_GROUP_WRITABLE_INSTALLDIR" "1"
111133
# unload and check the environment is clean again
112134
module unload EESSI-extend
135+
# check an accerator installation
136+
export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE
137+
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
138+
check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation
139+
EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
140+
check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same for project case
141+
# unload and make sure the environment is clean again
142+
module unload EESSI-extend
113143
check_disallowed_env_prefix EASYBUILD_
144+
unset EESSI_ACCELERATOR_TARGET_OVERRIDE
114145
unset EESSI_PROJECT_INSTALL
115146
116147
# Now for a user
117148
export EESSI_USER_INSTALL="$MY_INSTALLATION_PATH/$USER"
118149
mkdir -p $EESSI_USER_INSTALL # must exist
119150
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
120151
# check some specific envvars
121-
check_env_var "EASYBUILD_INSTALLPATH" "$MY_INSTALLATION_PATH/$USER/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR"
152+
export EXPECTED_INSTALLATION_PATH="$MY_INSTALLATION_PATH/$USER/versions/$EESSI_VERSION/software/linux/$EESSI_SOFTWARE_SUBDIR"
153+
check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH"
122154
check_env_var "EASYBUILD_UMASK" "077"
123155
# unload and check the environment is clean again
124156
module unload EESSI-extend
157+
# check an accerator installation
158+
export EESSI_ACCELERATOR_TARGET_OVERRIDE=$STORED_EESSI_ACCELERATOR_TARGET_OVERRIDE
159+
module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
160+
check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same unless we ask for an explicit GPU installation
161+
EESSI_ACCELERATOR_INSTALL=1 module load EESSI-extend/${{matrix.EESSI_VERSION}}-easybuild
162+
check_env_var "EASYBUILD_INSTALLPATH" "$EXPECTED_INSTALLATION_PATH" # installation path should be the same for user case
163+
# unload and make sure the environment is clean again
164+
module unload EESSI-extend
125165
check_disallowed_env_prefix EASYBUILD_
166+
unset EESSI_ACCELERATOR_TARGET_OVERRIDE
126167
unset EESSI_USER_INSTALL
127168

.github/workflows/tests_eessi_module.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,9 @@ jobs:
165165
include:
166166
# For each override we expect a specific path (which may differ from the original due to overrides)
167167
- EESSI_ACCELERATOR_TARGET_OVERRIDE: accel/nvidia/cc80
168-
FINAL_ACCELERATOR_PATH_EXPECTED: accel/nvidia/cc80
168+
FINAL_ACCELERATOR_TARGET_EXPECTED: accel/nvidia/cc80
169169
- EESSI_ACCELERATOR_TARGET_OVERRIDE: accel/nvidia/cc77 # deliberately chose a non-existent CUDA capability
170-
FINAL_ACCELERATOR_PATH_EXPECTED: accel/nvidia/cc70 # this reverts to the fallback case (which does exist)
170+
FINAL_ACCELERATOR_TARGET_EXPECTED: accel/nvidia/cc70 # this reverts to the fallback case (which does exist)
171171

172172
steps:
173173
- name: Check out software-layer repository
@@ -193,7 +193,7 @@ jobs:
193193
# Set our accelerator path overrides according to our matrix
194194
if [[ "${{matrix.EESSI_ACCELERATOR_TARGET_OVERRIDE}}" != "none" ]]; then
195195
export EESSI_ACCELERATOR_TARGET_OVERRIDE=${{matrix.EESSI_ACCELERATOR_TARGET_OVERRIDE}}
196-
export FINAL_ACCELERATOR_PATH_EXPECTED=${{matrix.FINAL_ACCELERATOR_PATH_EXPECTED}}
196+
export FINAL_ACCELERATOR_TARGET_EXPECTED=${{matrix.FINAL_ACCELERATOR_TARGET_EXPECTED}}
197197
fi
198198
199199
# Turn on debug output in case we want to take a look

EESSI-extend-easybuild.eb

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ description = """
3535
If both EESSI_USER_INSTALL and EESSI_PROJECT_INSTALL are defined, both sets of
3636
installations are exposed, but new installations are created as user
3737
installations.
38+
39+
Strict installation path checking is enforced by EESSI for EESSI and site
40+
installations involving accelerators. In these cases, if you wish to create an
41+
accelerator installation you must set the environement variable
42+
EESSI_ACCELERATOR_INSTALL (and load/reload this module).
3843
"""
3944

4045
toolchain = SYSTEM
@@ -78,8 +83,21 @@ if (mode() == "load") then
7883
end
7984
end
8085
working_dir = os.getenv("WORKING_DIR") or pathJoin("/tmp", os.getenv("USER"))
86+
8187
-- Gather the EPREFIX to use as a sysroot
8288
sysroot = os.getenv("EESSI_EPREFIX")
89+
90+
-- Check if we have GPU capabilities and configure CUDA compute capabilities
91+
eessi_accelerator_target = os.getenv("EESSI_ACCELERATOR_TARGET")
92+
if (eessi_accelerator_target ~= nil) then
93+
cuda_compute_capability = string.match(eessi_accelerator_target, "^nvidia/cc([0-9][0-9])$")
94+
if (cuda_compute_capability ~= nil) then
95+
easybuild_cuda_compute_capabilities = cuda_compute_capability:sub(1, 1) .. "." .. cuda_compute_capability:sub(2, 2)
96+
else
97+
LmodError("Incorrect value for $EESSI_ACCELERATOR_TARGET: " .. eessi_accelerator_target)
98+
end
99+
end
100+
83101
-- Use an installation prefix that we _should_ have write access to
84102
if (os.getenv("EESSI_CVMFS_INSTALL") ~= nil) then
85103
-- Make sure no other EESSI install environment variables are set
@@ -88,22 +106,20 @@ if (os.getenv("EESSI_CVMFS_INSTALL") ~= nil) then
88106
end
89107
eessi_cvmfs_install = true
90108
easybuild_installpath = os.getenv("EESSI_SOFTWARE_PATH")
91-
eessi_accelerator_target = os.getenv("EESSI_ACCELERATOR_TARGET")
92-
if (eessi_accelerator_target ~= nil) then
93-
cuda_compute_capability = string.match(eessi_accelerator_target, "^nvidia/cc([0-9][0-9])$")
94-
if (cuda_compute_capability ~= nil) then
109+
-- enforce accelerator subdirectory usage for CVMFS installs (only if an accelerator install is requested)
110+
if (eessi_accelerator_target ~= nil) and (cuda_compute_capability ~= nil) and (os.getenv("EESSI_ACCELERATOR_INSTALL") ~= nil) then
95111
easybuild_installpath = pathJoin(easybuild_installpath, 'accel', eessi_accelerator_target)
96-
easybuild_cuda_compute_capabilities = cuda_compute_capability:sub(1, 1) .. "." .. cuda_compute_capability:sub(2, 2)
97-
else
98-
LmodError("Incorrect value for $EESSI_ACCELERATOR_TARGET: " .. eessi_accelerator_target)
99-
end
100112
end
101113
elseif (os.getenv("EESSI_SITE_INSTALL") ~= nil) then
102114
-- Make sure no other EESSI install environment variables are set
103115
if ((os.getenv("EESSI_PROJECT_INSTALL") ~= nil) or (os.getenv("EESSI_USER_INSTALL") ~= nil)) then
104116
LmodError("You cannot use EESSI_SITE_INSTALL in combination with any other EESSI_*_INSTALL environment variables")
105117
end
106118
easybuild_installpath = os.getenv("EESSI_SITE_SOFTWARE_PATH")
119+
-- enforce accelerator subdirectory usage for site installs (only if an accelerator install is requested)
120+
if (eessi_accelerator_target ~= nil) and (cuda_compute_capability ~= nil) and (os.getenv("EESSI_ACCELERATOR_INSTALL") ~= nil) then
121+
easybuild_installpath = pathJoin(easybuild_installpath, 'accel', eessi_accelerator_target)
122+
end
107123
else
108124
-- Deal with user and project installs
109125
project_install = os.getenv("EESSI_PROJECT_INSTALL")

run_in_compat_layer_env.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ fi
2929
if [ ! -z ${EESSI_SOFTWARE_SUBDIR_OVERRIDE} ]; then
3030
INPUT="export EESSI_SOFTWARE_SUBDIR_OVERRIDE=${EESSI_SOFTWARE_SUBDIR_OVERRIDE}; ${INPUT}"
3131
fi
32-
if [ ! -z ${EESSI_ACCELERATOR_TARGET} ]; then
33-
INPUT="export EESSI_ACCELERATOR_TARGET=${EESSI_ACCELERATOR_TARGET}; ${INPUT}"
32+
if [ ! -z ${EESSI_ACCELERATOR_TARGET_OVERRIDE} ]; then
33+
INPUT="export EESSI_ACCELERATOR_TARGET_OVERRIDE=${EESSI_ACCELERATOR_TARGET_OVERRIDE}; ${INPUT}"
3434
fi
3535
if [ ! -z ${EESSI_CVMFS_REPO_OVERRIDE} ]; then
3636
INPUT="export EESSI_CVMFS_REPO_OVERRIDE=${EESSI_CVMFS_REPO_OVERRIDE}; ${INPUT}"

0 commit comments

Comments
 (0)