Cómo empezar a SageMaker HyperPod usar el AWS CLI - Amazon SageMaker AI

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.

Cómo empezar a SageMaker HyperPod usar el AWS CLI

Cree su primer SageMaker HyperPod clúster con los AWS CLI comandos for HyperPod.

Crea tu primer SageMaker HyperPod clúster con Slurm

El siguiente tutorial muestra cómo crear un nuevo SageMaker HyperPod clúster y configurarlo con Slurm mediante los comandos para.AWS CLI SageMaker HyperPod Siguiendo el tutorial, crearás un HyperPod clúster con tres nodos de Slurm:my-controller-group, y. my-login-group worker-group-1

Con el enfoque de configuración basado en la API, se definen los tipos de nodos de Slurm y las asignaciones de particiones directamente en la solicitud de API mediante. CreateCluster SlurmConfig Esto elimina la necesidad de un provisioning_parameters.json archivo independiente y proporciona validación, detección de desviaciones y configuración integradas. per-instance-group FSx

  1. En primer lugar, prepare y cargue los scripts de ciclo de vida en un bucket de Amazon S3. Durante la creación del clúster, los HyperPod ejecuta en cada grupo de instancias. Cargue los scripts de ciclo de vida en Amazon S3 con el siguiente comando.

    aws s3 sync \ ~/local-dir-to-lifecycle-scripts/* \ s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src
    nota

    La ruta del bucket de S3 debe empezar con un prefijosagemaker-, ya que la función de IAM para SageMaker HyperPod with AmazonSageMakerClusterInstanceRolePolicy solo permite el acceso a los buckets de Amazon S3 que comiencen con el prefijo específico.

    Si va a empezar desde cero, utilice ejemplos de scripts de ciclo de vida que se incluyen en el repositorio Awsome Distributed Training. GitHub Los siguientes subpasos muestran cómo descargar y cargar los scripts de ciclo de vida de muestra en un bucket de Amazon S3.

    1. Descargue una copia de los ejemplos de scripts de ciclo de vida en un directorio de su equipo local.

      git clone https://github.com/aws-samples/awsome-distributed-training/
    2. Vaya al directorio 1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config, donde encontrará un conjunto de scripts de ciclo de vida.

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

      Para obtener más información sobre los scripts de ciclo de vida, consulte Personalización de SageMaker HyperPod clústeres mediante scripts de ciclo de vida.

    3. Cargue los scripts en s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src. Puede hacerlo a través de la consola de Amazon S3 o ejecutando el siguiente comando de Amazon S3 de la AWS CLI .

      aws s3 sync \ ~/local-dir-to-lifecycle-scripts/* \ s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src
    nota

    Con una configuración basada en API, no necesita crear ni cargar un archivo. provisioning_parameters.json La configuración de Slurm se define directamente en la solicitud de CreateCluster API en el siguiente paso.

  2. Prepare un archivo de CreateClustersolicitud en formato JSON y guárdelo como. create_cluster.json

    Con la configuración basada en API, debes especificar el tipo de nodo de Slurm y la asignación de particiones para cada grupo de instancias mediante el campo. SlurmConfig También puedes configurar los ajustes de Slurm a nivel de clúster mediante. Orchestrator.Slurm

    Para ExecutionRole, proporcione el ARN del rol de IAM que creó con la AmazonSageMakerClusterInstanceRolePolicy administrada en Requisitos previos para su uso SageMaker HyperPod.

    { "ClusterName": "my-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole", "InstanceStorageConfigs": [ { "EbsVolumeConfig": { "VolumeSizeInGB": 500 } } ] }, { "InstanceGroupName": "my-login-group", "InstanceType": "ml.m5.4xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Login" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole" }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole" } ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } } }

    SlurmConfig Campos:

    Campo Description (Descripción)
    NodeType El rol de Slurm para el grupo de instancias. Valores válidos: Controller, Login, Compute
    PartitionNames Las particiones de Slurm a las que se van a asignar los nodos de cómputo. Solo es válido para el tipo de Compute nodo.

    Campos Orchestrator.Slurm:

    Campo Description (Descripción)
    SlurmConfigStrategy Controla cómo se gestiona. HyperPod slurm.conf Valores válidos: Managed (por defecto)Overwrite, Merge

    SlurmConfigStrategy opciones:

    • Managed(recomendado): gestiona slurm.conf y detecta HyperPod completamente los cambios no autorizados (detección de desviaciones). Las actualizaciones fallan si se detecta una desviación.

    • Overwrite: HyperPod sobrescribe slurm.conf las actualizaciones e ignora cualquier cambio manual.

    • Merge: HyperPod conserva los cambios manuales y los fusiona con la configuración de la API.

    Añadir FSx para Lustre (opcional):

    Para montar un sistema de archivos de FSx for Lustre en tus nodos de cómputo, agrégalo FsxLustreConfig al grupo de instancias InstanceStorageConfigs for Lustre. Esto requiere una configuración de VPC personalizada.

    { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "InstanceStorageConfigs": [ { "FsxLustreConfig": { "DnsName": "fs-0abc123def456789.fsx.us-west-2.amazonaws.com", "MountPath": "/fsx", "MountName": "abcdefgh" } } ], "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole" }

    Añadir FSx para OpenZFS (opcional):

    También puede montar FSx para sistemas de archivos OpenZFS:

    "InstanceStorageConfigs": [ { "FsxOpenZfsConfig": { "DnsName": "fs-0xyz789abc123456.fsx.us-west-2.amazonaws.com", "MountPath": "/shared" } } ]
    nota

    Cada grupo de instancias puede tener como máximo una FSx para la configuración de Lustre y otra para la de OpenZFS. FSx Los distintos grupos de instancias pueden montar diferentes sistemas de archivos.

    Añadir la configuración de VPC (necesaria para FSx):

    Si la usa FSx, debe especificar una configuración de VPC personalizada:

    { "ClusterName": "my-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::<account-id>:role/HyperPodExecutionRole" }, ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } }, "VpcConfig": { "SecurityGroupIds": ["sg-0abc123def456789a"], "Subnets": ["subnet-0abc123def456789a"] } }
  3. Ejecute el siguiente comando para crear el clúster.

    aws sagemaker create-cluster --cli-input-json file://complete/path/to/create_cluster.json

    Esto debería devolver el ARN del clúster creado.

    { "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/my-hyperpod-cluster" }

    Si recibe un error de límites de recursos, asegúrese de cambiar el tipo de instancia por uno con cuotas suficientes en su cuenta o bien solicite cuotas adicionales accediendo a SageMaker HyperPod cuotas.

    Errores de validación comunes:

    Error Resolución
    «El clúster debe tener exactamente uno InstanceGroup con un tipo de nodo controlador» Asegúrese de que exactamente un grupo de instancias tengaSlurmConfig.NodeType: "Controller"
    «Las particiones solo se pueden asignar a los tipos de nodos de cómputo» Elimine PartitionNames de Controller nuestros grupos de Login instancias
    «FSx las configuraciones solo son compatibles con las VPC personalizadas» VpcConfigAñádalo a su solicitud cuando lo utilice FSx
  4. Ejecute describe-cluster para comprobar el estado del clúster.

    aws sagemaker describe-cluster --cluster-name my-hyperpod-cluster

    Ejemplo de respuesta:

    { "ClusterArn": "arn:aws:sagemaker:us-west-2:111122223333:cluster/my-hyperpod-cluster", "ClusterName": "my-hyperpod-cluster", "ClusterStatus": "Creating", "InstanceGroups": [ { "InstanceGroupName": "my-controller-group", "InstanceType": "ml.c5.xlarge", "InstanceCount": 1, "CurrentCount": 0, "TargetCount": 1, "SlurmConfig": { "NodeType": "Controller" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<bucket>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" }, { "InstanceGroupName": "my-login-group", "InstanceType": "ml.m5.4xlarge", "InstanceCount": 1, "CurrentCount": 0, "TargetCount": 1, "SlurmConfig": { "NodeType": "Login" }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<bucket>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.trn1.32xlarge", "InstanceCount": 1, "CurrentCount": 0, "TargetCount": 1, "SlurmConfig": { "NodeType": "Compute", "PartitionNames": ["partition-1"] }, "LifeCycleConfig": { "SourceS3Uri": "s3://sagemaker-<bucket>/src", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/HyperPodExecutionRole" } ], "Orchestrator": { "Slurm": { "SlurmConfigStrategy": "Managed" } }, "CreationTime": "2024-01-15T10:30:00Z" }

    Cuando el estado del clúster cambie a InService, continúe con el siguiente paso. La creación del clúster suele tardar entre 10 y 15 minutos.

  5. Ejecute list-cluster-nodes para consultar los detalles de los nodos del clúster.

    aws sagemaker list-cluster-nodes --cluster-name my-hyperpod-cluster

    Ejemplo de respuesta:

    { "ClusterNodeSummaries": [ { "InstanceGroupName": "my-controller-group", "InstanceId": "i-0abc123def456789a", "InstanceType": "ml.c5.xlarge", "InstanceStatus": { "Status": "Running", "Message": "" }, "LaunchTime": "2024-01-15T10:35:00Z" }, { "InstanceGroupName": "my-login-group", "InstanceId": "i-0abc123def456789b", "InstanceType": "ml.m5.4xlarge", "InstanceStatus": { "Status": "Running", "Message": "" }, "LaunchTime": "2024-01-15T10:35:00Z" }, { "InstanceGroupName": "worker-group-1", "InstanceId": "i-0abc123def456789c", "InstanceType": "ml.trn1.32xlarge", "InstanceStatus": { "Status": "Running", "Message": "" }, "LaunchTime": "2024-01-15T10:36:00Z" } ] }

    Esto InstanceId es lo que los usuarios del clúster necesitan para iniciar sesión (aws ssm) en ellos. Para obtener más información sobre cómo iniciar sesión en los nodos del clúster y ejecutar cargas de trabajo de ML, consulte Trabajos en clústeres SageMaker HyperPod.

  6. Conéctese a su clúster mediante el Administrador de AWS Systems Manager sesiones.

    aws ssm start-session \ --target sagemaker-cluster:my-hyperpod-cluster_my-login-group-i-0abc123def456789b \ --region us-west-2

    Una vez conectado, compruebe que Slurm esté configurado correctamente:

    # Check Slurm nodes sinfo # Check Slurm partitions sinfo -p partition-1 # Submit a test job srun -p partition-1 --nodes=1 hostname

Eliminación del clúster y limpieza de recursos

Una vez que haya probado correctamente la creación de un SageMaker HyperPod clúster, seguirá ejecutándose en ese InService estado hasta que lo elimine. Te recomendamos que elimines todos los clústeres creados con la capacidad de SageMaker IA bajo demanda cuando no estén en uso para evitar incurrir en cargos de servicio continuos en función de los precios bajo demanda. En este tutorial, has creado un clúster que consta de tres grupos de instancias. Asegúrate de eliminar el clúster ejecutando el siguiente comando.

aws sagemaker delete-cluster --cluster-name my-hyperpod-cluster

Para limpiar los scripts de ciclo de vida del bucket de S3 utilizado para este tutorial, vaya al bucket de Amazon S3 que utilizó durante la creación del clúster y elimine todos los archivos.

aws s3 rm s3://sagemaker-<unique-s3-bucket-name>/<lifecycle-script-directory>/src --recursive

Si ha probado la ejecución de algún modelo de carga de trabajo de entrenamiento en el clúster, compruebe también si ha cargado algún dato o si su trabajo ha guardado algún artefacto en distintos buckets de Amazon S3 o servicios de sistema de archivos, como Amazon FSx for Lustre y Amazon Elastic File System. Para evitar incurrir en gastos, elimine todos los artefactos y datos del almacenamiento o del sistema de archivos.