Organización

Si te interesan los clústeres de entrenamiento de Gemini Enterprise Agent Platform, comunícate con tu representante de ventas para obtener acceso.

Los clústeres de entrenamiento de Gemini Enterprise Agent Platform 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 administración de clústeres y programación de trabajos de código abierto muy utilizado, conocido por su escalabilidad y tolerancia a errores.

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 framework 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 manejar 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, incluido cómo 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 partitions del objeto slurm_spec.

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

  • id: Es un identificador único de 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" ]
  }
]

Los trabajos enviados sin --partition se ejecutan en la partición predeterminada. Para especificar la partición predeterminada, establece default_partition_id en slurm_spec como el id de una de tus particiones. Si no lo configuras, la primera partición de la lista será la predeterminada.

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 debe 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 Gemini Enterprise Agent Platform te permiten establecer parámetros slurm.conf y cambiarlos en un clúster en ejecución. Consulta Mapas de configuración de Slurm.

Contabilidad, interrupción y prioridad

La contabilidad de Slurm está habilitada en todos los clústeres, por lo que puedes hacer un seguimiento del uso de recursos por trabajo, como el tiempo de CPU y la memoria. También puedes aplicar límites de contabilidad, ponderar la prioridad de los trabajos y habilitar la apropiación previa a través de config, como en la especificación del clúster de ejemplo. Para saber cómo funcionan, consulta la documentación de Slurm sobre contabilidad, el complemento de prioridad multifactor y la interrupción.

Secuencias de comandos de prólogo y epílogo

Puedes configurar secuencias de comandos de Bash personalizadas para que se ejecuten automáticamente al comienzo (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 de clúster

En el siguiente ejemplo, se muestra una configuración JSON para crear un clúster de entrenamiento. Puedes adaptar esta especificación a tus propias 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",
      "config": {
        "AccountingStorageEnforce": "associations,limits,qos",
        "PriorityType": "priority/multifactor",
        "PriorityWeightAge": "1000",
        "PriorityWeightFairshare": "10000",
        "PreemptType": "preempt/partition_prio",
        "PreemptMode": "REQUEUE",
        "PreemptExemptTime": "00:10:00"
      },
      "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

Cómo administrar un clúster en ejecución

Una vez que se cree tu 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 fila, 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 exclusión

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 Gemini Enterprise Agent Platform para atender solicitudes de inferencia en línea a gran escala.
  • Administra el ciclo de vida de tu modelo: Usa Model Registry de Gemini Enterprise Agent Platform para administrar, comparar y controlar las versiones de 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:
  • 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 ejecuciones frecuentes, deja el clúster activo para reducir el tiempo de inicio del trabajo.