Navodila za programsko opremo Quantum Espresso
Quantum Espresso je programski paket, ki temelji na teoriji gostotnega funkcionala (angl. DFT). Uporablja PWcf,PHONONH; CP90, FPMD in Wannier.
Licenca
Quantum Espresso je brezplačen program, izdan pod GNU General Public License
Namestitev:
Na Sling gručah je Quantum Espresso dosegljiv bodisi kot modul ali prek vsebnika Singularity. Na Sling CVMFS je na voljo modul QuantumESPRESSO/QuantumESPRESSO-6.7-foss-2019b. Lahko pa za zagon poslov, ki potrebujejo programsko opremo Quantum Espresso, uporabite tudi svoj vsebnik.
Primer izgradnje vsebnika za NAMD:
Za GPU
NVIDIA ponuja optimiziran vsebnik za Quantum Espresso GPU, ki ga lahko prevedete z ukazom:
singularity build qe-gpu.sif docker://nvcr.io/hpc/quantum_espresso:<tag>
Če na sistemu nimate administratorskih pravic, uporabite za izgradnjo vsebnika stikalo --fakeroot. Možnost uporabe tega stikala mora nastaviti administrator sistema.
Primer izgradnje vsebnika za Quantum Espresso GPU:
singularity build --fakeroot qe-gpu.sif docker://nvcr.io/hpc/quantum_espresso:v6.7
Za CPU
Spodaj je primer definicije vsebnika za namestitev QE z uporabo prevajalnika GNU GCC:
Bootstrap: docker
From: centos:8
%setup
%environment
export LD_LIBRARY_PATH=/opt/qe-6.7/build/lib:/opt/openmpi-4.0.3/build/lib:$LD_LIBRARY_PATH
export PATH=/opt/qe-6.7/build/bin:/opt/openmpi-4.0.3/build/bin:$PATH
export MPIHOME=/opt/openmpi-4.0.3/build
%runscript
echo "Running the container..."
%post
echo "Installing the packages inside the container"
yum -y update
echo "Adding repos"
yum -y install epel-release
dnf -y groupinstall "Development Tools"
dnf -y install epel-release
dnf -y install dnf-plugins-core
dnf config-manager --set-enabled powertools
echo "Installing prerequisites"
yum -y install sed wget make gcc-gfortran gcc libgfortran blacs-common pmix pmix-devel scalapack-common blacs-openmpi blacs-openmpi-devel scalapack-openmpi scalapack-openmpi-devel openblas-devel openblas lapack lapack-devel fftw fftw-devel perl-devel gcc-c++
echo "Set locale"
export LC_ALL=C
echo "Builing OpenMPI"
cd /opt
wget https://download.open-mpi.org/release/open-mpi/v4.0/openmpi-4.0.3.tar.gz
tar xvzf openmpi-4.0.3.tar.gz
cd openmpi-4.0.3
mkdir build || echo "folder build exists"
./configure --prefix=/opt/openmpi-4.0.3/build --with-slurm --with-pmix
make all
make all install
cd ..
rm -rf /opt/openmpi-4.0.3.tar.gz
echo "Add OpenMPI to PATH"
export LD_LIBRARY_PATH=/opt/openmpi-4.0.3/build/lib:$LD_LIBRARY_PATH
echo 'LD_LIBRARY_PATH=/opt/openmpi-4.0.3/build/lib:$LD_LIBRARY_PATH' >>$SINGULARITY_ENVIRONMENT
export PATH=/opt/openmpi-4.0.3/build/bin:$PATH
echo 'PATH=/opt/openmpi-4.0.3/build/bin:$PATH' >>$SINGULARITY_ENVIRONMENT
echo "install ELPA libs"
cd /opt
wget http://elpa.mpcdf.mpg.de/html/Releases/2019.11.001/elpa-2019.11.001.tar.gz
tar xvf elpa-2019.11.001.tar.gz
cd elpa-2019.11.001
./configure --prefix=/opt/elpa-2019-11.001 --with-mpi=yes
make
make install
echo "Adding ELPA libs to the PATH"
export LD_LIBRARY_PATH=/opt/elpa-2019-11.001/lib:$LD_LIBRARY_PATH
echo 'LD_LIBRARY_PATH=/opt/elpa-2019-11.001/lib:$LD_LIBRARY_PATH' >>$SINGULARITY_ENVIRONMENT
export PATH=/opt/elpa-2019-11.001/bin:$PATH
echo 'PATH=/opt/elpa-2019-11.001/bin:$PATH' >>$SINGULARITY_ENVIRONMENT
echo "Building Quantum Espresso"
cd /opt
wget https://github.com/QEF/q-e/archive/refs/tags/qe-6.7.0.tar.gz
tar xvzf qe-6.7.0.tar.gz
mv q-e-qe-6.7.0 qe-6.7
cd qe-6.7
mkdir build || echo "folder build exists"
./configure --prefix=/opt/qe-6.7.0/build
make all
make install
rm -rf /opt/qe-6.7/tar.gz
echo "Adding QE to PATH"
export LD_LIBRARY_PATH=/opt/qe-6.7/build/lib:$LD_LIBRARY_PATH
echo 'LD_LIBRARY_PATH=/opt/qe-6.7/build/lib:$LD_LIBRARY_PATH' >>$SINGULARITY_ENVIRONMENT
export PATH=/opt/qe-6.7/build/bin:$PATH
echo 'PATH=/opt/qe-6.7/build/bin:$PATH' >>$SINGULARITY_ENVIRONMENT
export RTEHOME=/opt/qe-6.7/build
export MPIHOME=/opt/openmpi-4.0.3/build
echo 'RTEHOME=/opt/qe-6.7/build' >>$SINGULARITY_ENVIRONMENT
echo 'MPIHOME=/opt/openmpi-4.0.3/build' >>$SINGULARITY_ENVIRONMENT
Definicijo shranimo kot qe-6.7.def in ga prevedemo z ukazom:
singularity build (--fakeroot) qe-6.7.sif qe-6.7.def
Primer naloge SLURM
Primer z uporabo CPU MPI UCX
OpenMPI z različico 4 uvaja UCX kot privzet način komunikacije med procesi. Pri skrbniku gruče preverite, kako je na gruči urejena povezava med vozlišči in temu prilagodite tudi zagon naloge. Prav tako mora biti NAMD preveden tako, da upošteva tip povezave med vozlišči (npr. OFI, VERBS, UCX ipd).
Ta primer ponazarja posel, ki bo zagnan na 64 jedrih in 8 nitih/jedro. Posel zahteva 4GB RAM-a na jedro, izvajal se bo 2 uri na particiji cpu.
#SBATCH -J QuantumESPRESSO-test
#SBATCH --ntasks=64 # število nalog
#SBATCH --mem-per-cpu=4G # RAM/cpu
#SBATCH --cpus-per-task=8 # 8 OpenMP niti
#SBATCH --time=2:00:00
#SBATCH --partition=cpu #particija cpu
#nalaganje modula za QE
module load QuantumESPRESSO/QuantumESPRESSO-6.7-foss-2019b
### Kopiranje vhodnih podatkov na delovni direktorij
cp -pr /home/user/QuantumESPRESSO/Benchmarks/GRIR443/* $SCRATCH_DIR/
cd $SCRATCH_DIR
### Nastavitev zagona posla:
PARA_PREFIX=srun
PARA_POSTFIX="-ntg 8"
### available flags:
# -nimage n number of images (or -nimages)
# -npool n number of pools (or -npools)
# -nband n number of band groups (or -nb, -nbgrp, -nband_group )
# -ntask_groups n number of task groups (or -ntg)
# -ndiag n number of processors for linear algebra (or -nproc_ortho, -northo, -nproc_diag)
PW_COMMAND="$PARA_PREFIX pw.x $PARA_POSTFIX"
PP_COMMAND="$PARA_PREFIX pp.x $PARA_POSTFIX"
PLOTRHO_COMMAND="$PARA_PREFIX plotrho.x"
BANDS_COMMAND="$PARA_PREFIX bands.x $PARA_POSTFIX"
PLOTBAND_COMMAND="$PARA_PREFIX plotband.x"
### Zagon izračuna:
$PW_COMMAND -in grir443.in
### Prenos izhodnih datotek
#cp -pr $SCRATCH_DIR/ /projektna/mapa/
Primer z uporabo vsebnika GPU
Ta primer zahteva 4 GPU kartice in 4 jedra za vsako nalogo. Za delovni direktorij je v rabi drug datotečni sistem (naloge ne izvajamo iz domačega direktorija).
#!/bin/bash
#SBATCH --exclusive
#SBATCH --nodes=1
#SBATCH --ntasks=4 # Number of MPI processes
#SBATCH --ntasks-per-node=4 # Number of MPI processes
#SBATCH --cpus-per-task=4 # Number of OpenMP threads
#SBATCH --ntasks-per-core=1
#SBATCH --gres=gpu:4
#SBATCH --partition=gpu
export OMP_NUM_THREADS=$SLURM_CPUS_PER_TASK
srun --mpi=pmi2 singularity exec --nv /ceph/hpc/software/containers/singularity/images/qe-6.7-gpu.sif pw.x -inp ausurf.in > ausurf.out
Primer z uporabo vsebnika Singularity na CPU
Primer pošiljanja z ARC
Najprej potrebujemo datoteko .xrsl, v kateri navedemo, kakšne vire potrebujemo za zagon posla.
&
(count=4)
(countpernode=4)
(jobname = "espresso")
(inputfiles =
(ZigZag.Honly.SnZnO.layer.001.in "")
(Zn.pbe-van.UPF "")
(O.pbe-rrkjus.UPF "")
(Sn.pbe-dn-rrkjus_psl.0.2.UPF "")
(H.pbe-rrkjus.UPF "")
)
(executable = "espresso-1.sh")
(stdout = "ZigZag.Honly.SnZnO.layer.001.out")
(join = yes)
(walltime = "200 minutes")
(runTimeEnvironment = 'APPS/CHEM/QE-6.0')
(memory = 2500)
In izvršljiva datoteka:
mpirun -np 4 pw.x < ZigZag.Honly.SnZnO.layer.001.in > ZigZag.Honly.SnZnO.layer.001.out
cp ZigZag.Honly.SnZnO.layer.001.out out/
tar -cvf out.tar out/*
Citiranje QE v člankih
Navodila boste našli na:https://www.quantum-espresso.org/Doc/user_guide/node6.html
Dokumentacija
- Uradna spletna stran: https://www.quantum-espresso.org/
- QE šola v Ljubljani: http://qe2019.ijs.si/