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.
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
- Accede a tu Cuenta de Google.
Si todavía no tienes una cuenta, regístrate para obtener una nueva.
-
En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.
- Habilita las API de Compute Engine and Deployment Manager.
-
En Cloud Console, activa 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
En Cloud Shell, clona el repositorio
slurm-gcp
de GitHub.git clone https://github.com/SchedMD/slurm-gcp.git
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.
En la carpeta
slurm-gcp
, copia el archivoslurm-cluster.yaml
en el archivo${CLUSTER_DEPLOY_NAME}.yaml
:cd slurm-gcp cp slurm-cluster.yaml ${CLUSTER_DEPLOY_NAME}.yaml
En un editor de texto, modifica el archivo
${CLUSTER_DEPLOY_NAME}.yaml
para tu entorno. Usa los tipos definidos en el archivoslurm.jinja.schema
, que especifican los valores predeterminados y permitidos para todas las propiedades de configuración, excepto el valordefault_users
. Realiza los siguientes cambios necesarios:cluster_name
: Cambia el nombre del clúster porcluster-name
.region
yzone
: Reemplaza porcluster-region
ycluster-zone
.compute_machine_type
: Si quieres usar un tipo de máquina diferente, cambia el valorcompute_machine_type
(opcional). Por ejemplo, si necesitas más memoria o más núcleos de CPU que los disponibles con la opción predeterminadan1-standard-2
, eligen1-standard-4
. Para obtener más información, consulta Tipos de máquinas.vpc_net
yvpc_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 archivoslurm.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.
Guarda el archivo.
Implementa el clúster de Slurm mediante Deployment Manager
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
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.
Para dejar de ver la configuración, presiona Control+C.
Verifica que el clúster esté en funcionamiento
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
Para salir del clúster, presiona
Control+D
.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.
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 descriptoridle
deSTATE
en la primera línea del resultado indica que los 8 nodos efímeros están en modo de ahorro de energía.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
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 descriptoralloc
deSTATE
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
- En Cloud Console, ve a la página Administrar recursos.
- En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
- En el diálogo, escribe el ID del proyecto y, luego, 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 funciones de Google Cloud. Consulta nuestros instructivos.