Compartir a través de


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. Un clúster de PBS Professional (PBS Pro) tiene dos partes principales: el nodo "master", que ejecuta el software en un sistema de archivos compartido y los nodos "execute", que montan ese sistema de archivos 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 definición en CycleCloud produce 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 de matriz de nodos mediante qsub -l nodearray=highmem -- /bin/hostname, CycleCloud agrega nodos a la matriz de nodos llamada 'highmem'. Si no existe dicho "nodearray", el trabajo permanece inactivo.

Del mismo modo, si se especifica un recurso de tipo de máquina en el que se especifica un envío de trabajo, por ejemplo, qsub -l machinetype:Standard_L32s_v2 my-job.sh, CycleCloud escala automáticamente el "Standard_L32s_v2" en el elemento de la matriz de nodos "execute" (predeterminado). Si ese tipo de máquina no está disponible en la matriz de nodos "execute", el trabajo permanece 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 escala automáticamente solo si las máquinas “Standard_HB60rs” se especifican en la matriz de nodos “hpc”.

Agregar colas adicionales asignadas a matrices de nodos

En los 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 la siguiente matriz de nodos "gpu" se define 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:

Como se muestra en el ejemplo, la definición de cola empaqueta todas las máquinas virtuales de la cola en un único conjunto de escalado de máquinas virtuales para admitir trabajos de MPI. Para definir la cola para trabajos en serie y permitir varios conjuntos de escalado de máquinas virtuales, establezca ungrouped = true tanto 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 (PBS Pro) 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 un nodo puede ejecutar, este valor tiene como valor predeterminado el número de CPU de una máquina determinada. Puede invalidar este valor en casos en los que no ejecute trabajos basados en cpu, sino en memoria, GPU, etc.
pbspro.slot_type El nombre del tipo de ranura que proporciona un nodo. El valor predeterminado es "execute". Cuando un trabajo está etiquetado con el recurso slot_type=<type> fijo, ese trabajo solo se ejecuta en una máquina del mismo tipo de ranura. Permite crear configuraciones de software y hardware diferentes por nodo y asegurarse de que un trabajo adecuado esté siempre programado en el tipo correcto de nodo.
pbspro.version Valor predeterminado: '18.1.3-0'. Esta es actualmente la versión predeterminada y solo la opción para instalar y ejecutar. Esta es actualmente la versión predeterminada y la única opción. En el futuro se pueden admitir más versiones del software PBS Pro.

Conexión de PBS con CycleCloud

CycleCloud administra los 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 agente azpbs 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 Ubicación Descripción
Configuración de escalabilidad automática autoscale.json Configuración del escalado automático, mapa de recursos, información de acceso de CycleCloud
Registro de escalabilidad automática autoscale.log Registro principal de subprocesos 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 de máscaras de registro y ubicaciones de archivos

Definición de recursos de OpenPBS

Este proyecto permite la asociación general de recursos de OpenPBS con recursos de máquina virtual de Azure a través del proyecto cyclecloud-pbspro (azpbs). La relación de recursos está definida en autoscale.json. Los recursos predeterminados definidos con la plantilla de clúster que enviamos son

{"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 se 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 comparando el valor de los requisitos de recursos de trabajo con los recursos de nodo.

Actualmente, el tamaño del disco está codificado de forma dura 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 los trabajos paralelos y en serie de manera diferente en los clústeres de OpenPBS. La expansión de trabajos se colocará en nodos que forman parte del mismo grupo de selección de ubicación. El grupo de colocación tiene una plataforma particular (VirtualMachineScaleSet con SinglePlacementGroup=true) y CycleCloud administra un grupo de colocación con nombre para cada conjunto de nodos extendidos. Use el recurso group_id de PBS para este nombre de grupo de selección de colocación.

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

Instalación del agente openPBS de CycleCloud azpbs

El clúster de OpenPBS CycleCloud administra la instalación y configuración del agente en el nodo de servidor. La preparación incluye la configuración de recursos, colas y enlaces de PBS. También se puede realizar una instalación con script 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 detención automática en los planificadores.

Atributo Descripción
cyclecloud.cluster.autoscale.stop_enabled ¿Está habilitado el autostop en este nodo? [verdadero/falso]
cyclecloud.cluster.autoscale.tiempo_inactivo_después_de_tareas Cantidad de tiempo (en segundos) que un nodo permanece inactivo después de completar los trabajos antes de ser reducido de escala.
cyclecloud.cluster.autoscale.idle_time_before_jobs Cantidad de tiempo (en segundos) que un nodo permanece inactivo tras completar trabajos antes de ser reducido.

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.