Skip to content

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