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 |
|---|---|
|  | |
|  |
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 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