BigDFT accelerato da GPU

Inizia subito con questa guida alle applicazioni basate su GPU.

BigDFT

BigDFT è una teoria del funzionale della densità (DFT, Density Functional Theory) con codice strutturale elettronico massivamente parallelo che utilizza un insieme base di onde con la possibilità di adoperare un metodo di scalatura lineare. Le onde formano un insieme base nello spazio reale distribuito su una maglia adattiva (due livelli di risoluzione nella nostra implementazione). Per rimuovere gli elettroni del guscio interno si utilizzano pseudopotenziali GTH (Goedecker-Teter-Hutter) o HGH (Hartwigsen-Goedecker-Hutter).

BigDFT è disponibile in ABINIT v5.5 e versioni superiori, ma è scaricabile anche in versione indipendente dal sito Web. È possibile simulare il risolutore di Poisson basato su un formalismo della funzione di Green, sistemi periodici, superfici e sistemi isolati con condizioni al contorno esplicite.
Il risolutore di Poisson può essere anche scaricato e utilizzato in maniera indipendente ed è integrato in ABINIT, Octopus e CP2K. Codice, tutorial e documentazione sono disponibili su BigDFT.

Installazione

È possibile scaricare e installare BigDFT su sistemi bare-metal o acquisire ed eseguire il container BigDFT container da (NVIDIA GPU Cloud).

L'installazione di applicazioni in ambienti HPC (High Performance Computing) può essere complessa. I container consentono di eseguire l'applicazione senza doverla installare sul sistema, semplificando la distribuzione della versione più recente dell'applicazione, ottimizzando le prestazioni.

L'esecuzione di un container BigDFT è molto semplice e la configurazione richiede pochi minuti.

Esecuzione dei processi

Una volta selezionato il container BigDFT da NGC, per eseguirlo sono disponibili quattro opzioni.

  • Esecuzione direttamente con il comando "run" di nvidia-docker
  • Esecuzione interattiva nel container
  • Esecuzione con Jupyter Notebook da un browser Web
  • Esecuzione con MPI/OpenMP/GPU

1. Esecuzione di BigDFT dalla riga di comando

Per eseguire il container BigDFT dall'interfaccia a riga di comando (CLI), occorrono i file di input nella directory corrente del sistema host. A questo punto, è possibile utilizzare il seguente comando, che esegue BigDFT e rende accessibile la directory di lavoro corrente come "/results” nel contenitore:

nvidia-docker run -it --rm -v $(pwd):/results -w /results

nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl bigdft

2. Esecuzione interattiva di BigDFT

In questo esempio, BigDFT verrà eseguito in maniera interattiva e verrà riprodotto un test FeHyb incluso nel container.

Per eseguire il container in maniera interattiva, utilizzare il seguente comando, che avvia il container e monta la directory corrente su /results in modo da renderla disponibile nel container. Vedere le opzioni -v del comando seguente per mappare directory di dati locale alla directory nel container.

nvidia-docker run -it --rm -v $(pwd):/results

nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl bash

Dopo l'avvio del container, ci si trova nella directory /. A questo punto, è possibile passare alla directory /docker/FeHyb/GPU in cui sono reperibili i file di input (input.yaml, posinp.xyz e psppar.Fe) ed eseguire il test:

cd /docker/FeHyb/GPU

bigdft

Dopo il calcolo, l'output è reperibile nel file log.yaml e i timing nel file time.yaml. Questi file possono essere copiati nella directory /results in modo da poterli salvare nella cartella corrente del sistema host.

3. Esecuzione con Jupyter Notebook

Il comando predefinito del container lancia nel container un server Jupyter, a cui è possibile accedere tramite qualunque browser Web, e consente l'esecuzione di sessioni interattive con BigDFT. A tal fine, basta reindirizzare la porta 8888 dal container su una porta qualunque del sistema host. Per accedere da un altro computer, questa porta deve essere aperta alle connessioni:

nvidia-docker run -p 8888:8888 -it --rm -v $(pwd):/results

nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl

In questo esempio, è possibile lanciare un browser e accedere al server da un browser Web con l'indirizzo localhost:8888

La password del server Jupyter in esecuzione è "bigdft". Un esempio del notebook è incluso in /ContainerXP/H2O-Polarizability.ipynb

Ulteriore documentazione è reperibile qui.

4. Esecuzione con MPI/OpenMPI/GPU

MVAPICH-GDR 2.3 è installato nel container ed è possibile lanciarlo con processi mpirun -np.

Per impostazione predefinita, OpenMP è attivato e utilizza tutti i core del sistema host. Per utilizzare l'interfaccia MPI (Message Passing Interface), occorre impostare OMP_NUM_THREADS su un valore inferiore (ad es.: ncores/nprocesses).

Esecuzione diretta con 4 processi e 8 thread OpenMP su un nodo a 32 core:

nvidia-docker run -it --rm -e OMP_NUM_THREADS=8 -v

$(pwd):/results -w /results nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl

mpirun -np 4 bigdft

Se sono disponibili varie GPU sul nodo, ogni processo MPI tenterà di utilizzare una GPU diversa, operando in ciclo se il numero di processi è superiore al numero di GPU (è consigliabile anche utilizzare l'opzione --ipc=host di docker run). Siccome occorre un'interfaccia MPI compatibile con NVIDIA® CUDA™ per il calcolo PBE0, potrebbe essere necessario anche impostare MV2_USE_CUDA a 1. L'abilitazione non è impostata in maniera predefinita, in quanto potrebbe rallentare le esecuzioni non GPU.

Per un'esecuzione con varie GPU con 4 processi e 32 core:

nvidia-docker run -it --rm --ipc=host -e MV2_USE_CUDA=1 -e OMP_NUM_THREADS=8 -v

$(pwd):/results -w /results nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl

mpirun -np 4 bigdft

Configurazione di test

Il container BigDFT contiene i file di input per provare il funzionamento del software con accelerazione GPU o solo CPU:

nvidia-docker run -it --rm -v $(pwd):/results

nvcr.io/hpc/bigdft:cuda9-ubuntu1604-mvapich2_gdr-mkl bash

Dopo l'avvio del container, ci si trova nella directory /. A questo punto, è possibile passare alla directory /docker/FeHyb/GPU in cui sono reperibili i file di input (input.yaml, posinp.xyz e psppar.Fe) ed eseguire il test:

cd /ContainerXP/FeHyb/GPU

bigdft

cp log.yaml /results/log_gpu.yaml

cp time.yaml /results/time_gpu.yaml

cd /ContainerXP/FeHyb/NOGPU

bigdft

cp log.yaml /results/log_cpu.yaml

cp time.yaml /results/time_cpu.yaml

Il confronto tra le esecuzioni dovrebbe evidenziare un enorme miglioramento tra la versione CPU e quella GPU.

Per sfruttare al massimo le risorse del sistema host è possibile eseguire altri test. Una serie di test più completa è disponibile nella cartella /docker/H2O_32.

Per convalidare la correttezza dell'output, è possibile confrontare il file log.yaml con i file log.ref.yaml disponibili nelle varianti CPU delle cartelle di test. Per eseguire un confronto semplice, lanciare:

python /usr/local/bigdft/lib/python2.7/site-packages/fldiff_yaml.py -d log.yaml -r

./log.ref.yaml -t ./tols-BigDFT.yaml

L'output corretto dovrebbe essere:

Test succeeded: True

CONFIGURAZIONI DI SISTEMA CONSIGLIATE

Il container BigDFT è ottimizzato e collaudato in termini di affidabilità per l'esecuzione su sistemi basati su NVIDIA Pascal™ e NVIDIA Volta con CUDA 9 o versioni successive. Le applicazioni VMD (Visual Molecular Dynamics) e tutti i container di applicazioni HPC disponibili su NVIDIA GPU Cloud possono essere eseguite sui seguenti sistemi:

  • Workstation: basata su CPU NVIDIA Titan V e x86
  • Sistemi NVIDIA® DGX™
  • Cluster HPC con GPU Pascal/Volta, CUDA 9, CPU x86
  • Cloud (AWS, Google Cloud Platform e altri)

ACCEDI AI CONTAINER DI APPLICAZIONI ACCELERATE DA GPU
con NVIDIA GPU Cloud.