add relion 5 stable with performance flags

This commit is contained in:
2025-03-25 15:47:11 +01:00
committed by assman_g
parent ed0b200a79
commit 42a6bd0bf8
5 changed files with 149 additions and 80 deletions

View File

@@ -23,6 +23,7 @@ https://git.psi.ch/lsm-hpce/relion-scripts
- The build script was also updated accordingly
- Also, cryocare is now available in a wrapper from relion, the cryocare installation executables need to be provided (seperate cryocare module). It is crucial to add the cryocare lib path (from the cryocare conda env) to the LD_LIBRARY_PATH when loading the relion module
- tiff module no longer required, as this conflicts with the system shared tiff libs (not 100% sure why this canged from previous installations though)
### 5.0-2beta (ON MERLIN7)
- no fetching of weights with ftp possible, so cp from other machines into BUILD DIR and using the -DFETCH\_WEIGHTS=OFF option
- link : ftp://ftp.mrc-lmb.cam.ac.uk/pub/scheres/fltk-1.3.5-source.tar.gz
@@ -32,7 +33,7 @@ https://git.psi.ch/lsm-hpce/relion-scripts
- same as 5.0-2beta (especially when it comes to the weights...)
- copy the fltk and the classranker file into the BUILD Directory. The build script assumes that these two files are in the BUILD\_DIR.
- sha256 errors occured during installation:
```
```text
ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
unknown package:
Expected sha256 20abd2cae58e55ca1af8a8dcf43293336a59adf0391f1917bf8518633cfc2cdf
@@ -40,14 +41,17 @@ ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you
```
- The download of some packages (.whl files) was blocked by the merlin7 firewall. Google the shasum and find the package name. Try to manually download with curl. If this fails, this is a strong indication for network/firewall issues that need to be adressed by the networking team. .whl files from conda +pip installations are ususally stored in the env in lib/pythonXXX.
- Also, to not clean up build directories:
```
```text
--no-clean
Don't clean up build directories.
(environment variable: PIP_NO_CLEAN)
```
- adding flags to activate more aggressive compiler optimsations (affixing to `x86-64-v3` which is fully support on all EPYC nodes on Merlin7)
### 5.0.0 for GH
no successful installation so far - failing for conda env. Elsa G. build some hacky hack that works kind of..
needs to be investigated further.
- will attempt to build with more aggressive compiler optimisations as proscribed in: <https://docs.nvidia.com/grace-perf-tuning-guide/compilers.html>

View File

@@ -1,5 +1,6 @@
#!/usr/bin/env modbuild
PERFORMANCE="yes"
PROFILE="no"
SP="no"
@@ -8,21 +9,18 @@ pbuild::prep() {
local BRANCH
if [[ "$V" =~ beta$ ]]; then
BRANCH="ver${V_MAJOR}.${V_MINOR}"
elif [[ "$V" =~ profile$ ]]; then
BRANCH="${V_PKG}"
PROFILE="yes"
elif [[ "$V" =~ sp$ ]]; then
BRANCH="ver${V_MAJOR}.${V_MINOR}"
SP="yes"
else
BRANCH="${V_PKG}"
fi
if [[ -d "$SRC_DIR/.git" ]]; then
cd "$SRC_DIR"
cd "$SRC_DIR"
git pull
else
git clone --depth=1 -b "$BRANCH" https://github.com/3dem/relion.git "$SRC_DIR" || return $?
@@ -31,63 +29,111 @@ pbuild::prep() {
pbuild::pre_configure() {
# Section will be switched on for -profile version
#-----------------------------------------------------------
if [[ "$PROFILE" == "yes" ]]; then
# this needs to go into the config.yml file for >5.0-1beta
: #pbuild::add_configure_args "-DCMAKE_BUILD_TYPE=BENCHMARKING"
if [[ "$V_MAJOR" -lt "5" ]]; then
: pbuild::add_configure_args "-DCMAKE_BUILD_TYPE=BENCHMARKING"
fi
fi
#------------------------------------------------------------
# Section will be switched on for single-precision version
# Safe memory usage for multibody refinements
#------------------------------------------------------------
if [[ "$SP" == "yes" ]]; then
# this needs to go into the config.yml file for >5.0-1beta
: #pbuild::add_configure_args "-DDoublePrec_CPU=OFF"
if [[ "$V_MAJOR" -lt "5" ]]; then
: pbuild::add_configure_args "-DDoublePrec_CPU=OFF"
fi
fi
#------------------------------------------------------------
# Set performance oriented compiler flags, specific for a given
# architecture.
# -------------------------------------------------------------
if [[ "$PERFORMANCE" == "yes" && "$PROFILE" == "no" ]]; then
# set compiler flags per arch
echo "> setting performance system compiler flags"
case "$(uname -m)" in
"aarch64")
export CC=gcc
export CFLAGS='-mcpu=neoverse-v2 -O3 -pipe -Wno-error'
export CXX=g++
export CXXFLAGS='-mcpu=neoverse-v2 -O3 -pipe -Wno-error'
export FCFLAGS='-mcpu=neoverse-v2 -O3 -pipe'
export FFLAGS='-mcpu=neoverse-v2 -O3 -pipe'
export LDFLAGS='-Wl,--as-needed'
;;
"x86_64")
export CC=gcc
export CFLAGS='-march=x86-64-v3 -mtune=znver1 -O3 -pipe -Wno-error'
export CXX=g++
export CXXFLAGS='-march=x86-64-v3 -mtune=znver1 -O3 -pipe -Wno-error'
export FCFLAGS='-march=x86-64-v3 -mtune=znver1 -O3 -pipe'
export FFLAGS='-march=x86-64-v3 -mtune=znver1 -O3 -pipe'
export LDFLAGS='-Wl,--as-needed'
;;
*)
echo ">> Unknown system arch found $(uname -m)! Using basic flags only!"
export CC=gcc
export CFLAGS='-O3 -pipe -Wno-error'
export CXX=g++
export CXXFLAGS='-O3 -pipe -Wno-error'
export FCFLAGS='-O3 -pipe'
export FFLAGS='-O3 -pipe'
export LDFLAGS='-Wl,--as-needed'
;;
esac
echo ">> ${CC} ${CFLAGS}"
echo ">> ${CXX} ${CXXFLAGS}"
fi
# -------------------------------------------------------------
# The following section will only work for versions >= 5.0-beta
# -------------------------------------------------------------
if [[ "$V_MAJOR" -ge "5" ]]; then
#download blush weights, from zenodo
#mkdir -p "${PREFIX}"
#download blush weights, from zenodo
echo "> downloading blush weights"
mkdir -p "$PREFIX/torch/hub/checkpoints/relion_blush"
wget -q https://zenodo.org/records/10072731/files/blush_v1.0.ckpt.gz -P "$PREFIX/torch/hub/checkpoints/relion_blush" \
&& gunzip "$PREFIX/torch/hub/checkpoints/relion_blush/blush_v1.0.ckpt.gz"
mv "$PREFIX/torch/hub/checkpoints/relion_blush/blush_v1.0.ckpt" "$PREFIX/torch/hub/checkpoints/relion_blush/v1.0.ckpt"
touch "$PREFIX/torch/hub/checkpoints/relion_blush/v1.0_installed.txt"
#cp classranker that was downloaded on another machine before from BUILDBLOCK_DIR
#cp classranker that was downloaded on another machine before from BUILDBLOCK_DIR
echo "> downloading classranker"
mkdir -p "$PREFIX/torch/hub/checkpoints/relion_class_ranker"
cp "$BUILDBLOCK_DIR/classranker_v1.0.ckpt.gz" "$PREFIX/torch/hub/checkpoints/relion_class_ranker"
gunzip "$PREFIX/torch/hub/checkpoints/relion_class_ranker/classranker_v1.0.ckpt.gz"
wget -q ftp://ftp.mrc-lmb.cam.ac.uk/pub/dari/classranker_v1.0.ckpt.gz -P "$PREFIX/torch/hub/checkpoints/relion_class_ranker" \
&& gunzip "$PREFIX/torch/hub/checkpoints/relion_class_ranker/classranker_v1.0.ckpt.gz"
mv "$PREFIX/torch/hub/checkpoints/relion_class_ranker/classranker_v1.0.ckpt" "$PREFIX/torch/hub/checkpoints/relion_class_ranker/v1.0.ckpt"
touch "$PREFIX/torch/hub/checkpoints/relion_class_ranker/v1.0_installed.txt"
# fltk stuff
echo "> downloading FLTK"
mkdir -p "$SRC_DIR/external/fltk"
cp "$BUILDBLOCK_DIR/fltk-1.3.5-source.tar.gz" "$SRC_DIR/external/fltk/"
wget -q ftp://ftp.mrc-lmb.cam.ac.uk/pub/scheres/fltk-1.3.5-source.tar.gz -P "$SRC_DIR/external/fltk/"
#INSTALL Miniconda
echo "installing miniconda"
# Install Miniconda
echo "> installing miniconda"
mkdir -p "$PREFIX/miniconda"
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh -O "$PREFIX/miniconda/miniconda.sh"
#wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O "$PREFIX/miniconda/miniconda.sh"
if [[ "$(uname -m)" =~ "aarch64" ]]; then
wget -q https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh -O "$PREFIX/miniconda/miniconda.sh"
else
wget -q https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O "$PREFIX/miniconda/miniconda.sh"
fi
bash "$PREFIX/miniconda/miniconda.sh" -b -u -p "$PREFIX/miniconda/"
# Copy manually edited environment.yml file (with cryocare specs) into the folder to substitute the default one
#Conda create env with miniconda installation
"$PREFIX/miniconda/condabin/conda" env create --name "${P}-${V}" -f "$SRC_DIR/environment.yml"
# Setup conda env; switch into relion repo directory to capture local
# `.[vis]` pip package dependencies
echo "> building conda env"
pushd "$SRC_DIR"
"$PREFIX/miniconda/condabin/conda" env create -q -f environment.yml
"$PREFIX/miniconda/condabin/conda" env list
popd
fi
#---------------------------------------------------------------
}

View File

@@ -1,34 +0,0 @@
name: relion-5.0
channels:
- conda-forge
dependencies:
- pip
- python=3.9
- setuptools=59.5.0
- pip:
- torch==2.0.1
- torchvision==0.15.2
- tqdm==4.65.0
- mrcfile==1.4.3
- starfile>=0.5.6
- loguru==0.7.0
- scikit-learn==1.3.0
- umap-learn==0.5.3
- matplotlib==3.7.2
- morphosamplers==0.0.13
- pydantic==1.10.18
- napari[all]==0.4.18
- tsnecuda==3.0.1
- PyQt5==5.15.9
- typer==0.9.0
- biopython==1.81
- fastcluster==1.2.6
- seaborn==0.12.2
- dill==0.3.7
- numpy<2
- git+https://github.com/3dem/relion-classranker@b6e751e5cb4205d8e9b36d0ae38c3687b3395acb
- git+https://github.com/3dem/relion-blush
- git+https://github.com/3dem/DynaMight
- git+https://github.com/3dem/topaz
- git+https://github.com/3dem/model-angelo
- ".[vis]"

View File

@@ -7,38 +7,94 @@ relion:
relstage: unstable
build_variants: first_match
versions:
5.0.0:
5.0.0-perf:
variants:
- overlay: Alps
- overlay: Alps
target_cpus: [x86_64]
systems: [.*.merlin7.psi.ch]
build_requires:
- cmake/3.23.2
- git/2.37.0
- openmpi/5.0.5
relstage: unstable
- gcc/12.3.0
- cuda/12.2.0
- openmpi/5.0.5
relstage: stable
runtime_deps:
- gcc/12.3.0
- cuda/12.2.0
- openmpi/5.0.5
configure_with: cmake
configure_args:
- "-DCMAKE_BUILD_TYPE=RELEASE"
- "-DCMAKE_CXX_FLAGS=${CXXFLAGS} -DNDEBUG"
- "-DCMAKE_C_FLAGS=${CFLAGS} -DNDEBUG"
- "-DTORCH_HOME_PATH=${PREFIX}/torch"
- "-DPYTHON_EXE_PATH=${PREFIX}/miniconda/envs/${P}-${V}/bin/python"
- "-DPYTHON_EXE_PATH=${PREFIX}/miniconda/envs/relion-5.0/bin/python"
- "-DFORCE_OWN_FFTW=ON"
- "-DFORCE_OWN_FLTK=ON"
- "-DFORCE_OWN_TBB=ON"
- "-DCUDA=ON"
- "-DCUDA_ARCH=80" # dep on the cuda arch of the oldest GPU
- "-DFETCH_WEIGHTS=OFF"
# does not work yet- just an idea...
- overlay: Alps
# does not work yet- just an idea...
- overlay: Alps
target_cpus: [aarch64]
systems: [gpu0.*.merlin7.psi.ch]
build_requires:
#- cmake/3.23.2
#- git/2.37.0
- openmpi/5.0.5
- openmpi/5.0.5
- gcc/12.3.0
- cuda/12.2.0
relstage: unstable
runtime_deps:
- gcc/12.3.0
- cuda/12.2.0
- openmpi/5.0.5
configure_with: cmake
configure_args:
- "-DCMAKE_BUILD_TYPE=RELEASE"
- "-DCMAKE_CXX_FLAGS=${CXXFLAGS} -DNDEBUG"
- "-DCMAKE_C_FLAGS=${CFLAGS} -DNDEBUG"
- "-DTORCH_HOME_PATH=${PREFIX}/torch"
- "-DPYTHON_EXE_PATH=${PREFIX}/miniconda/envs/relion-5.0/bin/python"
- "-DFORCE_OWN_FFTW=ON"
- "-DFORCE_OWN_FLTK=ON"
- "-DCUDA=ON"
- "-DCUDA_ARCH=90" # dep on the cuda arch of the oldest GPU
- "-DFETCH_WEIGHTS=OFF"
5.0.0:
variants:
- overlay: Alps
target_cpus: [x86_64]
systems: [.*.merlin7.psi.ch]
build_requires:
- cmake/3.23.2
- git/2.37.0
- gcc/12.3.0
- cuda/12.2.0
- openmpi/5.0.5
relstage: unstable
runtime_deps:
- gcc/12.3.0
- cuda/12.2.0
- openmpi/5.0.5
configure_with: cmake
configure_args:
- "-DTORCH_HOME_PATH=${PREFIX}/torch"
- "-DPYTHON_EXE_PATH=${PREFIX}/miniconda/envs/relion-5.0/bin/python"
- "-DFORCE_OWN_FFTW=ON"
- "-DFORCE_OWN_FLTK=ON"
- "-DCUDA=ON"
- "-DCUDA_ARCH=80" # dep on the cuda arch of the oldest GPU
- "-DFETCH_WEIGHTS=OFF"
# does not work yet- just an idea...
- overlay: Alps
target_cpus: [aarch64]
systems: [gpu0.*.merlin7.psi.ch]
build_requires:
#- cmake/3.23.2
#- git/2.37.0
- openmpi/5.0.5
- gcc/12.3.0
- cuda/12.2.0
relstage: unstable
@@ -49,17 +105,16 @@ relion:
configure_with: cmake
configure_args:
- "-DTORCH_HOME_PATH=${PREFIX}/torch"
- "-DPYTHON_EXE_PATH=${PREFIX}/miniconda/envs/${P}-${V}/bin/python"
- "-DPYTHON_EXE_PATH=${PREFIX}/miniconda/envs/relion-5.0/bin/python"
- "-DFORCE_OWN_FFTW=ON"
- "-DFORCE_OWN_FLTK=ON"
- "-DFORCE_OWN_TBB=ON"
- "-DCUDA=ON"
- "-DCUDA_ARCH=90" # dep on the cuda arch of the oldest GPU
- "-DFETCH_WEIGHTS=OFF"
#MERLIN7 old (cray)
5.0-2beta:
variants:
- overlay: Alps
- overlay: Alps
systems: [gpu.*.merlin7.psi.ch]
build_requires:
- cmake/3.23.2
@@ -73,10 +128,9 @@ relion:
configure_with: cmake
configure_args:
- "-DTORCH_HOME_PATH=${PREFIX}/torch"
- "-DPYTHON_EXE_PATH=${PREFIX}/miniconda/envs/${P}-${V}/bin/python"
- "-DPYTHON_EXE_PATH=${PREFIX}/miniconda/envs/relion-5.0/bin/python"
- "-DFORCE_OWN_FFTW=ON"
- "-DFORCE_OWN_FLTK=ON"
- "-DFORCE_OWN_TBB=ON"
- "-DCUDA=ON"
- "-DCUDA_ARCH=80" # dep on the cuda arch of the oldest GPU
#- "-DCudaTexture=ON"
@@ -99,10 +153,9 @@ relion:
configure_with: cmake
configure_args:
- "-DTORCH_HOME_PATH=${PREFIX}/torch"
- "-DPYTHON_EXE_PATH=${PREFIX}/miniconda/envs/${P}-${V}/bin/python"
- "-DPYTHON_EXE_PATH=${PREFIX}/miniconda/envs/relion-5.0/bin/python"
- "-DFORCE_OWN_FFTW=ON"
- "-DFORCE_OWN_FLTK=ON"
- "-DFORCE_OWN_TBB=ON"
- "-DCUDA=ON"
- "-DCUDA_ARCH=61" # dep on the cuda arch of the oldest GPU
- "-DCudaTexture=ON"

View File

@@ -44,7 +44,7 @@ setenv RELION_QSUB_TEMPLATE /opt/psi/overlays/Alps/EM/relion/$V/scripts/multi_gp
setenv RELION_MOTIONCOR2_EXECUTABLE "/opt/psi/EM/MotionCor2/1.6.4/bin/MotionCor2"
setenv RELION_TOPAZ_EXECUTABLE /opt/psi/overlays/Alps/EM/relion/$V/miniconda/envs/$P-$V/bin/topaz
setenv RELION_PYTHON_EXECUTABLE /opt/psi/overlays/Alps/EM/relion/$V/miniconda/envs/$P-$V/bin/python
setenv RELION_TOPAZ_EXECUTABLE /opt/psi/overlays/Alps/EM/relion/$V/miniconda/envs/relion-5.0/bin/topaz
setenv RELION_PYTHON_EXECUTABLE /opt/psi/overlays/Alps/EM/relion/$V/miniconda/envs/relion-5.0/bin/python
setenv RELION_TORCH_HOME_PATH /opt/psi/overlays/Alps/EM/relion/$V/torch/