Instala apps en un clúster de Slurm en Compute Engine

Organízate con las colecciones Guarda y clasifica el contenido según tus preferencias.

En este instructivo, se muestra cómo instalar una app en un clúster de Slurm en Google Cloud para que la app esté disponible en el clúster incluso cuando el clúster tiene ajuste de escala automático. Una app se puede empaquetar como un archivo tar o como un RPM. En el instructivo, se muestra cómo instalar apps mediante cada tipo de archivo. En este instructivo, también se muestra cómo usar una secuencia de comandos para instalar diferentes versiones de Python.

Este documento es para administradores de clústeres de Slurm y se supone que tienen un conocimiento básico de lo siguiente:

  • Administración del sistema Linux
  • Uso de la línea de comandos
  • Slurm

En este instructivo, instalarás varias versiones de la misma app y crearás modulefiles a fin de usar las diferentes versiones de la app para trabajos distintos. Existen muchos casos de uso para instalar varias versiones:

  • Resultados de pruebas que se obtuvieron con una versión o la otra
  • Uso de un código que requiere una versión específica de una app

En este documento, también se muestra cómo usar módulos de entorno para que cualquier trabajo que se ejecute en el clúster pueda acceder a la app. Usarás un clúster de Slurm para ejecutar trabajos por lotes o trabajos de procesamiento paralelos.

En el siguiente diagrama, se ilustra la estructura de un clúster de Slurm implementado en Google Cloud.

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

Para programar trabajos en nodos de procesamiento de Compute Engine, debes acceder al nodo de acceso, también conocido como nodo principal. Los trabajos programados se ejecutan en uno o más nodos de procesamiento. Los nodos de procesamiento pueden ser nodos estáticos que siempre están en línea o nodos efímeros que se crean en respuesta a trabajos programados y, luego, se destruyen.

Cuando instalas apps en clústeres, la instalación debe cumplir con los siguientes requisitos:

  • Las instalaciones de software están disponibles en ambos tipos de nodos.
  • Hay varias versiones de la misma herramienta o biblioteca disponibles de forma simultánea.
  • Hay versiones diferentes del software disponibles en el clúster.

Para cumplir con estos requisitos, instala los paquetes de software en el servidor NFS del clúster.

Objetivos

  • Comprender los directorios principales y las apps activadas por NFS en un clúster de Slurm en Google Cloud
  • Instalar el software en el directorio de apps activadas por NFS
  • Configurar un archivo de módulo de entorno para los paquetes de software recién instalados
  • Instalar versiones diferentes de Python

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 califiquen 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 realizar una limpieza.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita la API de Compute Engine.

    Habilita la API

  5. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  6. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  7. Habilita la API de Compute Engine.

    Habilita la API

  8. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

    En la parte inferior de la consola de Google Cloud, 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 con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  9. En este instructivo, se supone que creaste un clúster de Slurm en Google Cloud o que tienes acceso a uno. Obtén más información sobre cómo implementar un clúster de Slurm en Google Cloud.

Instala apps

Cada clúster de Slurm en Google Cloud incluye un servidor NFS que exporta activaciones para los directorios /apps y /home. Según la implementación, el servidor NFS puede ejecutarse en lo siguiente:

Las activaciones /apps y /home están disponibles en todos los nodos del clúster, sin importar dónde se ejecute el servidor NFS.

Después de implementar el clúster, el directorio /apps en un clúster de Slurm en Google Cloud contiene los dos siguientes directorios:

  • /apps/modulefiles: Contiene los archivos para alterar o configurar las variables de entorno de shell.
  • /apps/slurm: Contiene todos los archivos y directorios asociados con la aplicación de administración de cargas de trabajo de Slurm.

Instala archivos tar en el directorio de apps

En los siguientes pasos, se muestra cómo instalar una app empaquetada como un archivo tar. Para este ejemplo, instalarás el compilador y el entorno de ejecución del lenguaje de programación Julia.

  1. En Cloud Shell, accede al nodo de acceso del clúster mediante SSH. Reemplaza cluster-name por el nombre del clúster.

    gcloud compute ssh cluster-name-login0
    sudo -i
    
  2. Crea un directorio /julia en el directorio /apps:

    mkdir /apps/julia
    
  3. Instala la última versión de Julia:

    wget https://julialang-s3.julialang.org/bin/linux/x64/1.3/julia-1.3.1-linux-x86_64.tar.gz
    mv julia-1.3.1-linux-x86_64.tar.gz /apps/julia
    cd /apps/julia
    tar zxf julia-1.3.1-linux-x86_64.tar.gz
    rm julia-1.3.1-linux-x86_64.tar.gz
    mv julia-1.3.1 1.3.1
    
  4. Instala la versión de asistencia a largo plazo (LTS) de Julia en el directorio /apps/julia:

    cd
    wget https://julialang-s3.julialang.org/bin/linux/x64/1.0/julia-1.0.5-linux-x86_64.tar.gz
    mv julia-1.0.5-linux-x86_64.tar.gz /apps/julia
    cd /apps/julia
    tar zxf julia-1.0.5-linux-x86_64.tar.gz
    rm julia-1.0.5-linux-x86_64.tar.gz
    mv julia-1.0.5 1.0.5
    

    Ahora hay dos versiones de Julia instaladas.

Instala los RPM en el directorio de apps

En los siguientes pasos, se muestra cómo instalar una app empaquetada como RPM. Para este ejemplo, instalarás el entorno de ejecución del contenedor Singularity.

  1. En Cloud Shell, accede al nodo de acceso del clúster mediante SSH:

    gcloud compute ssh cluster-name-login0
    sudo -i
    
  2. Crea un directorio /singularity en el directorio /apps:

    mkdir /apps/singularity
    
  3. Crea un directorio para la versión 3.5.3-1.1 de Singularity:

    mkdir /apps/singularity/3.5.3-1.1
    
  4. Obtén el RPM 3.5.3-1.1 de Singularity y descomprímelo:

    wget http://rpmfind.net/linux/opensuse/tumbleweed/repo/oss/x86_64/singularity-3.5.3-1.1.x86_64.rpm
    rpm2cpio singularity-3.5.3-1.1.x86_64.rpm | cpio -idmv
    rm singularity-3.5.3-1.1.x86_64.rpm
    

Usa módulos de entorno

El paquete de módulos de entorno simplifica la inicialización y la administración del entorno de shell cuando ejecutas un trabajo de Slurm. Crearás modulefiles que alteran o configuran variables de entorno de shell, por ejemplo, PATH o MANPATH. Se admiten todos los shells populares, así como algunos lenguajes de programación, incluidos Perl, Python y Ruby.

Usa el comando module para trabajar con el paquete de módulos de entorno. La variable de entorno MODULEPATH le indica al comando module dónde buscar modulefiles en el sistema. En un clúster de Slurm en Google Cloud, la variable de entorno MODULEPATH especifica los siguientes tres directorios:

  • /usr/share/Modules/modulefiles contiene los modulefiles que forman parte de la distribución del paquete de módulos de entorno.
  • /etc/modulefiles contiene el archivo de módulo openmpi-x86_64.
  • /apps/modulefiles contiene los modulefiles para cualquier app que instales en el clúster.

Tú decides cómo organizar los modulefiles para las apps que instalas en el directorio /apps/modulefiles. Te recomendamos crear un directorio para cada app que instales en /apps/modulefiles, y, luego, crear un modulefile para cada versión de la app en su directorio específico.

Crea un modulefile simple

Los modulefiles se escriben en el lenguaje de comando de herramienta (Tcl) y el programa de Tcl modulecmd.tcl los interpreta a través de la interfaz de usuario del módulo. Cuando usas Tcl, permites que los modulefiles manejen configuraciones complejas, pero la mayoría son bastante simples.

  1. En Cloud Shell, accede al nodo de acceso del clúster mediante SSH:

    gcloud compute ssh cluster-name-login0
    sudo -i
    
  2. Crea el archivo /apps/modulefiles/julia/1.0.5.

  3. En un editor de texto, abre el archivo 1.0.5 y pega lo siguiente:

    #%Module1.0#####################################################################
    ##
    ## modules julia/1.0.5.
    ##
    ## modulefiles/julia/1.0.5.
    ##
    proc ModulesHelp { } {
            global version modroot
            puts stderr "julia/1.0.5 - sets the environment for Julia 1.0.5"
    }
    module-whatis   "Sets the environment for using Julia 1.0.5"
    # for Tcl script use only
    set     topdir          /apps/julia/1.0.5
    set     version         1.0.5
    set     sys             linux86
    prepend-path    PATH            $topdir/bin
    prepend-path    MANPATH         $topdir/man
    

    Considera lo siguiente en el código:

    • La primera línea es una cookie mágica que indica la versión mínima del programa de Tcl modulecmd.tcl que se requiere para interpretar el archivo del modulefile.
    • El comando module help llama al procedimiento ModulesHelp para proporcionar información adicional sobre un modulefile.
    • El comando module-whatis define una string que se muestra en respuesta al comando module-whatis.
    • Los comandos set crean vinculaciones de variables Tcl entre el primer argumento y el segundo.
    • El prepend-path modifica la variable de entorno a la que se hace referencia en el primer argumento si antepones el valor especificado en el segundo argumento.

    Para obtener más información, consulta la documentación del modulefile.

Instala versiones de Python

Este paso es opcional. Sigue estos pasos si las apps que se ejecutan en el clúster requieren versiones personalizadas de Python o compilaciones de bibliotecas complejas.

Ejecuta la siguiente secuencia de comandos para instalar una versión de Python mediante la herramienta virtualenv. Esta secuencia de comandos crea una entrada de módulo llamada python2. Puedes modificar la secuencia de comandos para satisfacer las necesidades personalizadas de la configuración. Cuando usas virtualenv, el archivo ejecutable de Python y todas las bibliotecas se instalan en el directorio virtualenv. Esta configuración te permite inmovilizar un objeto binario distinto y una colección de bibliotecas para una app en particular.

En lugar de editar un módulo directamente, crea la siguiente secuencia de comandos bash.

  1. En Cloud Shell, accede al nodo de acceso del clúster mediante SSH:

    gcloud compute ssh cluster-name-login0
    
  2. Instala pip:

    curl https://bootstrap.pypa.io/get-pip.py | python -
    
  3. Instala los paquetes virtualenv, absl-py y google-cloud-storage:

    pip install virtualenv
    cd /apps
    virtualenv python2
    source ./python2/bin/activate
    pip install absl-py
    pip install google-cloud-storage
    
  4. Crea el modulefile /apps/modulefiles/python2:

    cat > /apps/modulefiles/python2 << "PYTHONEND"
    #%Module1.0#####################################################################
    ##
    ## python2 for Google modulefile
    ##
    proc ModulesHelp { } {
           global version modroot
    
           puts stderr "\n\tThis adds $modroot/* to several of the"
           puts stderr "\tenvironment variables."
           puts stderr "\n\tVersion $version\n"
    }
    
    module-whatis    "Runs Virtualenv for python. Included Google Cloud Storage.";
    
    # for Tcl script use only
    set    version        000
    set    modroot        /apps/python2
    
    if {[module-info mode] == "load"} {
       puts stdout "source /apps/python2/bin/activate;"
    } elseif {[module-info mode] == "remove"} {
       puts stdout "deactivate;"
    }
    
    PYTHONEND
    
  5. Agrega el módulo python2 al entorno:

    module load python2
    

    El trabajo de Slurm ahora puede usar Python 2.x.

Limpia

La manera más fácil de quitar 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 la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

¿Qué sigue?

  • Explora arquitecturas de referencia, diagramas, instructivos y prácticas recomendadas sobre Google Cloud. Consulta nuestro Cloud Architecture Center.