Organización

Si te interesan los clústeres de entrenamiento de Vertex AI, comunícate con tu representante de ventas para obtener acceso.

Los clústeres de entrenamiento de Vertex AI usan Simple Linux Utility for Resource Management (Slurm) como el orquestador para administrar y programar trabajos en tu clúster.

Slurm es un sistema de código abierto muy utilizado para la administración de clústeres y la programación de trabajos, conocido por su escalabilidad y tolerancia a fallas.

Funciones clave de Slurm

  • Slurm asigna un conjunto de nodos de procesamiento para el uso exclusivo de un trabajo específico durante un período definido. Esto garantiza que un trabajo tenga acceso exclusivo a los recursos que necesita para ejecutarse sin interferencias.
  • Slurm proporciona un marco de trabajo para administrar el ciclo de vida completo de un trabajo, desde el envío y la ejecución hasta la supervisión y la finalización. Este sistema está diseñado específicamente para controlar trabajos paralelos que se ejecutan en un conjunto de nodos asignados.
  • Slurm mantiene una cola de trabajos pendientes y usa un sofisticado motor de priorización para arbitrar el acceso a los recursos de procesamiento. Al tener en cuenta factores como el tamaño del trabajo, la prioridad del usuario y el tiempo de espera, este sistema garantiza un uso justo y eficiente de los recursos en todo el clúster.

Configuración básica del clúster

Antes de ejecutar trabajos, debes definir la estructura fundamental de tu clúster de Slurm. En esta sección, se detallan los parámetros de configuración esenciales, incluida la forma de organizar los nodos de procesamiento en particiones, especificar un grupo de nodos de acceso dedicados y configurar un directorio principal compartido para tus usuarios.

Particiones

Las particiones agrupan los nodos en conjuntos lógicos, lo que puede ser útil para administrar diferentes tipos de máquinas o niveles de acceso. Se definen como una lista dentro del campo de particiones del slurm_spec.

Cada objeto de partición tiene los siguientes campos obligatorios:

  • id: Es un identificador único para la partición.
  • node_pool_ids: Es una lista que contiene los IDs de uno o más grupos de nodos que pertenecen a esta partición.

Por ejemplo:

"partitions": [
  {
    "id": "a4",
    "node_pool_ids": [ "a4" ]
  }
]

Nodos de acceso

El grupo de nodos de acceso proporciona nodos dedicados que sirven como punto de entrada principal para que los usuarios interactúen con el clúster. El campo login_node_pool_id especifica el identificador único de este grupo.

Por ejemplo:

"login_node_pool_id": "login"

Almacenamiento del directorio principal

El campo home_directory_storage especifica la instancia de Filestore que se activará como el directorio /home en todos los nodos del clúster. Esto proporciona un directorio principal compartido y persistente para todos los usuarios.

Debes proporcionar el nombre completo del recurso de la instancia de Filestore para este valor.

Por ejemplo:

"home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_NAME"

Configuración avanzada de Slurm

Los clústeres de entrenamiento de Vertex AI te permiten personalizar un conjunto selecto de parámetros de slurm.conf, pero ten en cuenta que estos parámetros solo se pueden configurar durante la creación inicial del clúster y no se pueden cambiar después.

Contabilidad

Los clústeres de entrenamiento de Vertex AI te permiten usar funciones de contabilidad integradas para hacer un seguimiento del uso de recursos dentro de tu clúster. Para obtener una guía completa sobre cómo supervisar métricas como el tiempo de CPU específico del trabajo y el uso de memoria, consulta la documentación oficial de contabilidad de Slurm.

Parámetro Valor Ejemplo
AccountingStorageEnforce Cadenas separadas por comas associations,limits,qos

Interrupción y prioridad

Para administrar cómo se programan y priorizan los trabajos, los clústeres de entrenamiento de Vertex AI te permiten configurar la preferencia de trabajos de Slurm. La expulsión anticipada funciona con el complemento de prioridad multifactor para determinar si se deben pausar los trabajos en ejecución para dar lugar a trabajos de mayor prioridad.

Para obtener una descripción general conceptual completa, revisa la documentación oficial de Slurm sobre el complemento de prioridad multifactor y la preemption.

Parámetros de preferencia

Parámetro Valor Ejemplo
PREEMPT_TYPE String preempt/partition_prio
PREEMPT_MODE Cadenas separadas por comas SUSPEND,GANG
PREEMPT_EXEMPT_TIME String 00:00:00

Parámetros de prioridad

Parámetro Valor Ejemplo
PRIORITY_TYPE String priority/multifactor
PRIORITY_WEIGHT_AGE Número entero 0
PRIORITY_WEIGHT_ASSOC Número entero 0
PRIORITY_WEIGHT_FAIRSHARE Número entero 0
PRIORITY_WEIGHT_JOB_SIZE Número entero 0
PRIORITY_WEIGHT_PARTITION Número entero 0
PRIORITY_WEIGHT_QOS Número entero 0
PRIORITY_WEIGHT_TRES Cadenas separadas por comas cpu=100,mem=150

Secuencias de comandos de prólogo y epílogo

Puedes configurar secuencias de comandos de Bash personalizadas para que se ejecuten automáticamente al inicio (prólogo) y al final (epílogo) de cada trabajo con los siguientes campos:

  • prolog_bash_scripts: Es una lista de cadenas, en la que cada cadena contiene el contenido completo de una secuencia de comandos de Bash que se ejecutará antes de que comience el trabajo.
  • epilog_bash_scripts: Es una lista de cadenas, en la que cada cadena contiene el contenido completo de una secuencia de comandos de Bash que se ejecutará después de que se complete el trabajo.

Esto es útil para configurar un entorno de trabajo único o realizar tareas de limpieza automatizadas.

Ejemplo de especificación del clúster

En el siguiente ejemplo, se muestra una configuración JSON completa para crear un clúster de entrenamiento. Puedes adaptar esta especificación a tus necesidades.

{
  // ... other cluster configurations ...
  "orchestratorSpec": {
    "slurmSpec": {
      "partitions": [
        {
          "id": "a4",
          "node_pool_ids": ["a4"]
        }
      ],
      "login_node_pool_id": "login",
      "home_directory_storage": "projects/PROJECT_ID/locations/REGION-ZONE/instances/FILESTORE_INSTANCE_ID",
      "accounting": {
        "accounting_storage_enforce": "ACCOUNTING_STORAGE_ENFORCE"
      },
      "scheduling": {
        "priority_type": "PRIORITY_TYPE",
        "priority_weight_age";: PRIORITY_WEIGHT_AGE,
        "priority_weight_assoc": PRIORITY_WEIGHT_ASSOC,
        "priority_weight_fairshare": PRIORITY_WEIGHT_FAIRSHARE,
        "priority_weight_job_size": PRIORITY_WEIGHT_JOB_SIZE,
        "priority_weight_partition": PRIORITY_WEIGHT_PARTITION,
        "priority_weight_qos": PRIORITY_WEIGHT_QOS,
        "priority_weight_tres": "PRIORITY_WEIGHT_TRES",
        "preempt_type": "PREEMPT_TYPE",
        "preempt_mode": "PREEMPT_MODE",
        "preempt_exempt_time": "PREEMPT_EXEMPT_TIME"
      },
      "prolog_bash_scripts": [
        "#!/bin/bash\necho 'First prolog script running'",
        "#!/bin/bash\necho 'Second prolog script running'"
      ],
      "epilog_bash_scripts": [
        "#!/bin/bash\necho 'Epilog script running'"
      ]
      // ... other Slurm settings ...
    }
  }
}

Administración y operaciones de clústeres

Administra un clúster en ejecución

Una vez que se cree el clúster con la configuración de contabilidad y preferencia elegida, podrás usar las herramientas de línea de comandos de Slurm para administrar las cuentas de usuario y supervisar la programación de trabajos.

Administración de cuentas con sacctmgr

El comando sacctmgr es la herramienta principal para administrar la información de usuarios y cuentas en la base de datos de Slurm. Por ejemplo, para agregar un usuario nuevo a una cuenta y otorgarle acceso a una partición, ejecuta el siguiente comando:

sudo sacctmgr add User Accounts=<account> Partition=<partition> <user>

Para obtener una lista completa de todas las opciones de sacctmgr, consulta la documentación oficial de contabilidad de Slurm.

Cómo verificar la prioridad del trabajo

Para verificar los componentes de prioridad de cada trabajo en la cola, usa la utilidad sprio. Esto es útil para comprender por qué ciertos trabajos se programan para ejecutarse antes que otros.

Consulta la documentación de la utilidad sprio para obtener información detallada sobre su uso.

Ejemplos de interrupciones

La documentación oficial de Slurm proporciona varios ejemplos prácticos de diferentes estrategias de preferencia. Puedes encontrarlos en la página Slurm Preemption.

¿Qué sigue?

A continuación, nos enfocaremos en los pasos finales del ciclo de vida del aprendizaje automático: la administración, la implementación y la supervisión de los modelos entrenados.

  • Implementa tu modelo para la inferencia: Implementa tu modelo entrenado en un extremo de Vertex AI para atender solicitudes de inferencia en línea a gran escala.
  • Administra el ciclo de vida de tu modelo: Usa Vertex AI Model Registry para controlar las versiones, comparar y administrar tus modelos. Se puede configurar una canalización para registrar automáticamente un modelo nuevo después de un entrenamiento exitoso.
  • Supervisa las ejecuciones de la canalización y el rendimiento del modelo:
    • Supervisión de canalizaciones: Realiza un seguimiento del grafo de ejecución, los artefactos y el rendimiento de las ejecuciones de tu canalización para depurar problemas y optimizar tu orquestación.
    • Model Monitoring: Después de la implementación, configura la supervisión para detectar desvíos y anomalías en el rendimiento de la predicción del modelo, lo que ayuda a mantener la precisión del modelo con el tiempo.
  • Optimiza los costos y administra el ciclo de vida del clúster: Cuando uses canalizaciones automatizadas, administra el ciclo de vida del clúster teniendo en cuenta la frecuencia de ejecución.
    • Para las ejecuciones poco frecuentes, agrega un paso final a la canalización para borrar el clúster y ahorrar costos. Por lo general, esto implica crear un componente de canalización personalizado que llame a la función de eliminación.
    • Para las ejecuciones frecuentes, deja el clúster activo para reducir el tiempo de inicio del trabajo.