Comience con los scripts básicos del ciclo de vida proporcionados por HyperPod - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Comience con los scripts básicos del ciclo de vida proporcionados por HyperPod

En esta sección se explican todos los componentes del proceso básico de configuración de Slurm on con un HyperPod enfoque descendente. Comienza con la preparación de una solicitud de creación de HyperPod clústeres para ejecutarla y profundiza en la CreateCluster API estructura jerárquica hasta llegar a los scripts del ciclo de vida. Utilice los ejemplos de scripts de ciclo de vida que se proporcionan en el repositorio Awsome Distributed Training GitHub . Clona el repositorio ejecutando el siguiente comando.

git clone https://github.com/aws-samples/awsome-distributed-training/

Los scripts básicos del ciclo de vida para configurar un clúster de Slurm SageMaker HyperPod están disponibles en. 1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config

cd awsome-distributed-training/1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config

El siguiente diagrama de flujo muestra una descripción detallada de cómo se deben diseñar los scripts de ciclo de vida básicos. Las descripciones que aparecen debajo del diagrama y la guía de procedimientos explican cómo funcionan durante la HyperPod CreateCluster API llamada.

Un diagrama de flujo detallado de la creación de HyperPod clústeres y la estructura de los scripts del ciclo de vida.

Figura: Un diagrama de flujo detallado de la creación de HyperPod clústeres y la estructura de los scripts de ciclo de vida. (1) Las flechas discontinuas se dirigen al lugar en el que aparecen las casillas y muestran el flujo de preparación de los archivos de configuración y los scripts de ciclo de vida. Comienza con la preparación provisioning_parameters.json y el ciclo de vida de los scripts. Luego, se codifican lifecycle_script.py para una ejecución colectiva en orden. Y la ejecución del lifecycle_script.py script se realiza mediante el script on_create.sh shell, que se ejecutará en la terminal de la HyperPod instancia. (2) Las flechas continuas muestran el flujo principal de creación del HyperPod clúster y cómo se «invoca» o se «envía» a las casillas. on_create.shes obligatorio para la solicitud de creación de un clúster, ya sea en el formulario de solicitud de creación de un clúster de la interfaz de usuario de la consola create_cluster.json o en el formulario de solicitud de creación de un clúster. Tras enviar la solicitud, HyperPod ejecuta los scripts en CreateCluster API función de la información de configuración proporcionada en la solicitud y en los scripts del ciclo de vida. (3) La flecha punteada indica que la HyperPod plataforma crea instancias resource_config.json en el clúster durante el aprovisionamiento de los recursos del clúster. resource_config.jsoncontiene información sobre los recursos del HyperPod clúster, como el clústerARN, los tipos de instancias y las direcciones IP. Es importante tener en cuenta que debes preparar los scripts del ciclo de vida para que aparezcan en el resource_config.json archivo durante la creación del clúster. Para obtener más información, consulte la guía de procedimientos que aparece a continuación.

La siguiente guía de procedimientos explica lo que ocurre durante la creación HyperPod del clúster y cómo se diseñan los scripts del ciclo de vida básico.

  1. create_cluster.json— Para enviar una solicitud de creación de HyperPod clústeres, debe preparar un archivo de CreateCluster solicitud en JSON formato. En este ejemplo de mejores prácticas, asumimos que el archivo de solicitud tiene un nombrecreate_cluster.json. Escribe create_cluster.json para aprovisionar un HyperPod clúster con grupos de instancias. La mejor práctica es agregar la misma cantidad de grupos de instancias que la cantidad de nodos de Slurm que planeas configurar en el HyperPod clúster. Asegúrate de asignar nombres distintivos a los grupos de instancias que asignarás a los nodos de Slurm que planeas configurar.

    Además, debes especificar una ruta de depósito de S3 para almacenar todo el conjunto de archivos de configuración y scripts del ciclo de vida InstanceGroups.LifeCycleConfig.SourceS3Uri en el nombre del campo del formulario de CreateCluster solicitud, y especificar el nombre de archivo de un script de shell de punto de entrada (supongamos que lleva ese nombre). on_create.sh InstanceGroups.LifeCycleConfig.OnCreate

    nota

    Si utilizas el formulario de envío para crear un clúster en la interfaz de usuario de la HyperPod consola, la consola se encarga de rellenar y enviar la CreateCluster solicitud en tu nombre y la ejecuta CreateCluster API en el backend. En este caso, no necesita crearcreate_cluster.json; en su lugar, asegúrese de especificar la información de configuración de clúster correcta en el formulario de envío de creación de un clúster.

  2. on_create.sh— Para cada grupo de instancias, debes proporcionar un script shell de punto de entrada para ejecutar comandoson_create.sh, ejecutar scripts para instalar paquetes de software y configurar el entorno de HyperPod clústeres con Slurm. Las dos cosas que debes preparar son una provisioning_parameters.json necesaria HyperPod para configurar Slurm y un conjunto de scripts de ciclo de vida para instalar paquetes de software. Este script debe escribirse para buscar y ejecutar los siguientes archivos, tal y como se muestra en el script de ejemplo que aparece en. on_create.sh

    nota

    Asegúrese de cargar todo el conjunto de scripts del ciclo de vida en la ubicación de S3 que especifiquecreate_cluster.json. También debe colocar el suyo provisioning_parameters.json en la misma ubicación.

    1. provisioning_parameters.json— Este es unFormulario de configuración para aprovisionar nodos de Slurm en HyperPod. El on_create.sh script busca este JSON archivo y define la variable de entorno para identificar la ruta al mismo. A través de este JSON archivo, puede configurar los nodos de Slurm y las opciones de almacenamiento, como Amazon FSx for Lustre for Slurm, con los que comunicarse. Enprovisioning_parameters.json, asegúrate de asignar los grupos de instancias del HyperPod clúster a los nodos de Slurm con los nombres que especificaste en create_cluster.json función de cómo planeas configurarlos.

      En el siguiente diagrama, se muestra un ejemplo de cómo se provisioning_parameters.json deben escribir los dos archivos create_cluster.json de JSON configuración para asignar grupos de HyperPod instancias a los nodos de Slurm. En este ejemplo, supongamos que se configuran tres nodos de Slurm: el nodo controlador (de administración), el nodo de inicio de sesión (que es opcional) y el nodo de cómputo (trabajador).

      sugerencia

      Para ayudarle a validar estos dos JSON archivos, el equipo de HyperPod servicio proporciona un script de validación,. validate-config.py Para obtener más información, consulte Valide los archivos JSON de configuración antes de crear un clúster de Slurm en HyperPod.

      Comparación directa entre archivos.json.

      Figura: Comparación directa entre la creación create_cluster.json de HyperPod clústeres y la configuración provisiong_params.json de Slurm. La cantidad de grupos de instancias create_cluster.json debe coincidir con la cantidad de nodos que deseas configurar como nodos de Slurm. En el caso del ejemplo de la figura, se configurarán tres nodos de Slurm en un HyperPod clúster de tres grupos de instancias. Debes asignar los grupos de instancias del HyperPod clúster a los nodos de Slurm especificando los nombres de los grupos de instancias en consecuencia.

    2. resource_config.json— Durante la creación del clúster, el lifecycle_script.py script se escribe esperando un resource_config.json archivo del mismo. HyperPod Este archivo contiene información sobre el clúster, como los tipos de instancias y las direcciones IP.

      Al ejecutar el CreateClusterAPI, HyperPod crea un archivo de configuración de recursos /opt/ml/config/resource_config.json basado en el create_cluster.json archivo. La ruta del archivo se guarda en la variable de entorno denominadaSAGEMAKER_RESOURCE_CONFIG_PATH.

      importante

      La HyperPod plataforma genera automáticamente el resource_config.json archivo y USTED NOT DEBE crearlo. El siguiente código sirve para mostrar un ejemplo de lo resource_config.json que se crearía a partir de la creación del clúster create_cluster.json en función del paso anterior, y para ayudarte a entender qué ocurre en el backend y cómo se resource_config.json vería un generado automáticamente.

      { "ClusterConfig": { "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/abcde01234yz", "ClusterName": "your-hyperpod-cluster" }, "InstanceGroups": [ { "Name": "controller-machine", "InstanceType": "ml.c5.xlarge", "Instances": [ { "InstanceName": "controller-machine-1", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" } ] }, { "Name": "login-group", "InstanceType": "ml.m5.xlarge", "Instances": [ { "InstanceName": "login-group-1", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" } ] }, { "Name": "compute-nodes", "InstanceType": "ml.trn1.32xlarge", "Instances": [ { "InstanceName": "compute-nodes-1", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" }, { "InstanceName": "compute-nodes-2", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" }, { "InstanceName": "compute-nodes-3", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" }, { "InstanceName": "compute-nodes-4", "AgentIpAddress": "111.222.333.444", "CustomerIpAddress": "111.222.333.444", "InstanceId": "i-12345abcedfg67890" } ] } ] }
    3. lifecycle_script.py— Este es el script principal de Python que ejecuta colectivamente los scripts del ciclo de vida que configuran Slurm en el HyperPod clúster mientras se aprovisiona. Este script lee resource_config.json desde provisioning_parameters.json y hacia dentro las rutas especificadas o identificadason_create.sh, pasa la información relevante a cada script de ciclo de vida y, a continuación, ejecuta los scripts de ciclo de vida en orden.

      Los scripts de ciclo de vida son un conjunto de scripts que puede personalizar con total flexibilidad para instalar paquetes de software y configurar las configuraciones necesarias o personalizadas durante la creación del clúster, como la configuración de Slurm, la creación de usuarios o la instalación de Conda o Docker. El lifecycle_script.pyscript de ejemplo está preparado para ejecutar otros scripts de ciclo de vida básicos en el repositorio, como lanzar Slurm deamons () start_slurm.sh, montar Amazon FSx for Lustre (mount_fsx.sh) y configurar MariaDB accounting () y accounting (). setup_mariadb_accounting.shRDSsetup_rds_accounting.sh También puede añadir más scripts, empaquetarlos en el mismo directorio y añadir líneas de código para que puedan ejecutarse. lifecycle_script.py HyperPod Para obtener más información sobre los scripts básicos del ciclo de vida, consulte también los scripts del ciclo de vida 3.1 en el GitHub repositorio de Awsome Distributed Training.

      nota

      HyperPod se ejecuta SageMaker HyperPod DLAMI en cada instancia de un clúster y AMI tiene paquetes de software preinstalados que cumplen con las compatibilidades entre ellos y las funcionalidades. HyperPod Tenga en cuenta que si reinstala alguno de los paquetes preinstalados, usted es responsable de instalar los paquetes compatibles y tenga en cuenta que es posible que algunas HyperPod funcionalidades no funcionen del modo esperado.

      Además de las configuraciones predeterminadas, en la carpeta encontrará más scripts para instalar el siguiente software. utils El lifecycle_script.py archivo ya está preparado para incluir líneas de código para ejecutar los scripts de instalación, así que consulte los siguientes elementos para buscar esas líneas y descomentarlas para activarlas.

      1. Las siguientes líneas de código sirven para instalar Docker, Enroot y Pyxis. Estos paquetes son necesarios para ejecutar los contenedores de Docker en un clúster de Slurm.

        Para habilitar este paso de instalación, defina el enable_docker_enroot_pyxis parámetro True en en el archivo. config.py

        # Install Docker/Enroot/Pyxis if Config.enable_docker_enroot_pyxis: ExecuteBashScript("./utils/install_docker.sh").run() ExecuteBashScript("./utils/install_enroot_pyxis.sh").run(node_type)
      2. Puede integrar su HyperPod clúster con Amazon Managed Service for Prometheus y Amazon Managed Grafana para exportar métricas HyperPod sobre el clúster y los nodos del clúster a los paneles de Amazon Managed Grafana. Para exportar las métricas y utilizar el panel de control de Slurm, el panel de control de NVIDIADCGMexportadores y el panel de EFAmétricas de Grafana gestionada por Amazon, debe instalar el exportador de Slurm para Prometheus, el exportador y el exportador de nodos. NVIDIA DCGM EFA Para obtener más información sobre la instalación de los paquetes de exportación y el uso de los paneles de Grafana en un espacio de trabajo de Grafana gestionado por Amazon, consulte. SageMaker HyperPod monitoreo de recursos de clúster

        Para habilitar este paso de instalación, defina True el enable_observability parámetro en el archivo. config.py

        # Install metric exporting software and Prometheus for observability if Config.enable_observability: if node_type == SlurmNodeType.COMPUTE_NODE: ExecuteBashScript("./utils/install_docker.sh").run() ExecuteBashScript("./utils/install_dcgm_exporter.sh").run() ExecuteBashScript("./utils/install_efa_node_exporter.sh").run() if node_type == SlurmNodeType.HEAD_NODE: wait_for_scontrol() ExecuteBashScript("./utils/install_docker.sh").run() ExecuteBashScript("./utils/install_slurm_exporter.sh").run() ExecuteBashScript("./utils/install_prometheus.sh").run()
  3. Asegúrese de cargar todos los archivos de configuración y los scripts de configuración del paso 2 al depósito de S3 que proporcionó en la CreateCluster solicitud del paso 1. Por ejemplo, supongamos que create_cluster.json tiene lo siguiente.

    "LifeCycleConfig": { "SourceS3URI": "s3://sagemaker-hyperpod-lifecycle/src", "OnCreate": "on_create.sh" }

    A continuación, "s3://sagemaker-hyperpod-lifecycle/src" debe conteneron_create.sh, lifecycle_script.pyprovisioning_parameters.json, y todos los demás scripts de configuración. Suponga que ha preparado los archivos en una carpeta local de la siguiente manera.

    └── lifecycle_files // your local folder ├── provisioning_parameters.json ├── on_create.sh ├── lifecycle_script.py └── ... // more setup scrips to be fed into lifecycle_script.py

    Para cargar los archivos, utilice el comando S3 de la siguiente manera.

    aws s3 cp --recursive ./lifecycle_scripts s3://sagemaker-hyperpod-lifecycle/src