Preskočiť na obsah

OpenMolcas

Popis

OpenMolcas je softvérový balík určený na výpočty elektronovej štruktúry chemických systémov. Podporuje široké spektrum metód výpočtu elektronovej štruktúry, pričom ich hlavnú zložku je multikonfiguračný prístup, ktorý zahŕňa metódy ako CASSCF a CASPT2. OpenMolcas nie je forkom ani novou implementáciou Molcasu, ale veľká časť zdrojového kódu Molcasu, ktorá bola uvoľnená ako slobodný softvér s otvoreným zdrojovým kódom (FOSS) pod licenciou Lesser General Public License (LGPL) verzie 2.1. Niektoré časti Molcasu zostávajú pod inou licenciou na základe rozhodnutia ich autorov alebo preto, že sa ich nepodarilo kontaktovať, a preto nie sú súčasťou OpenMolcas.


Oficiálna dokumentácia

Dokumentáciu softvéru a používateľskú príručku nájdete na oficiálnom webe OpenMolcas.

Dostupné verzie

V súčasnosti je dostupná nasledujúca verzia OpenMolcas:

  • Závislosti pri behu:
    • Žiadne – potrebné knižnice a závislosti sa načítajú automaticky spolu s modulom \(OpenMolcas/24.10-intel-2023a\).

Modul OpenMolcas môžete načítať pomocou nasledujúceho príkazu:

module load OpenMolcas/24.10-intel-2023a


OpenMolcas Benchmark

Paralelizácia OpenMolcas

Je dôležité si uvedomiť, že nie všetky moduly OpenMolcas môžu profitovať z paralelného spracovania. To znamená, že hoci sa výpočet vykonáva paralelne, všetky procesy môžu vykonávať rovnaký sériový výpočet. Benchmarky pozostávajúce z viacerých modulov preto nemusia profitovať z viacerých MPI rankov počas celého behu. Zoznam paralelizovaných modulov OpenMolcas nájdete v časti Parallelization efforts v manuáli OpenMolcas.

Warning

Zoznam paralelizovaných modulov nie je úplný. Príkladom je benchmark COOH diméru s paralelným spracovaním modulu CHCC. Používateľom sa preto odporúča otestovať dostupnosť paralelného výpočtu na menších systémoch a/alebo preskúmať konkrétne moduly v manuáli OpenMolcas, kde možno nájsť informácie o možnostiach paralelného výpočtu.

Aby sme lepšie pochopili, ako OpenMolcas využíva dostupný hardvér na Devane a ako dosiahnuť dobrý výkon, môžeme preskúmať vplyv počtu MPI rankov na uzol a počtu OpenMP vlákien na výkon benchmarku.

Na spustenie benchmarkov sa použil nasledujúci príkaz:

export MOLCAS_WORKDIR=/scratch
export MOLCAS_MEM=$mem
pymolcas $molecule.inp -np $ntmpi -nt $ntomp -o $molecule.out

kde premenné ntmpi a ntomp predstavujú počet MPI rankov a OpenMP vlákien. Premenné molecule, ntmpi, ntomp a mem sú zástupné premenné. Premenná mem, ktorá predstavuje maximálne alokovateľné množstvo pamäte na MPI rank, bola definovaná ako mem=$(echo "scale=0; $SLURM_MEM_PER_NODE / $SLURM_NTASKS" | bc). Dočasný pracovný adresár **MOLCAS_WORKDIR** bol nastavený na/scratch`.

Benchmarky boli vykonané na nasledujúcich systémoch:

Ako vstupný súbor pre tento benchmark sa použil nasledujúci súbor:

C2Au2.inp
&SEWARD
Title= C2Au2
Symmetry = X  Y  Z
Basis set
C.ano-rcc-vtzp
C1               0.000000        0.000000        0.614833  Angstrom
End of basis

Basis set
Au.ano-rcc-vtzp
AU1              0.000000        0.000000        2.475008  Angstrom
End of basis
End of input

********************************************
&SCF
Title
   C2Au2
Occupied
   20 10 10 4 19 9 9 4
Iterations
   70
Prorbitals
   2 1.d+10
End of input

*****************************************
&RASSCF &END
Title
   C2Au2
Symmetry
   1
Spin
   1
nActEl
   2 0 0
Inactive
   20  9 10  4 19  9  9  4
Ras2
   0  1  0  0  0  0  0  0
Lumorb
ITERation
   200 50
CIMX
   200
PROR
   100 0
THRS
   1.0d-09 1.0d-05 1.0d-05
OutOrbitals
Canonical
End of input

****************************************
&MOTRA &END
JOBIph
Frozen
   15 7 7 3 15 7 7 3
End of Input

****************************************
&CCSDT &End
Title
   C2Au2 CC
CCT
ADAPtations
   1
Denominators
   2
T3DEnominators
   0
TRIPles
   3
Extrapolation
   6,4
End of input

Pozor, v OpenMolcas sú efektívne paralelizované iba moduly SEWARD, SCF a RASSCF, nie časť výpočtu založená na metóde coupled-clusters.

Výkon na jednom uzle Výkon na viacerých uzloch
![OpenMolcas_single_node_perf_CAu](../../img/shared/OpenMolcas_single_node_perf_CAu.png
"Výkon OpenMolcas na jednom uzle pre benchmark C2Au2")
![OpenMolcas_cross_node_perf_CAu](../../img/shared/OpenMolcas_cross_node_perf_CAu.png
"Výkon OpenMolcas na viacerých uzloch pre benchmark C2Au2")

Ako vstupný súbor pre tento benchmark sa použil nasledujúci súbor:

COOH.inp
&SEWARD
Title=COOH_dim
Cholesky
ChoInput
Thrc
   0.00000001
EndChoInput

Basis set
C.cc-pvtz
C1 -1.888896  -0.179692   0.000000 Angstrom
C2  1.888896   0.179692   0.000000 Angstrom
End of basis
Basis set
O.cc-pvtz
O1 -1.493280   1.073689   0.000000 Angstrom
O2 -1.170435  -1.166590   0.000000 Angstrom
O3  1.493280  -1.073689   0.000000 Angstrom
O4  1.170435   1.166590   0.000000 Angstrom
End of basis
Basis set
H.cc-pvtz
H1  2.979488   0.258829   0.000000 Angstrom
H2  0.498833  -1.107195   0.000000 Angstrom
H3 -2.979488  -0.258829   0.000000 Angstrom
H4 -0.498833   1.107195   0.000000 Angstrom
End of basis
End of input

****************************************
&SCF
Title
   COOH_dim
Occupied
   24
Iterations
   70
Prorbitals
   2 1.d+10
End of input

****************************************
&CHCC &END
Title
   CC part
Frozen
   6
THRE
   1.0d-08
End of input

****************************************
&CHT3 &END
Title
   CC+T3 part
Frozen
   6
End of input

Pozor, podľa User Guide sú v OpenMolcas efektívne paralelizované iba moduly SEWARD, SCF a RASSCF; zvyšok výpočtu nedokáže profitovať z paralelnej implementácie. Počas benchmarku sa však zistilo, že toto tvrdenie nie je úplne presné, keďže aj modul CHCC dokázal profitovať z paralelného výpočtu.

Výkon na jednom uzle Výkon na viacerých uzloch
![OpenMolcas_single_node_perf_COOH](../../img/shared/OpenMolcas_single_node_perf_COOH.png
"Výkon OpenMolcas na jednom uzle pre benchmark COOH")
![OpenMolcas_cross_node_perf_COOH](../../img/shared/OpenMolcas_cross_node_perf_COOH.png
"Výkon OpenMolcas na viacerých uzloch pre benchmark COOH")

OpenMolcas sa neodporúča spúšťať paralelne, pokiaľ výpočet nie je založený výlučne na moduloch, ktoré môžu profitovať z paralelizácie, alebo pokiaľ nie je neparalelizovaná časť výpočtu v porovnaní s paralelnými modulmi zanedbateľná.

Použitie MPI paralelizácie pri výpočtoch, ktoré obsahujú výraznú časť neparalelizovaných modulov, môže viesť k zníženiu výkonu. Pravdepodobnou príčinou je menšie množstvo dostupnej pamäte pre každý proces, a to aj pre neparalelizované moduly, ktoré môže prevážiť nad prínosmi paralelizovaných častí výpočtu.

Lepší výkon možno dosiahnuť zvýšením počtu OpenMP vlákien na proces pomocou kľúčového slova -nt v príkazovom riadku OpenMolcas.


Príklad spúšťacieho skriptu

Tento skript si môžete skopírovať a upraviť podľa svojich potrieb ako openmolcas_run.sh a úlohu odoslať na výpočtový uzol pomocou príkazu sbatch openmolcas_run.sh.

#!/bin/bash
#SBATCH -J "openmolcas_job"    # name of job in SLURM
#SBATCH --partition=          # selected partition (short, medium, long)
#SBATCH --nodes=              # number of used nodes
#SBATCH --ntasks=              # number of MPI tasks (parallel run)
#SBATCH --cpus-per-task=       # number of OMP threads per MPI rank
#SBATCH --time=hh:mm:ss         # time limit for a job (max 1-00:00 short,
                                # 2-00:00 medium, 4-00:00 long)
#SBATCH -o stdout.%J.out       # standard output
#SBATCH -e stderr.%J.out       # error output

# Load modules
module load OpenMolcas/24.10-intel-2023a

# Create working directory for OpenMolcas
SCRATCH=/scratch/$SLURM_JOB_ACCOUNT/$SLURM_JOB_ID
mkdir -p $SCRATCH

# Define memory per MPI rank
MEM=                         # One MPI rank on a single core corresponds
                             # to a maximum of 3.9 GB

# Export variables to OpenMolcas
export MOLCAS_WORKDIR=$SCRATCH
export MOLCAS_MEM=$MEM

INPUT=molcas_input.inp
OUTPUT=molcas_output.out

pymolcas $INPUT -np $SLURM_NTASKS -nt $SLURM_CPUS_PER_TASK -o $OUTPUT
Created by: Marek Štekláč