Implementa un clúster de Slurm en Compute Engine

En este instructivo, se muestra cómo implementar un clúster de Slurm en Compute Engine. El Administrador de recursos de Slurm es un administrador de recursos conocido que se usa en muchos centros de computación de alto rendimiento. Para ver un análisis de la terminología y los casos prácticos de la computación de alto rendimiento, consulta Usa clústeres para computación técnica a gran escala en la nube.

En el siguiente diagrama, se ilustra la configuración que crearás en este instructivo.

Diagrama de arquitectura que muestra un clúster de Slurm instalado en Compute Engine

Como administrador de la carga de trabajo del clúster, Slurm hace lo siguiente:

  • Asignar recursos (nodos de procesamiento) a los usuarios
  • Proporcionar una estructura para iniciar, ejecutar y supervisar el trabajo en los nodos
  • Administrar la cola de trabajos pendientes

La implementación desarrollada para este instructivo es una arquitectura de clúster simplificada que admite algunos usuarios que ejecutan una carga de trabajo de una sola app. Puedes usar otra configuración para implementaciones de cargas de trabajo múltiples, implementaciones de producción a gran escala e implementaciones híbridas que funcionan con clústeres locales o de múltiples nubes, pero tal configuración está fuera de los temas de esta página.

En este instructivo, interactuarás con el sistema mediante el nodo de acceso (principal). Después de implementar el clúster, te conectarás al nodo de acceso mediante SSH, instalarás las apps y usarás las herramientas de línea de comandos de Slurm para enviar trabajos de procesamiento. El programador de Slurm, que se ejecuta en el nodo del controlador, programa los trabajos en cola mediante la coincidencia de los recursos disponibles con los requisitos del trabajo y administra la ejecución de los trabajos en los nodos de procesamiento. El servidor NFS proporciona un espacio compartido común para los archivos.

Objetivos

  • Usar Cloud Deployment Manager para implementar un clúster de Slurm
  • Ejecutar un trabajo mediante Slurm
  • Consultar la información del clúster y supervisar los trabajos en ejecución en Slurm
  • Ajustar la escala de manera automática de los nodos para adaptarse a los parámetros y los requisitos del trabajo

Costos

En este instructivo, se usan los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud sean aptos para obtener una prueba gratuita.

Cuando finalices este instructivo, podrás borrar los recursos creados para evitar que se te siga facturando. Para obtener más información, consulta cómo hacer una limpieza.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página de selección de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  4. Habilita las API de Compute Engine and Deployment Manager.

    Habilita las API

  5. En Cloud Console, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de Cloud Console, se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell que tiene el SDK de Cloud preinstalado, incluida la herramienta de línea de comandos de gcloud, y valores ya establecidos para el proyecto actual. La inicialización de la sesión puede tomar unos minutos.

Implementa el clúster de Slurm

En esta sección, prepararás la configuración del clúster, usarás Deployment Manager para implementar el clúster de Slurm en Google Cloud y, luego, verificarás que esté en funcionamiento.

Prepara la configuración del clúster

  1. En Cloud Shell, clona el repositorio slurm-gcp de GitHub.

    git clone https://github.com/SchedMD/slurm-gcp.git
    
  2. Define las siguientes variables de entorno:

    export CLUSTER_DEPLOY_NAME="cluster-deployment-name"
    export CLUSTER_NAME="cluster-name"
    export CLUSTER_REGION="cluster-region"
    export CLUSTER_ZONE="cluster-zone"
    

    Reemplaza lo siguiente:

    • cluster-deployment-name: Es un nombre único para la implementación del clúster.
    • cluster-name: Es un nombre único para el clúster.
    • cluster-region: Es la región en la que implementas el clúster. Elige una región cerca de tu ubicación. Para obtener más información, consulta Regiones y zonas.
    • cluster-zone: Es la zona en la que implementas el clúster.
  3. En la carpeta slurm-gcp, copia el archivo slurm-cluster.yaml en el archivo ${CLUSTER_DEPLOY_NAME}.yaml:

    cd slurm-gcp
    cp slurm-cluster.yaml ${CLUSTER_DEPLOY_NAME}.yaml
    
  4. En un editor de texto, modifica el archivo ${CLUSTER_DEPLOY_NAME}.yaml para tu entorno. Usa los tipos definidos en el archivo slurm.jinja.schema, que especifican los valores predeterminados y permitidos para todas las propiedades de configuración, excepto el valor default_users. Realiza los siguientes cambios necesarios:

    • cluster_name: Cambia el nombre del clúster por cluster-name.
    • region y zone: Reemplaza por cluster-region y cluster-zone.
    • compute_machine_type: Si quieres usar un tipo de máquina diferente, cambia el valor compute_machine_type (opcional). Por ejemplo, si necesitas más memoria o más núcleos de CPU que los disponibles con la opción predeterminada n1-standard-2, elige n1-standard-4. Para obtener más información, consulta Tipos de máquinas.
    • vpc_net y vpc_subnet: Usa una red de nube privada virtual (VPC) y una subred de VPC existentes (opcional). Los requisitos de red y subred se describen en el archivo slurm.jinja.schema. Si no especificas valores, se crea una red o subred nueva para el clúster. Para obtener más información, consulta Redes de VPC.
  5. Guarda el archivo.

Implementa el clúster de Slurm mediante Deployment Manager

  1. En Cloud Shell, usa Deployment Manager para implementar el clúster en Google Cloud:

    gcloud deployment-manager deployments \
        --project="$(gcloud config get-value core/project)" \
        create $CLUSTER_DEPLOY_NAME \
        --config ${CLUSTER_DEPLOY_NAME}.yaml
    

    El resultado es similar al siguiente:

    The fingerprint of the deployment is VWVaIYX1mFpjv9UDhzalYQ==
    Waiting for create [operation-1582142432278-59ef33da8f6fa-f5785d68-21feb545]...done.
    Create operation operation-1582142432278-59ef33da8f6fa-f5785d68-21feb545 completed successfully.
    NAME                                   TYPE                   STATE       ERRORS  INTENT
    helloworld-all-internal-firewall-rule  compute.v1.firewall    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-compute-image               compute.v1.instance    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-compute1                    compute.v1.instance    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-compute2                    compute.v1.instance    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-controller                  compute.v1.instance    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-login1                      compute.v1.instance    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-router                      compute.v1.router      IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-slurm-network               compute.v1.network     IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-slurm-subnet                compute.v1.subnetwork  IN_PREVIEW  []      CREATE_OR_ACQUIRE
    helloworld-ssh-firewall-rule           compute.v1.firewall    IN_PREVIEW  []      CREATE_OR_ACQUIRE
    
  2. La configuración del clúster toma entre 5 y 10 minutos en completarse. Realiza un seguimiento del progreso de la configuración:

    gcloud compute ssh ${CLUSTER_NAME}-controller \
        --command "sudo journalctl -fu google-startup-scripts.service" \
        --zone $CLUSTER_ZONE
    

    Cuando la secuencia de comandos termina, el clúster de Slurm estará listo para usar. El resultado finaliza con la siguiente línea:

    Started Google Compute Engine Startup Scripts.
    
  3. Para dejar de ver la configuración, presiona Control+C.

Verifica que el clúster esté en funcionamiento

  1. En Cloud Shell, accede al nodo de acceso para verificar que el clúster esté listo:

    export CLUSTER_LOGIN_NODE=$(gcloud compute instances list \
        --zones ${CLUSTER_ZONE} \
        --filter="name ~ .*login." \
        --format="value(name)" | head -n1)
    gcloud compute ssh ${CLUSTER_LOGIN_NODE} \
        --zone $CLUSTER_ZONE
    

    El clúster está listo cuando el resultado es similar al siguiente:

                                     SSSSSSS
                                    SSSSSSSSS
                                    SSSSSSSSS
                                    SSSSSSSSS
                            SSSS     SSSSSSS     SSSS
                           SSSSSS               SSSSSS
                           SSSSSS    SSSSSSS    SSSSSS
                            SSSS    SSSSSSSSS    SSSS
                    SSS             SSSSSSSSS             SSS
                   SSSSS    SSSS    SSSSSSSSS    SSSS    SSSSS
                    SSS    SSSSSS   SSSSSSSSS   SSSSSS    SSS
                           SSSSSS    SSSSSSS    SSSSSS
                    SSS    SSSSSS               SSSSSS    SSS
                   SSSSS    SSSS     SSSSSSS     SSSS    SSSSS
              S     SSS             SSSSSSSSS             SSS     S
             SSS            SSSS    SSSSSSSSS    SSSS            SSS
              S     SSS    SSSSSS   SSSSSSSSS   SSSSSS    SSS     S
                   SSSSS   SSSSSS   SSSSSSSSS   SSSSSS   SSSSS
              S    SSSSS    SSSS     SSSSSSS     SSSS    SSSSS    S
        S    SSS    SSS                                   SSS    SSS    S
        S     S                                                   S     S
                    SSS
                    SSS
                    SSS
                    SSS
     SSSSSSSSSSSS   SSS   SSSS       SSSS    SSSSSSSSS   SSSSSSSSSSSSSSSSSSSS
    SSSSSSSSSSSSS   SSS   SSSS       SSSS   SSSSSSSSSS  SSSSSSSSSSSSSSSSSSSSSS
    SSSS            SSS   SSSS       SSSS   SSSS        SSSS     SSSS     SSSS
    SSSS            SSS   SSSS       SSSS   SSSS        SSSS     SSSS     SSSS
    SSSSSSSSSSSS    SSS   SSSS       SSSS   SSSS        SSSS     SSSS     SSSS
     SSSSSSSSSSSS   SSS   SSSS       SSSS   SSSS        SSSS     SSSS     SSSS
             SSSS   SSS   SSSS       SSSS   SSSS        SSSS     SSSS     SSSS
             SSSS   SSS   SSSS       SSSS   SSSS        SSSS     SSSS     SSSS
    SSSSSSSSSSSSS   SSS   SSSSSSSSSSSSSSS   SSSS        SSSS     SSSS     SSSS
    SSSSSSSSSSSS    SSS    SSSSSSSSSSSSS    SSSS        SSSS     SSSS     SSSS
    
  2. Para salir del clúster, presiona Control+D.

  3. Cuando el clúster esté listo, programa un trabajo para verificar que funcione de forma correcta. Este trabajo ejecuta el comando hostname en varios nodos del clúster.

    gcloud compute ssh ${CLUSTER_NAME}-login1 \
        --command 'sbatch -N2 --wrap="srun hostname"' --zone $CLUSTER_ZONE
    
    gcloud compute ssh ${CLUSTER_NAME}-login1 \
        --command 'cat slurm-*.out'  --zone $CLUSTER_ZONE
    

    El resultado es similar al siguiente:

    helloworld-compute1
    helloworld-compute2
    

    Ahora tienes un clúster en funcionamiento.

Realiza un ajuste de escala automático del clúster de Slurm

Cuando implementas un clúster de Slurm, especificas valores para las propiedades max_node_count y static_node_count. El valor max_node_count determina la cantidad máxima de nodos de procesamiento que ejecuta el clúster en un momento determinado. El valor static_node_count especifica la cantidad de nodos de procesamiento que están siempre en ejecución. De forma predeterminada, el archivo slurm-cluster.yaml establece max_node_count en 10 y static_node_count en 2.

La diferencia entre estos dos números, max_node_count - static_node_count, es la cantidad de nodos efímeros en el clúster. Los nodos efímeros se crean a pedido en respuesta a las solicitudes de programación de trabajos. Una vez que se completa el trabajo para el cual se crearon, los nodos se destruyen, a menos que el clúster pueda usarlos en la ejecución de otros trabajos. En Google Cloud, el mecanismo de ahorro de energía de Slurm escala de forma automática los clústeres mediante la creación de instancias de nodos efímeros solo cuando es necesario.

  1. En Cloud Shell, observa el recuento de nodos:

    sinfo
    

    El resultado es similar al siguiente:

    PARTITION AVAIL TIMELIMIT  NODES  STATE   NODELIST
    debug*    up    infinite   8      idle~   demo-compute[3-10]
    debug*    up    infinite   2      idle    demo-compute[1-2]
    

    El sufijo ~ en el descriptor idle de STATE en la primera línea del resultado indica que los 8 nodos efímeros están en modo de ahorro de energía.

  2. Para escalar de manera automática el clúster, crea 3 nodos efímeros:

    sbatch -N5 --wrap="srun hostname"
    

    El resultado es similar al siguiente:

    Submitted batch job JOB_ID
    
  3. Vuelve a observar el recuento de nodos:

    sinfo
    

    El resultado es similar al siguiente:

    PARTITION AVAIL  TIMELIMIT  NODES  STATE   NODELIST
    debug*    up     infinite   3      alloc#  demo-compute[3-5]
    debug*    up     infinite   5      idle~   demo-compute[6-10]
    debug*    up     infinite   2      idle    demo-compute[1-2]
    

    El sufijo # en el descriptor alloc de STATE en la primera línea del resultado indica que se crearon 3 nodos efímeros. Después de que se crean y se configuran los nodos adicionales, ejecutan el trabajo y, luego de una breve demora, se destruyen.

Realiza una limpieza

La manera más fácil de eliminar la facturación es borrar el proyecto de Cloud que creaste para el instructivo. Como alternativa, puedes borrar los recursos individuales.

Borra el proyecto

  1. En Cloud Console, 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 .
  3. En el cuadro de diálogo, escribe el ID del proyecto y haz clic en Cerrar para borrar el proyecto.

Borra el clúster de Slurm

  • Borra el clúster:

    gcloud deployment-manager deployments delete slurm
    

Próximos pasos

  • Prueba otras características de Google Cloud. Consulta nuestros instructivos.