OpenPBS

OpenPBS se puede habilitar fácilmente en un clúster de CycleCloud modificando la "run_list" en la sección de configuración de la definición del clúster. Los dos componentes básicos de un clúster de PBS Professional son el nodo "maestro" que proporciona un sistema de archivos compartido en el que se ejecuta el software PBS Professional y los nodos "execute" que son los hosts que montan el sistema de archivos compartidos y ejecutan los trabajos enviados. Por ejemplo, un fragmento de código de plantilla de clúster simple puede tener el siguiente aspecto:

[cluster my-pbspro]

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[configuration]]]
    run_list = role[pbspro_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[configuration]]]
    run_list = role[pbspro_execute_role]

La importación e inicio de un clúster con la definición en CycleCloud producirá un único nodo "maestro". Los nodos de ejecución se pueden agregar al clúster mediante el cyclecloud add_node comando . Por ejemplo, para agregar 10 nodos de ejecución más:

cyclecloud add_node my-pbspro -t execute -c 10

Escalado automático basado en recursos de PBS

Cyclecloud mantiene dos recursos para expandir la funcionalidad de aprovisionamiento dinámico. Estos recursos son nodearray y machinetype.

Si envía un trabajo y especifica un recurso nodearray por qsub -l nodearray=highmem -- /bin/hostname , CycleCloud agregará nodos a nodearray denominado "highmem". Si no hay ningún elemento nodearray de este tipo, el trabajo permanecerá inactivo.

Del mismo modo, si se especifica un recurso machinetype que envía un trabajo, por ejemplo qsub -l machinetype:Standard_L32s_v2 my-job.sh, , CycleCloud escala automáticamente el "Standard_L32s_v2" en el nodo "execute" (valor predeterminado). Si ese tipo de máquina no está disponible en la matriz de nodos "execute", el trabajo permanecerá inactivo.

Estos recursos se pueden usar en combinación como:

qsub -l nodes=8:ppn=16:nodearray=hpc:machinetype=Standard_HB60rs my-simulation.sh

que se escalará automáticamente solo si se especifican las máquinas "Standard_HB60rs" una matriz de nodos "hpc".

Adición de colas adicionales asignadas a nodearrays

En clústeres con varias configuraciones de nodearrays, es habitual crear colas independientes para enrutar automáticamente los trabajos al tipo de máquina virtual adecuado. En este ejemplo, se supone que se ha definido la siguiente nodo "gpu" en la plantilla de clúster:

    [[nodearray gpu]]
    Extends = execute
    MachineType = Standard_NC24rs

        [[[configuration]]]
        pbspro.slot_type = gpu

Después de importar la plantilla de clúster e iniciar el clúster, se pueden ejecutar los siguientes comandos en el nodo de servidor para crear la cola "gpu":

/opt/pbs/bin/qmgr -c "create queue gpu"
/opt/pbs/bin/qmgr -c "set queue gpu queue_type = Execution"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.place = scatter"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu enabled = true"
/opt/pbs/bin/qmgr -c "set queue gpu started = true"

Nota:

La definición de cola anterior empaquetará todas las máquinas virtuales de la cola en un único conjunto de escalado de máquinas virtuales para admitir trabajos MPI. Para definir la cola para trabajos en serie y permitir varios conjuntos de escalado de máquinas virtuales, establezca ungrouped = true para resources_default y default_chunk. También puede establecer resources_default.place = pack si desea que el programador empaquete trabajos en máquinas virtuales en lugar de la asignación round robin de trabajos. Para obtener más información sobre el empaquetado de trabajos de PBS, consulte la documentación oficial de PBS Professional OSS.

Referencia de configuración profesional de PBS

A continuación se muestran las opciones de configuración específicas de PBS Professional que puede alternar para personalizar la funcionalidad:

Opciones de PBS Pro Descripción
pbspro.slots Número de ranuras de un nodo determinado que se va a notificar a PBS Pro. El número de ranuras es el número de trabajos simultáneos que puede ejecutar un nodo, este valor tiene como valor predeterminado el número de CPU de un equipo determinado. Puede invalidar este valor en los casos en los que no se ejecutan trabajos basados en cpu, sino en memoria, GPU, etc.
pbspro.slot_type Nombre del tipo de "ranura" que proporciona un nodo. El valor predeterminado es "execute". Cuando un trabajo se etiqueta con el recurso slot_type=<type>duro , ese trabajo solo se ejecutará en una máquina del mismo tipo de ranura. Esto le permite crear diferentes configuraciones de software y hardware por nodo y asegurarse de que un trabajo adecuado siempre está programado en el tipo correcto de nodo.
pbspro.version Valor predeterminado: '18.1.3-0'. Esta es la versión de PBS Professional para instalar y ejecutar. Actualmente es la opción predeterminada y solo . En el futuro se pueden admitir versiones adicionales del software PBS Professional.

Conexión de PBS con CycleCloud

CycleCloud administra clústeres de OpenPBS a través de un agente instalable denominado azpbs. Este agente se conecta a CycleCloud para leer configuraciones de clúster y máquina virtual y también se integra con OpenPBS para procesar eficazmente la información del trabajo y del host. Todas las azpbs configuraciones se encuentran en el autoscale.json archivo, normalmente /opt/cycle/pbspro/autoscale.json.

  "password": "260D39rWX13X",
  "url": "https://cyclecloud1.contoso.com",
  "username": "cyclecloud_api_user",
  "logging": {
    "config_file": "/opt/cycle/pbspro/logging.conf"
  },
  "cluster_name": "mechanical_grid",

Archivos importantes

El azpbs agente analiza la configuración de PBS cada vez que se llama : trabajos, colas y recursos. La información se proporciona en stderr y stdout del comando, así como en un archivo de registro, ambos en niveles configurables. Todos los comandos de administración de PBS (qcmd) con argumentos también se registran en el archivo.

Todos estos archivos se pueden encontrar en el directorio /opt/cycle/pbspro/ donde está instalado el agente.

Archivo Location Descripción
Configuración de escalado automático autoscale.json Configuración del escalado automático, mapa de recursos, información de acceso de CycleCloud
Registro de escalado automático autoscale.log Registro de subprocesos principal del agente, incluida la administración de hosts de CycleCloud
Registro de demanda demand.log Registro detallado para la coincidencia de recursos
qcmd Trace Log qcmd.log Registro de las llamadas del agente qcmd
Configuración de registro logging.conf Configuraciones para registrar máscaras y ubicaciones de archivos

Definición de recursos de OpenPBS

Este proyecto permite una asociación general de recursos de OpenPBS con recursos de máquina virtual de Azure a través del proyecto cyclecloud-pbspro (azpbs). Esta relación de recursos definida en autoscale.json.

Los recursos predeterminados definidos con la plantilla de clúster con la que se incluyen

{"default_resources": [
   {
      "select": {},
      "name": "ncpus",
      "value": "node.vcpu_count"
   },
   {
      "select": {},
      "name": "group_id",
      "value": "node.placement_group"
   },
   {
      "select": {},
      "name": "host",
      "value": "node.hostname"
   },
   {
      "select": {},
      "name": "mem",
      "value": "node.memory"
   },
   {
      "select": {},
      "name": "vm_size",
      "value": "node.vm_size"
   },
   {
      "select": {},
      "name": "disk",
      "value": "size::20g"
   }]
}

El recurso OpenPBS denominado mem equivale a un atributo de nodo denominado node.memory, que es la memoria total de cualquier máquina virtual. Esta configuración permite azpbs procesar una solicitud de recursos como -l mem=4gb , por ejemplo, comparando el valor de los requisitos de recursos de trabajo con los recursos de nodo.

Tenga en cuenta que el disco está codificado de forma dura actualmente en size::20g. Este es un ejemplo de control del tamaño de disco específico del tamaño de máquina virtual.

   {
      "select": {"node.vm_size": "Standard_F2"},
      "name": "disk",
      "value": "size::20g"
   },
   {
      "select": {"node.vm_size": "Standard_H44rs"},
      "name": "disk",
      "value": "size::2t"
   }

Escalado automático y conjuntos de escalado

CycleCloud trata la expansión y los trabajos en serie de forma diferente en los clústeres de OpenPBS. La expansión de trabajos se colocará en los nodos que forman parte del mismo grupo de selección de ubicación. El grupo de selección de ubicación tiene un significado de plataforma determinado (VirtualMachineScaleSet con SinglePlacementGroup=true) y CC administrará un grupo de selección de ubicación con nombre para cada conjunto de nodos distribuidos. Use el recurso group_id PBS para este nombre de grupo de selección de ubicación.

La hpc cola anexa el equivalente de mediante los valores predeterminados de -l place=scatter:group=group_id la cola nativa.

Instalación del agente OpenPBS de CycleCloud azpbs

El clúster de OpenPBS CycleCloud administrará la instalación y configuración del agente en el nodo del servidor. La preparación incluye la configuración de recursos, colas y enlaces de PBS. También se puede realizar una instalación con scripts fuera de CycleCloud.

# Prerequisite: python3, 3.6 or newer, must be installed and in the PATH
wget https://github.com/Azure/cyclecloud-pbspro/releases/download/2.0.5/cyclecloud-pbspro-pkg-2.0.5.tar.gz
tar xzf cyclecloud-pbspro-pkg-2.0.5.tar.gz
cd cyclecloud-pbspro

# Optional, but recommended. Adds relevant resources and enables strict placement
./initialize_pbs.sh

# Optional. Sets up workq as a colocated, MPI focused queue and creates htcq for non-MPI workloads.
./initialize_default_queues.sh

# Creates the azpbs autoscaler
./install.sh  --venv /opt/cycle/pbspro/venv

# Otherwise insert your username, password, url, and cluster name here.
./generate_autoscale_json.sh --install-dir /opt/cycle/pbspro \
                             --username user \
                             --password password \
                             --url https://fqdn:port \
                             --cluster-name cluster_name

azpbs validate

CycleCloud admite un conjunto estándar de atributos de escalado automático entre programadores:

Atributo Descripción
cyclecloud.cluster.autoscale.stop_enabled ¿Está habilitado el escalado automático en este nodo? [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs Cantidad de tiempo (en segundos) para que un nodo esté inactivo después de completar los trabajos antes de reducirse verticalmente.
cyclecloud.cluster.autoscale.idle_time_before_jobs Cantidad de tiempo (en segundos) para que un nodo esté inactivo antes de completar los trabajos antes de reducirse verticalmente.

Nota:

CycleCloud no admite la configuración de expansión con Open PBS.

Nota:

Aunque Windows es una plataforma open PBS compatible oficialmente, CycleCloud no admite la ejecución de Open PBS en Windows en este momento.