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.