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 Slurm. Cuando se cree el clúster, ejecutarás las comparativas de benchMEM, benchPEP o benchRIB.

Qué aprenderás

  • Cómo implementar un clúster de HPC que admita el programador de trabajos de Slurm
  • Cómo ejecutar simulaciones de dinámica molecular aceleradas por GPU con Gromacs en Google Cloud usando un trabajo por lotes de Slurm

Lo que necesitarás

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 sustituir tu project-id por el 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 a tu clúster, asegúrate de adjuntar una clave SSH a tu perfil de identidad de Cloud con el acceso a SO. Obtén más información para agregar claves SSH a tu perfil de identidad de Cloud.

3. [OPCIONAL] Crea una imagen de VM de GCP con Gromacs

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 compilada previamente para ahorrar tiempo, puedes pasar a la siguiente sección.

Cuando ejecutas aplicaciones de investigación en Google Cloud, tienes muchas opciones para instalar y, luego, implementar tu aplicación. En esta sección del codelab, crearás una imagen de máquina virtual que se basa en la imagen de VM de slurm-gcp (CentOS7). Durante el proceso de creación, se instalarán el compilador, todas las dependencias de Gromacs y Gromacs.

La canalización de Gromacs Cloud Build en el repositorio de RCC Apps encapsula 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 por 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. Compila 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 este proceso,puedes 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

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

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

En esta sección, usarás Terraform para implementar un clúster de HPC con ajuste de escala automático y 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 cada uno.

  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 de gromacs:
cd ~/rcc-apps/gromacs/tf/slurm
  1. Crea y revisa un plan de Terraform. Establece las variables de entorno GMX_NAME, GMX_PROJECT y GMX_ZONE para especificar el nombre de tu clúster, tu proyecto de GCP y la zona en la que deseas realizar la implementación. Si no tienes certeza, revisa la siguiente nota.
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 establecer la variable de entorno GMX_IMAGE.

export 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 toma unos minutos, ya que Gromacs y sus dependencias vienen preinstalados en tu clúster.
make apply
  1. Establece una conexión SSH al nodo de acceso que creaste en el paso anterior. Puedes ver este nodo en el paso anterior (probablemente se llame gromacs-login0). Para ello, haz clic en el botón SSH que se encuentra 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 determinará el nombre del nodo de acceso y establecerá una conexión SSH con é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, para verificar la configuración del clúster, comprueba que Gromacs esté instalado.
$ 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 la comparativa de benchRIB

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

En la dinámica molecular, las posiciones, las velocidades y las aceleraciones de los átomos se simulan con 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 enlazada sobre el átomo i debido al átomo j y 538199b3881cd305.png son las fuerzas debidas a las interacciones enlazadas. Dadas la temperatura, la presión, las posiciones y las velocidades de los átomos, se calculan las fuerzas y se integra el sistema de forma numérica para obtener las nuevas posiciones y velocidades de los átomos. Este proceso se repite para simular la dinámica molecular durante un período determinado.

La imagen de Gromacs (ya sea la que creaste o la que se proporcionó) incluye tres comparativas.

  1. benchMEM
  2. benchRIB
  3. benchPEP

Estos parámetros de referencia provienen del conjunto de parámetros de referencia gratuitos de Gromacs del Dr. Kutzner y son un conjunto estándar de simulaciones transitorias de dinámica molecular. Cada benchmark varía en la cantidad de átomos y la duración de la simulación. En la siguiente tabla, se indican los parámetros de configuración pertinentes 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

Radios de corte (nm)

1

1

1.2

Espaciamiento de la 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 la comparativa de benchRIB. Los mazos de entrada que definen las configuraciones para las comparativas proporcionadas se incluyen en la imagen de VM de Gromacs en /opt/share/gromacs. Además, hay disponible un ejemplo de secuencia de comandos de Bash para ejecutar Gromacs en /opt/share.

Para esta sección, debes establecer una conexión SSH con el 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 aprovisionará un nodo de procesamiento para ti. Cuando ejecutes sinfo, verás que un nodo de procesamiento está en el estado alloc#, lo que significa que el nodo de procesamiento está asignado a tu trabajo, pero se encuentra en proceso de aprovisionamiento. Una vez que se ejecute 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 5,000 pasos de tiempo (con 4 pasos de tiempo/fs) y tardar alrededor de 6 minutos en completarse. Puedes supervisar el estado de tu trabajo con este 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 contiene 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 de la caja, 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 de la información de registro de los solucionadores de PME y de partícula a partícula, incluye información sobre el rendimiento de la simulación. El contenido de gromacs.out contiene la salida estándar de gmx mdrun y debería ser similar al 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.

Realiza una limpieza

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

RECOMENDACIÓN: 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 BIEN, borra el proyecto (la opción más eficaz y destructiva).

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 URLs que usan 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, selecciona el proyecto que deseas 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.