.. include:: ../../substitutions.rst
=================
Cluster Execution
=================
The efficient memory usage and favorable runtime performance make |project| a great software for high-performance computing environments [1]_. However, please note that multi-node jobs using protocols like `Open MPI `_ are not yet supported.
The following subsections provide templates for the execution of |project| on different compute cluster architectures. Since ``match_template.py`` performs the ressource intensive template matching operation, the examples will be in reference to this script.
.. note::
The ``estimate_ram_usage.py`` script computes an initial memory estimate on a given template matching case for clusters that require memory reservations.
.. code-block:: bash
estimate_ram_usage.py --help
SLURM (EMBL)
------------
The scripts in this section are designed in particular for use with the `EMBL `_ SLURM cluster. However, they can be adapted to general SLURM clusters by changing the particion name via ``#SBATCH -p htc-el8``.
The templates below are intended to be adapted to your specific use cases and pasted into a new file. This file created by you, lets assume its called ``submission_script.sbatch``, can then be run on the cluster like so:
.. code-block:: bash
sbatch submission_script.sbatch
Instead of using conda, you can also use the |project| module installed on the cluster. To do so, first determine the newest available version, indicated by it having the higest version number:
.. code-block:: bash
module spider pyTME
# Versions:
# pyTME/0.2.0-foss-2023a-CUDA-12.1.1
# pyTME/0.2.1-foss-2023a-CUDA-12.1.1
You can then replace every ocurence of:
.. code-block:: bash
module load Anaconda3
source activate pytme
by:
.. code-block:: bash
module pyTME/0.2.1-foss-2023a-CUDA-12.1.1
CPU Execution
-------------
The sbatch file below is sufficient to perform template matching on a bin 4 tomogram with rough shape 500, 900, 900. This job will request 10 CPU cores and 150 GB of RAM for 16 hours on the partition htc-el8. Make sure to replace all variables in curly brackets with your local paths to use this template.
.. code-block:: bash
#!/bin/bash
#SBATCH -N 1
#SBATCH -p htc-el8
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=10
#SBATCH --mem 150G
#SBATCH -t 16:00:00
module load Anaconda3
source activate pytme
match_template.py \
-m ${TOMOGRAM_PATH} \
-i ${TEMPLATE_PATH} \
--template_mask ${TEMPLATE_MASK_PATH} \
-n 10 \
-a $ANGULAR_SAMPLING \
-o ${OUTPUT_PATH}
GPU Execution
-------------
The following will perform template matching using 2 NVIDIA RTX3090 GPUs. If N is the number of GPUs, you can change it by modifying ``#SBATCH --gres=gpu:N`` to a number of your liking.
.. code-block:: bash
#!/bin/bash
#SBATCH -N 1
#SBATCH --export=NONE
#SBATCH -p gpu-el8
#SBATCH --mem 100G
#SBATCH -C gpu=3090
#SBATCH --gres=gpu:2
#SBATCH -t 0:30:00
module load Anaconda3
source activate pytme
match_template.py \
-m ${TOMOGRAM_PATH} \
-i ${TEMPLATE_PATH} \
--template_mask ${TEMPLATE_MASK_PATH} \
-n 2 \
-a $ANGULAR_SAMPLING \
-o ${OUTPUT_PATH} \
--use_gpu
References
----------
.. [1] Maurer, V. J.; Siggel, M.; Kosinski, J. PyTME (Python Template Matching Engine): A fast, flexible, and multi-purpose template matching library for cryogenic electron microscopy data. SoftwareX 2024