-
Notifications
You must be signed in to change notification settings - Fork 50
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch '2023.06-software.eessi.io' into 2023.06-software.eessi.…
…io_Paraver
- Loading branch information
Showing
96 changed files
with
2,763 additions
and
366 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
setenv("INSIDE_GITHUB_ACTIONS", "true") | ||
-- Interfere with PATH so Lmod keeps a record | ||
prepend_path("PATH", "/snap/bin") |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#!/bin/bash | ||
# | ||
# This script figures out the latest version of EasyBuild being used for the installation of easystack | ||
# files. | ||
# | ||
# This file is part of the EESSI software layer, see | ||
# https://github.com/EESSI/software-layer.git | ||
# | ||
# author: Alan O'Cais (CECAM) | ||
# | ||
# license: GPLv2 | ||
# | ||
|
||
EESSI_VERSION=${EESSI_VERSION:-"2023.06"} | ||
|
||
directory="easystacks/software.eessi.io/${EESSI_VERSION}" | ||
# List of example filenames | ||
files=($(find "$directory" -name "*.yml" | grep -e '-eb-')) | ||
[ -n "$DEBUG" ] && echo "${files[@]}" | ||
|
||
versions=() | ||
# Loop over each filename | ||
for filename in "${files[@]}"; do | ||
# Extract the semantic version using grep | ||
version=$(echo "$filename" | grep -oP '(?<=eb-)\d+\.\d+\.\d+?(?=-)') | ||
|
||
# Output the result | ||
[ -n "$DEBUG" ] && echo "Filename: $filename" | ||
[ -n "$DEBUG" ] && echo "Extracted version: $version" | ||
[ -n "$DEBUG" ] && echo | ||
versions+=("$version") | ||
done | ||
highest_version=$(printf "%s\n" "${versions[@]}" | sort -V | tail -n 1) | ||
|
||
[ -n "$DEBUG" ] && echo "Highest version: $highest_version" | ||
[ -n "$DEBUG" ] && echo | ||
[ -n "$DEBUG" ] && echo "Matching files:" | ||
all_latest_easystacks=($(find $directory -type f -name "*eb-$highest_version*.yml")) | ||
|
||
accel_latest_easystacks=() | ||
cpu_latest_easystacks=() | ||
|
||
# Loop through the array and split based on partial matching of string | ||
accel="/accel/" | ||
for item in "${all_latest_easystacks[@]}"; do | ||
if [[ "$item" == *"$accel"* ]]; then | ||
accel_latest_easystacks+=("$item") | ||
else | ||
cpu_latest_easystacks+=("$item") | ||
fi | ||
done | ||
|
||
# Output the results | ||
if [ -n "$ACCEL_EASYSTACKS" ]; then | ||
echo "${accel_latest_easystacks[@]}" | ||
else | ||
echo "${cpu_latest_easystacks[@]}" | ||
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
#!/bin/bash | ||
EESSI_VERSION="2023.06" | ||
export LMOD_PAGER=cat | ||
|
||
# initialize assert framework | ||
if [ ! -d assert.sh ]; then | ||
echo "assert.sh not cloned." | ||
echo "" | ||
echo "run \`git clone https://github.com/lehmannro/assert.sh.git\`" | ||
exit 1 | ||
fi | ||
. assert.sh/assert.sh | ||
|
||
TEST_SHELLS=("bash" "zsh" "fish" "ksh") | ||
SHELLS=$@ | ||
|
||
for shell in ${SHELLS[@]}; do | ||
echo = | awk 'NF += (OFS = $_) + 100' | ||
echo RUNNING TESTS FOR SHELL: $shell | ||
echo = | awk 'NF += (OFS = $_) + 100' | ||
if [[ ! " ${TEST_SHELLS[*]} " =~ [[:space:]]${shell}[[:space:]] ]]; then | ||
### EXCEPTION FOR CSH ### | ||
echo -e "\033[33mWe don't now how to test the shell '$shell', PRs are Welcome.\033[0m" | ||
else | ||
# TEST 1: Source Script and check Module Output | ||
assert "$shell -c 'source init/lmod/$shell' 2>&1 " "EESSI/$EESSI_VERSION loaded successfully" | ||
# TEST 2: Check if module overviews first section is the loaded EESSI module | ||
MODULE_SECTIONS=($($shell -c "source init/lmod/$shell 2>/dev/null; module ov 2>&1 | grep -e '---'")) | ||
PATTERN="/cvmfs/software\.eessi\.io/versions/$EESSI_VERSION/software/linux/x86_64/(intel/haswell|amd/zen3)/modules/all" | ||
assert_raises 'echo "${MODULE_SECTIONS[1]}" | grep -E "$PATTERN"' | ||
# TEST 3: Check if module overviews second section is the EESSI init module | ||
assert "echo ${MODULE_SECTIONS[4]}" "/cvmfs/software.eessi.io/versions/$EESSI_VERSION/init/modules" | ||
# Test 4: Load Python module and check version | ||
command="$shell -c 'source init/lmod/$shell 2>/dev/null; module load Python/3.10.8-GCCcore-12.2.0; python --version'" | ||
expected="Python 3.10.8" | ||
assert "$command" "$expected" | ||
# Test 5: Load Python module and check path | ||
PYTHON_PATH=$($shell -c "source init/lmod/$shell 2>/dev/null; module load Python/3.10.8-GCCcore-12.2.0; which python") | ||
PATTERN="/cvmfs/software\.eessi\.io/versions/$EESSI_VERSION/software/linux/x86_64/(intel/haswell|amd/zen3)/software/Python/3\.10\.8-GCCcore-12\.2\.0/bin/python" | ||
echo "$PYTHON_PATH" | grep -E "$PATTERN" | ||
assert_raises 'echo "$PYTHON_PATH" | grep -E "$PATTERN"' | ||
|
||
#End Test Suite | ||
assert_end "source_eessi_$shell" | ||
fi | ||
done | ||
|
||
|
||
# RESET PAGER | ||
export LMOD_PAGER= |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,124 @@ | ||
# documentation: https://help.github.com/en/articles/workflow-syntax-for-github-actions | ||
name: Tests for accelerator detection (NVIDIA GPU) | ||
on: | ||
push: | ||
pull_request: | ||
permissions: | ||
contents: read # to fetch code (actions/checkout) | ||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
fake_nvidia_smi_script: | ||
- none # no nvidia-smi command | ||
- no_devices # nvidia-smi command works, but no GPUs available | ||
- 1xa100 # cc80, supported with (atleast) zen2 CPU | ||
- 2xa100 # cc80, supported with (atleast) zen2 CPU | ||
- 4xa100 # cc80, supported with (atleast) zen2 CPU | ||
- cc01 # non-existing GPU | ||
fail-fast: false | ||
steps: | ||
- name: checkout | ||
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 | ||
|
||
# we deliberately do not use the eessi/github-action-eessi action, | ||
# because we want to control when the EESSI environment is initialized | ||
- name: Mount EESSI CernVM-FS repository | ||
uses: cvmfs-contrib/github-action-cvmfs@55899ca74cf78ab874bdf47f5a804e47c198743c # v4.0 | ||
with: | ||
cvmfs_config_package: https://github.com/EESSI/filesystem-layer/releases/download/latest/cvmfs-config-eessi_latest_all.deb | ||
cvmfs_http_proxy: DIRECT | ||
cvmfs_repositories: software.eessi.io | ||
|
||
- name: test accelerator detection | ||
run: | | ||
export EESSI_SOFTWARE_SUBDIR_OVERRIDE='x86_64/amd/zen2' | ||
# put fake nvidia-smi command in place (unless we don't want to) | ||
if [[ "${{matrix.fake_nvidia_smi_script}}" != "none" ]]; then | ||
tmpdir=$(mktemp -d) | ||
ln -s $PWD/tests/archdetect/nvidia-smi/${{matrix.fake_nvidia_smi_script}}.sh $tmpdir/nvidia-smi | ||
export PATH=$tmpdir:$PATH | ||
fi | ||
# first run with debugging enabled, just to show the output | ||
./init/eessi_archdetect.sh -d accelpath || echo "non-zero exit code: $?" | ||
# verify output (or exit code if non-zero) | ||
out=$(./init/eessi_archdetect.sh accelpath || echo "non-zero exit code: $?") | ||
if [[ $out == "$( cat ./tests/archdetect/nvidia-smi/${{matrix.fake_nvidia_smi_script}}.output )" ]]; then | ||
echo "Test for '${{matrix.fake_nvidia_smi_script}}' PASSED: '$out'" | ||
# run full EESSI init script, which pick up on the accelerator (if available) | ||
echo | ||
. init/bash 2>&1 | tee init.out | ||
echo "-----------------------------------------------------------------------------" | ||
if [[ "${{matrix.fake_nvidia_smi_script}}" == "none" ]] || [[ "${{matrix.fake_nvidia_smi_script}}" == "no_devices" ]]; then | ||
pattern="archdetect could not detect any accelerators" | ||
echo ">>> checking for pattern '${pattern}' in init output..." | ||
grep "${pattern}" init.out || (echo "FAILED 1" || exit 1) | ||
pattern="archdetect found supported accelerator" | ||
echo ">>> checking for lack of pattern '${pattern}' in init output..." | ||
match=$(grep "${pattern}" init.out || true) | ||
test "x${match}" = "x" || (echo "unexpected match found for '${pattern}' in init output" && exit 1) | ||
pattern="Prepending /cvmfs/software.eessi.io/versions/2023.06/software/linux/.*/accel/.*/modules/all to \$MODULEPATH" | ||
echo ">>> checking for lack of pattern '${pattern}' in init output..." | ||
match=$(grep "${pattern}" init.out || true) | ||
test "x${match}" = "x" || (echo "unexpected match found for '${pattern}' in init output" && exit 1) | ||
elif [[ "${{matrix.fake_nvidia_smi_script}}" == "cc01" ]]; then | ||
pattern="No matching path found in x86_64/amd/zen2 for accelerator detected by archdetect (accel/nvidia/cc01)" | ||
echo ">>> checking for pattern '${pattern}' in init output..." | ||
grep "${pattern}" init.out || (echo "FAILED 1" || exit 1) | ||
pattern="Prepending /cvmfs/software.eessi.io/versions/2023.06/software/linux/.*/accel/.*/modules/all to \$MODULEPATH" | ||
echo ">>> checking for lack of pattern '${pattern}' in init output..." | ||
match=$(grep "${pattern}" init.out || true) | ||
test "x${match}" = "x" || (echo "unexpected match found for '${pattern}' in init output" && exit 1) | ||
else | ||
echo ">>> checking for 'accel/nvidia/cc80' in init output..." | ||
grep "archdetect found supported accelerator for CPU target x86_64/amd/zen2: accel/nvidia/cc80" init.out || (echo "FAILED 2" && exit 1) | ||
grep "Prepending /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2/accel/nvidia/cc80/modules/all to \$MODULEPATH" init.out || (echo "FAILED 3" && exit 1) | ||
fi | ||
echo ">>> checking last line of init output..." | ||
tail -1 init.out | grep "Environment set up to use EESSI (2023.06), have fun!" || (echo "FAILED, full init utput:" && cat init.out && exit 1) | ||
echo "All checks on init output PASSED" | ||
else | ||
echo "Test for '${{matrix.fake_nvidia_smi_script}}' FAILED: '$out'" >&2 | ||
exit 1 | ||
fi | ||
- name: test accelerator detection under $EESSI_ACCEL_SOFTWARE_SUBDIR_OVERRIDE + $EESSI_ACCELERATOR_TARGET_OVERRIDE | ||
run: | | ||
export EESSI_SOFTWARE_SUBDIR_OVERRIDE='x86_64/amd/zen2' | ||
export EESSI_ACCEL_SOFTWARE_SUBDIR_OVERRIDE='x86_64/amd/zen3' | ||
export EESSI_ACCELERATOR_TARGET_OVERRIDE='accel/nvidia/cc80' | ||
# first run with debugging enabled, just to show the output | ||
./init/eessi_archdetect.sh -d accelpath || echo "non-zero exit code: $?" | ||
# verify output (or exit code if non-zero) | ||
out=$(./init/eessi_archdetect.sh accelpath || echo "non-zero exit code: $?") | ||
echo | ||
. init/bash 2>&1 | tee init.out | ||
echo "-----------------------------------------------------------------------------" | ||
echo ">>> checking for 'accel/nvidia/cc80' in init output..." | ||
grep "archdetect found supported accelerator for CPU target x86_64/amd/zen3: accel/nvidia/cc80" init.out || (echo "FAILED 1" && exit 1) | ||
grep "Using x86_64/amd/zen2 as software subdirectory" init.out || (echo "FAILED 2" && exit 1) | ||
grep "Prepending /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen2/modules/all to \$MODULEPATH" init.out || (echo "FAILED 3" && exit 1) | ||
grep "Prepending /cvmfs/software.eessi.io/versions/2023.06/software/linux/x86_64/amd/zen3/accel/nvidia/cc80/modules/all to \$MODULEPATH" init.out || (echo "FAILED 4" && exit 1) | ||
echo "All checks on init output PASSED" |
Oops, something went wrong.