stackhpc.openhpc

Estado de Construcción

stackhpc.openhpc

Este rol de Ansible instala paquetes y realiza configuraciones para proporcionar un clúster Slurm de OpenHPC v2.x.

Como rol, debe usarse desde un playbook, para el cual se presenta un ejemplo simple a continuación. Este enfoque significa que es totalmente modular sin suposiciones sobre las redes disponibles o cualquier característica del clúster, excepto por algunas convenciones de nombres de host. Cualquier sistema de archivos de clúster deseado u otra funcionalidad requerida se puede integrar libremente usando roles adicionales de Ansible u otros enfoques.

La imagen mínima para los nodos es una imagen GenericCloud de RockyLinux 8.

Variables del Rol

openhpc_extra_repos: Lista opcional. Definiciones de repositorios Yum adicionales a configurar, siguiendo el formato del módulo Ansible yum_repository. Las claves respetadas para cada elemento de la lista son:

  • name: Requerido
  • description: Opcional
  • file: Requerido
  • baseurl: Opcional
  • metalink: Opcional
  • mirrorlist: Opcional
  • gpgcheck: Opcional
  • gpgkey: Opcional

openhpc_slurm_service_enabled: booleano, si habilitar el servicio slurm correspondiente (slurmd/slurmctld).

openhpc_slurm_service_started: booleano opcional. Si iniciar los servicios slurm. Si se establece en falso, todos los servicios se detendrán. Por defecto se establece en openhpc_slurm_service_enabled.

openhpc_slurm_control_host: Cadena requerida. Nombre de host en el inventario de Ansible (y nombre de host corto) del controlador, por ejemplo, "{{ groups['cluster_control'] | first }}".

openhpc_slurm_control_host_address: Cadena opcional. Dirección IP o nombre a utilizar para openhpc_slurm_control_host, por ejemplo, para usar una interfaz diferente de la que se resuelve desde openhpc_slurm_control_host.

openhpc_packages: paquetes adicionales de OpenHPC a instalar.

openhpc_enable:

  • control: si habilitar el host de control
  • database: si habilitar slurmdbd
  • batch: si habilitar los nodos de cómputo
  • runtime: si habilitar el runtime de OpenHPC

openhpc_slurmdbd_host: Opcional. Dónde desplegar slurmdbd si estás usando este rol para desplegar slurmdbd, de lo contrario, dónde está ejecutándose un slurmdbd existente. Esto debería ser el nombre de un host en tu inventario. Establece esto en none para evitar que el rol gestione slurmdbd. Por defecto se establece en openhpc_slurm_control_host.

openhpc_slurm_configless: Opcional, por defecto falso. Si es verdadero, se utiliza el modo "sin configuración" de slurm.

openhpc_munge_key: Opcional. Definir una clave munge a utilizar. Si no se proporciona, se genera una, pero el openhpc_slurm_control_host debe estar en el play.

openhpc_login_only_nodes: Opcional. Si utiliza el modo "sin configuración", especifique el nombre de un grupo de Ansible que contenga nodos que son solo de inicio de sesión (es decir, no también nodos de control), si es necesario. Estos nodos ejecutarán slurmd para contactar al nodo de control para la configuración.

openhpc_module_system_install: Opcional, por defecto verdadero. Si instalar un sistema de módulos de entorno. Si es verdadero, se instalará lmod. Si es falso, puedes proporcionar tu propio sistema de módulos o prescindir de uno.

slurm.conf

openhpc_slurm_partitions: Opcional. Lista de una o más particiones slurm, por defecto []. Cada partición puede contener los siguientes valores:

  • groups: Si hay múltiples grupos de nodos que componen la partición, se puede definir aquí una lista de objetos de grupo. De lo contrario, se puede omitir groups y los siguientes atributos se pueden definir en el objeto de partición:

    • name: El nombre de los nodos dentro de este grupo.

    • cluster_name: Opcional. Un sobreescritura para la definición de nivel superior openhpc_cluster_name.

    • extra_nodes: Opcional. Una lista de definiciones de nodos adicionales, por ejemplo, para nodos en este grupo/partición no controlados por este rol. Cada elemento debe ser un diccionario, con claves/valores según la documentación de "CONFIGURACIÓN DEL NODO" para slurm.conf. Nota: la clave NodeName debe ser la primera.

    • ram_mb: Opcional. La RAM física disponible en cada nodo de este grupo (parámetro RealMemory de slurm.conf) en MiB. Esto se establece usando hechos de Ansible si no se define, equivalente a free --mebi total * openhpc_ram_multiplier.

    • ram_multiplier: Opcional. Un sobreescritura para la definición de nivel superior openhpc_ram_multiplier. No tiene efecto si ram_mb está establecido.

    • gres: Opcional. Lista de diccionarios que definen recursos genéricos. Cada diccionario debe definir:

      • conf: Una cadena con la especificación del recurso pero requiriendo el formato <name>:<type>:<number>, por ejemplo, gpu:A100:2. Nota: el type es una cadena arbitraria.
      • file: Una cadena con el Archivo (ruta a dispositivo(s)) para este recurso, por ejemplo, /dev/nvidia[0-1] para el ejemplo anterior.

      Nota: GresTypes deben establecerse en openhpc_config si esto se utiliza.

  • default: Opcional. Una bandera booleana que indica si esta partición es la predeterminada. Los ajustes válidos son YES y NO.

  • maxtime: Opcional. Un límite de tiempo específico de la partición siguiendo el formato del parámetro slurm.conf MaxTime. El valor por defecto es dado por openhpc_job_maxtime. El valor debe estar entre comillas para evitar conversiones de Ansible.

  • partition_params: Opcional. Mapeo de parámetros y valores adicionales para la configuración de particiones.

Para cada grupo (si se usa) o partición, cualquier nodo en un grupo de inventario de Ansible <cluster_name>_<group_name> se añadirá al grupo/partición. Nota que:

  • Los nodos pueden tener nombres de host arbitrarios pero deben estar en minúsculas para evitar una discrepancia entre el inventario y el nombre de host real.
  • Se asume que los nodos en un grupo son homogéneos en términos de procesador y memoria.
  • Un grupo de inventario puede estar vacío o faltar, pero si no lo está, el play debe contener al menos un nodo de él (usado para establecer la información del procesador).
  • Los nodos no pueden aparecer en más de un grupo.

openhpc_job_maxtime: Límite máximo de tiempo para trabajos, por defecto '60-0' (60 días). Ver el parámetro slurm.conf MaxTime para el formato. El valor por defecto es 60 días. El valor debe estar entre comillas para evitar conversiones de Ansible.

openhpc_cluster_name: nombre del clúster.

openhpc_config: Opcional. Mapeo de parámetros y valores adicionales para slurm.conf. Nota: estos sobrescribirán cualquier cosa incluida en templates/slurm.conf.j2.

openhpc_ram_multiplier: Opcional, por defecto 0.95. Multiplicador utilizado en el cálculo: total_memory * openhpc_ram_multiplier al establecer RealMemory para la partición en slurm.conf. Puede ser sobrescrito en base a cada partición utilizando openhpc_slurm_partitions.ram_multiplier. No tendrá efecto si openhpc_slurm_partitions.ram_mb está establecido.

openhpc_state_save_location: Opcional. Ruta absoluta para el estado del controlador de Slurm (parámetro slurm.conf StateSaveLocation)

Contabilidad

Por defecto, no se configura almacenamiento de contabilidad. Los clústeres OpenHPC v1.x y OpenHPC v2.0 sin actualizar soportan almacenamiento de contabilidad basado en archivos que se puede seleccionar configurando la variable del rol openhpc_slurm_accounting_storage_type a accounting_storage/filetxt1. La contabilidad para clústeres OpenHPC v2.1 y OpenHPC v2.0 actualizados requiere el demonio de base de datos de Slurm, slurmdbd (aunque la finalización de trabajos puede ser una alternativa limitada, ver abajo. Para habilitar la contabilidad:

  • Configura un servidor mariadb o mysql como se describe en la documentación de contabilidad de slurm en uno de los nodos de tu inventario y establece openhpc_enable.database a true para este nodo.
  • Establece openhpc_slurm_accounting_storage_type a accounting_storage/slurmdbd.
  • Configura las variables para slurmdbd.conf a continuación.

El rol se encargará de configurar las siguientes variables por ti:

openhpc_slurm_accounting_storage_host: Dónde está en funcionamiento el servicio de almacenamiento de contabilidad, es decir, dónde está funcionando slurmdbd.

openhpc_slurm_accounting_storage_port: Qué puerto usar para conectarse al almacenamiento de contabilidad.

openhpc_slurm_accounting_storage_user: Nombre de usuario para autenticarse con el almacenamiento de contabilidad.

openhpc_slurm_accounting_storage_pass: Clave de munge o contraseña de la base de datos a utilizar para autenticarse.

Para personalización más avanzada o para configurar otro tipo de almacenamiento, es posible que desees modificar manualmente estos valores.

Contabilidad de trabajos

Esto es en gran medida redundante si estás usando el complemento de contabilidad anterior, pero te dará datos básicos de contabilidad, como los tiempos de inicio y finalización. Por defecto, no se configura contabilidad de trabajos.

openhpc_slurm_job_comp_type: Mecanismo de registro para la contabilidad de trabajos. Puede ser uno de jobcomp/filetxt, jobcomp/none, jobcomp/elasticsearch.

openhpc_slurm_job_acct_gather_type: Mecanismo para recopilar datos de contabilidad de trabajos. Puede ser uno de jobacct_gather/linux, jobacct_gather/cgroup y jobacct_gather/none.

openhpc_slurm_job_acct_gather_frequency: Período de muestreo para la contabilidad de trabajos (segundos).

openhpc_slurm_job_comp_loc: Ubicación para almacenar los registros de contabilidad de trabajos. Depende del valor de openhpc_slurm_job_comp_type, por ejemplo, para jobcomp/filetxt representa una ruta en disco.

slurmdbd.conf

Las siguientes opciones afectan a slurmdbd.conf. Consulta la documentación de slurm para más detalles. Necesitarás configurar estas variables si has establecido openhpc_enable.database en true.

openhpc_slurmdbd_port: Puerto en el que slurmdb escuchará, por defecto 6819.

openhpc_slurmdbd_mysql_host: Nombre de host o IP donde se está ejecutando mariadb, por defecto openhpc_slurm_control_host.

openhpc_slurmdbd_mysql_database: Base de datos a utilizar para contabilidad, por defecto slurm_acct_db.

openhpc_slurmdbd_mysql_password: Contraseña para autenticarse con la base de datos. Debes establecer esta variable.

openhpc_slurmdbd_mysql_username: Nombre de usuario para autenticarse con la base de datos, por defecto slurm.

Ejemplo de Inventario

Y un inventario de Ansible como este:

[openhpc_login]
openhpc-login-0 ansible_host=10.60.253.40 ansible_user=centos

[openhpc_compute]
openhpc-compute-0 ansible_host=10.60.253.31 ansible_user=centos
openhpc-compute-1 ansible_host=10.60.253.32 ansible_user=centos

[cluster_login:children]
openhpc_login

[cluster_control:children]
openhpc_login

[cluster_batch:children]
openhpc_compute

Ejemplos de Playbooks

Para desplegar, crea un playbook que se vea así:

---
- hosts:
  - cluster_login
  - cluster_control
  - cluster_batch
  become: yes
  roles:
    - role: openhpc
      openhpc_enable:
        control: "{{ inventory_hostname in groups['cluster_control'] }}"
        batch: "{{ inventory_hostname in groups['cluster_batch'] }}"
        runtime: true
      openhpc_slurm_service_enabled: true
      openhpc_slurm_control_host: "{{ groups['cluster_control'] | first }}"
      openhpc_slurm_partitions:
        - name: "compute"
      openhpc_cluster_name: openhpc
      openhpc_packages: []
...

1 Slurm 20.11 eliminó accounting_storage/filetxt como opción. Esta versión de Slurm fue introducida en OpenHPC v2.1, pero los repos de OpenHPC son comunes a todas las versiones de OpenHPC v2.x.

Acerca del proyecto

This role provisions an exisiting cluster to support OpenHPC control and batch compute functions and installs necessary runtime packages.

Instalar
ansible-galaxy install stackhpc.openhpc
Licencia
apache-2.0
Descargas
1.8k
Propietario
StackHPC develops OpenStack capabilities for research computing use cases. Through extensive experience, we understand HPC and cloud.