Ejecuta simulaciones de dinámicas moleculares de Gromacs con algoritmos numéricos fluidos' Slurm-GCP

1. Introducción

Última actualización: 25/04/2022

Qué compilarás

En este codelab, implementarás un clúster de computación de alto rendimiento (HPC) con ajuste de escala automático en Google Cloud.Una implementación de Terraform crea este clúster con Gromacs instalado a través de Spack. El clúster se administrará con el programador de trabajos de Slurm. Cuando se cree el clúster, ejecutarás las comparativas benchMEM, benchPEP o benchRIB.

Qué aprenderá

  • Cómo implementar un clúster de HPC compatible con el programador de trabajos de Slurm
  • Cómo ejecutar simulaciones de dinámicas moleculares aceleradas por GPU con Gromacs en Google Cloud a través de un trabajo por lotes de Slurm

Requisitos

2. Configuración

Para completar este codelab , debes habilitar las APIs de Compute Engine y Cloud Build. Para habilitar las APIs de Compute Engine y Cloud Build, abre Cloud Shell y ejecuta los siguientes comandos. Recuerda reemplazar tu project-id por que se muestra a continuación.

gcloud config set project <PROJECT_ID>
gcloud services enable compute.googleapis.com
gcloud services enable cloudbuild.googleapis.com

Precaución: Si planeas usar SSH de terceros (p.ej., OpenSSH) para conectarte al clúster, asegúrate de conectar una clave SSH a tu perfil de identidad en la nube a través del Acceso al SO. Obtén más información para agregar claves SSH a tu perfil de Cloud Identity.

3. Crea una imagen de VM de GCP con Gromacs (opcional)

En este codelab, te proporcionamos una imagen precompilada, ya que el proceso de compilación puede tardar hasta 2 horas en instalar Gromacs y todas sus dependencias. Si quieres usar esta imagen precompilada para ahorrar tiempo, puedes pasar a la siguiente sección.

Cuando se ejecutan aplicaciones de investigación en Google Cloud, hay muchas opciones para instalarlas e implementarlas. En esta sección del codelab, crearás una imagen de máquina virtual basada en la imagen de VM slurm-gcp (CentOS7). Durante el proceso de creación, el compilador, todos los elementos las dependencias y se instalarán Gromacs.

La canalización de Gromacs Cloud Build en el repositorio de apps de RCC contiene las instrucciones necesarias para instalar Gromacs. El proceso de instalación usa Packer para implementar una VM que instala Spack, que, a su vez, instala el compilador GCC@9.2.0 y Gromacs@2021.2 con la aceleración de GPU habilitada.

  1. Abre Cloud Shell en GCP.
  2. Clona el repositorio FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Compilar la imagen con Google Cloud Build
cd rcc-apps
gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async

Puedes verificar el estado de tu proceso de compilación en el panel de Google Cloud Build.

El proceso de compilación puede tardar hasta dos horas. Para acelerar esto,puedes considerar modificar el esquema de tu archivo de configuración de compilación para cambiar el tipo de máquina y mejorar el rendimiento de la compilación. Esto se puede hacer con la variable de compilación _MACHINE_TYPE. Por ejemplo:

gcloud builds submit . --config=gromacs/cloudbuild.yaml --project=<PROJECT_ID> --async --substitutions=_MACHINE_TYPE=n2-standard-64

Cuando finalice la compilación, tendrás una imagen de VM disponible en tu proyecto de Google Cloud que puedes usar para implementar el clúster.

4. Implementa un clúster de HPC con ajuste de escala automático mediante Terraform

En esta sección, usarás Terraform para implementar un clúster de HPC con ajuste de escala automático, con el programador de trabajos de Slurm instalado. Este clúster se implementará con nodos de procesamiento que tendrán 8 CPU virtuales y 1 GPU Nvidia® Tesla V100.

  1. Abre Cloud Shell en GCP.
  2. Clona el repositorio FluidNumerics/rcc-apps
cd ~
git clone https://github.com/FluidNumerics/rcc-apps.git
  1. Cambia al directorio de Terraform gromacs:
cd ~/rcc-apps/gromacs/tf/slurm
  1. Crear y revisar un plan de Terraform Configura las variables de entorno GMX_NAME, GMX_PROJECT y GMX_ZONE para especificar el nombre del clúster, el proyecto de GCP y la zona en la que deseas realizar la implementación. Revisa la nota a continuación si no estás seguro
export GMX_PROJECT=<PROJECT_ID>
export GMX_ZONE=<ZONE> 
export GMX_NAME="gromacs" 
  1. Si creaste tu propia imagen de VM en la sección anterior de este codelab, también deberás configurar la variable de entorno GMX_IMAGE.

exportar GMX_IMAGE="projects/${GMX_PROJECT}/global/images/gromacs-gcp-foss-latest"

  1. Crea el plan con el comando make, que ejecutará terraform init && terraform plan.
make plan
  1. Implemente el clúster: El proceso de configuración solo tarda unos minutos, ya que Gromacs y sus dependencias vienen preinstalados en el clúster.
make apply
  1. Establece una conexión SSH al nodo login creado en el paso anterior. Puedes ver este nodo en el paso anterior (probablemente llamado gromacs-login0). Para ello, haz clic en el botón SSH junto a la lista de instancias de VM en el elemento de menú de la consola Compute Engine -> instancia de VM.

Opción: Este par de comandos de gcloud averiguará el nombre del nodo de acceso y establecerá una conexión SSH a él:

export CLUSTER_LOGIN_NODE=$(gcloud compute instances list --zones ${GMX_ZONE} --filter="name ~ .*login" --format="value(name)" | head -n1)
gcloud compute ssh ${CLUSTER_LOGIN_NODE} --zone ${GMX_ZONE}
  1. Una vez que te conectes al nodo de acceso, comprueba que Gromacs esté instalado para verificar la configuración del clúster.
$ spack find gromacs
==> In environment /apps/spack-pkg-env
==> Root specs
gromacs@2021.2 +cuda~mpi

==> 1 installed package
-- linux-centos7-x86_64 / gcc@9.2.0 -----------------------------
gromacs@2021.2
  1. Verifica que /opt/share/gromacs tenga el contenido que se indica a continuación.
$ ls /opt/share/gromacs/
benchMEM.tpr benchPEP-h.tpr benchPEP.tpr benchRIB.tpr

5. Ejecuta benchRIB Benchmark

Gromacs es un software de investigación que se usa para simular dinámicas moleculares y calcular estructuras moleculares bajo restricciones de minimización de energía. Las comparativas que se proporcionan en la imagen de VM para este codelab se enfocan en la dinámica molecular, la evolución de los sistemas atómicos.

En dinámica molecular, las posiciones, velocidades y aceleraciones de los átomos se simulan mediante las leyes de movimiento de Newton :

638fa1fba54c3874.png

donde vector de posición es la posición del átomo i, t es el tiempo, 72a717ea69626d54.png es la masa del átomo i y b5e52e17becb80ec.png es la fuerza no vinculada en el átomo i debido al átomo j, y 538199b3881cd305.png son las fuerzas debidas a interacciones unidas. Dadas la temperatura, la presión, las posiciones de los átomos y las velocidades de los átomos, se calculan las fuerzas y el sistema se integra numéricamente para obtener nuevas velocidades y posiciones de los átomos. Este proceso se repite para simular la dinámica molecular durante un período determinado.

La imagen de Gromacs (la que creaste o la que proporcionaste) incluye tres comparativas

  1. benchMEM
  2. benchRIB
  3. benchPEP

Estas comparativas son del estudio Dr. Conjunto de comparativas de Free Gromacs de Kutzner y es un conjunto estándar de simulaciones de dinámicas moleculares transitorias. Cada comparativa varía en la cantidad de átomos y la duración de la simulación. En la siguiente tabla, se muestran los parámetros de configuración relevantes para cada simulación.

Métrica o comparativa

benchMEM

benchRIB

benchPEP

Cantidad de átomos

81.743

2.136.412

12.495.503

Tamaño del sistema / nm

10,8 x 10,2 x 9,6

31,2 x 31,2 x 31,2

50.0 x 50.0 x 50.0

Paso de tiempo / fs

2

4

2

Radio de corte / nm

1

1

1.2

Espaciado de cuadrícula de PME / nm

0.12

0,135

0.16

Para ejecutar la comparativa, enviarás un trabajo por lotes de Slurm. De forma predeterminada, la secuencia de comandos por lotes proporcionada ejecuta las comparativas benchRIB. Las presentaciones de entrada que definen la configuración para las comparativas proporcionadas se incluyen en la imagen de VM de Gromacs en /opt/share/gromacs. Además, hay una secuencia de comandos Bash de ejemplo para ejecutar Gromacs disponible en /opt/share.

Para esta sección, debes establecer una conexión SSH al nodo login del clúster.

  1. Envía un trabajo por lotes con el comando sbatch
$ sbatch --ntasks=1 --cpus-per-task=8 --gres=gpu:1 --out=gromacs.out /opt/share/gromacs_bench.sh

Esto pondrá en cola el trabajo para su ejecución y Slurm te aprovisionará un nodo de procesamiento. Cuando ejecutes sinfo, verás que un nodo de procesamiento tiene el estado alloc#, lo que significa que está asignado a tu trabajo, pero está en proceso de aprovisionamiento. Una vez que se esté ejecutando el trabajo, el nodo se establecerá en el estado alloc.

$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
gromacs*     up   infinite      1 alloc# gromacs-compute-0-0
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
                 2   gromacs gromacs_      joe  R       0:02      1 gromacs-compute-0-0
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
gromacs*     up   infinite      1  alloc gromacs-compute-0-0

Espera a que se complete el trabajo. La comparativa predeterminada (benchRIB) simula alrededor de 8 millones de átomos y está configurada para ejecutar 5000 pasos de tiempo (con 4 pasos de tiempo/fs) y completar en aproximadamente 6 minutos. Puedes supervisar el estado de tu trabajo con el siguiente comando:

watch squeue

Cuando tu trabajo desaparezca de la cola, puedes salir con Ctrl-C.

  1. Cuando se complete el trabajo, deberías ver un directorio llamado run/ que contenga el resultado de la simulación (en run/MEM) y un archivo de registro en tu directorio actual llamado gromacs.out. El directorio run/MEM contiene dos archivos ener.edr y md.log. El archivo ener.edr almacena las energías, la temperatura, la presión, el tamaño del cuadro, la densidad y los viriales del sistema en un formato binario portátil. Como sugiere la extensión, el archivo md.log contiene registros de la simulación de Gromacs y, además, incluye información sobre el rendimiento de la simulación, además de la información de registro de los solucionadores de partículas y PME. El contenido de gromacs.out incluye un resultado estándar de gmx mdrun y debería verse similar a lo que se muestra a continuación.
$ tail -n9 gromacs.out
step 5000, remaining wall clock time:     0 s          
               Core t (s)   Wall t (s)        (%)
       Time:     3085.342      385.683      800.0
                 (ns/day)    (hour/ns)
Performance:        4.481        5.356

GROMACS reminds you: "I never thought of stopping, and I just hated sleeping. I can't imagine having a better life." (Barbara McClintock)

OK

6. Felicitaciones

En este codelab, creaste un clúster de HPC nativo de la nube con ajuste de escala automático y ejecutaste una simulación de dinámica molecular acelerada por GPU con Gromacs en Google Cloud.

Realice una limpieza

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que se usaron en este codelab, sigue estos pasos:

RECOMENDADO: Borra el clúster de HPC con Terraform

  1. Abre Cloud Shell y navega al directorio de ejemplo gromacs/tf/slurm
cd ~/rcc-apps/gromacs/tf/slurm
  1. Ejecuta make destroy para borrar todos los recursos.
make destroy

O, borrar el proyecto (más eficaz y destructivo)

La manera más fácil de eliminar la facturación es borrar el proyecto que creaste para el codelab.

Precaución: Borrar un proyecto tiene las siguientes consecuencias:

  • Se borra todo en el proyecto. Si usaste un proyecto existente para este codelab, cuando lo borres, también borrarás cualquier otro trabajo que hayas realizado en el proyecto.
  • Se pierden los ID personalizados de proyectos. Cuando creaste este proyecto, es posible que hayas creado un ID del proyecto personalizado que desees utilizar en el futuro. Para conservar las URL que utilizan el ID del proyecto, como una URL de appspot.com, borra los recursos seleccionados dentro del proyecto en lugar de borrar todo el proyecto.

Si planeas explorar varios codelabs y guías de inicio rápido, la reutilización de proyectos puede ayudarte a evitar exceder los límites de las cuotas del proyecto.

  1. En la consola de Cloud, ve a la página Administrar recursos. Ir a la página Administrar recursos
  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar c01e35138ac49503.png.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrarlo.