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

1. Introducción

Última actualización: 2022-04-25

Qué compilarás

En este codelab, implementarás un clúster de procesamiento 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 benchMEM, benchPEP o benchRIB.

Qué aprenderás

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

Qué necesitas

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 aparece 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 la nube con Acceso al SO. Obtén más información para agregar claves SSH a tu perfil de identidad de la nube.

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

Para 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 deseas usar esta imagen precompilada para ahorrar tiempo, puedes pasar a la siguiente sección.

Cuando ejecutas aplicaciones de investigación en Google Cloud, existen muchas opciones para instalar y, también, 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 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 Cloud Build de Gromacs 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 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. 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 considerar modificar el esquema del 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 a través de 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 Slurm instalado. Este clúster se implementará con nodos de procesamiento que tienen 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 de Gromacs:
cd ~/rcc-apps/gromacs/tf/slurm
  1. Crea y revisa un plan de Terraform. Configura 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. Revisa la nota que aparece 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.

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 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 determinará 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, 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 benchRIB

Gromacs es un software de investigación que se usa para simular la dinámica molecular 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 centran 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 unida en el átomo i debido al átomo j y 538199b3881cd305.png son las fuerzas debido a las 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 se proporcionó) incluye tres comparativas:

  1. benchMEM
  2. benchRIB
  3. benchPEP

Estas comparativas son del conjunto de comparativas de Gromacs gratuitas del Dr. Kutzner y son un conjunto estándar de simulaciones de dinámica molecular transitoria. Cada comparativa varía en la cantidad de átomos y la duración de la simulación. Las configuraciones relevantes para cada simulación se indican en la siguiente tabla.

Métrica / 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

Intervalo de tiempo / fs

2

4

2

Radios de corte / nm

1

1

1.2

Espacio entre cuadrículas 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 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 una secuencia de comandos de 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 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 está en proceso de aprovisionamiento. Una vez que se ejecute tu 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 intervalos de tiempo (con 4 intervalos 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, incluye información sobre el rendimiento de la simulación, además de registrar información de los solucionadores de partículas y PME. El contenido de gromacs.out contiene la salida estándar de gmx mdrun y debería ser 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.

Realiza una limpieza

Para evitar que se generen cargos en tu cuenta de Google Cloud por los recursos que usaste 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 BIEN, borra 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 su contenido. Si usaste un proyecto existente para este codelab, cuando lo borres, también se borrará cualquier otro trabajo que hayas realizado en el proyecto.
  • Se pierden los IDs personalizados de los proyectos. Cuando creaste este proyecto, es posible que hayas creado un ID del proyecto personalizado que desees usar 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 Administración de recursos
  2. En la lista de proyectos, elige 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.