Gestione dei cluster SageMaker HyperPod Slurm con la AWS CLI
Gli argomenti seguenti forniscono indicazioni su come scrivere i file di richiesta dell’API SageMaker HyperPod in formato JSON ed eseguirli utilizzando i comandi della AWS CLI.
Creazione di un nuovo cluster
-
Prepara gli script di configurazione del ciclo di vita e caricali in un bucket S3, ad esempio
s3://sagemaker-. La fase 2 seguente presuppone che esista uno script del punto di ingresso denominatoamzn-s3-demo-bucket/lifecycle-script-directory/src/on_create.shnel bucket S3 specificato.Importante
Assicurati di impostare il percorso S3 in modo che inizi con
s3://sagemaker-. Al Ruolo IAM per SageMaker HyperPod è collegata la policy gestitaAmazonSageMakerClusterInstanceRolePolicy, che consente l’accesso ai bucket S3 con il prefisso specificosagemaker-. -
Prepara un file di richiesta API CreateCluster in formato JSON. Devi configurare i gruppi di istanze in modo che corrispondano al cluster Slurm progettato nel file
provisioning_parameters.jsonche verrà utilizzato durante la creazione del cluster nell’ambito dell’esecuzione di un set di script del ciclo di vita. Per ulteriori informazioni, consulta Personalizzazione dei cluster SageMaker HyperPod con script del ciclo di vita. Il modello seguente ha due gruppi di istanze per soddisfare i requisiti minimi per un cluster Slurm: un nodo controller (head) e un nodo di calcolo (worker). PerExecutionRole, fornisci l’ARN del ruolo IAM che hai creato con la policy gestitaAmazonSageMakerClusterInstanceRolePolicynella sezione Ruolo IAM per SageMaker HyperPod.// create_cluster.json{ "ClusterName": "your-hyperpod-cluster", "InstanceGroups": [ { "InstanceGroupName": "controller-group", "InstanceType": "ml.m5.xlarge", "InstanceCount":1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster",// Optional: Configure an additional storage per instance group."InstanceStorageConfigs": [ {// Attach an additional EBS volume to each instance within the instance group.// The default mount path for the additional EBS volume is /opt/sagemaker."EbsVolumeConfig":{// Specify an integer between 1 and 16384 in gigabytes (GB)."VolumeSizeInGB":integer, } } ] }, { "InstanceGroupName": "worker-group-1", "InstanceType": "ml.p4d.xlarge", "InstanceCount":1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster" } ], // Optional "Tags": [ { "Key": "string", "Value": "string" } ], // Optional "VpcConfig": { "SecurityGroupIds": [ "string" ], "Subnets": [ "string" ] } }A seconda di come progetti la struttura del cluster con gli script del ciclo di vita, puoi configurare fino a 20 gruppi di istanze nel parametro
InstanceGroups.Per il parametro di richiesta
Tags, puoi aggiungere tag personalizzati per gestire il cluster SageMaker HyperPod come risorsa AWS. Puoi aggiungere tag al cluster con la stessa procedura utilizzata per altri servizi AWS che supportano il tagging. Per ulteriori informazioni generali sul tagging delle risorse AWS, consulta Tagging AWS Resources User Guide.Per il parametro di richiesta
VpcConfig, specifica le informazioni del VPC da utilizzare. Per ulteriori informazioni, consulta Configurazione di SageMaker HyperPod con un Amazon VPC personalizzato. -
Utilizza il comando create-cluster come segue.
aws sagemaker create-cluster \ --cli-input-jsonfile://complete/path/to/create_cluster.jsonQuesto dovrebbe restituire l’ARN del nuovo cluster.
Descrizione di un cluster
Esegui describe-cluster per verificare lo stato del cluster. Puoi specificare il nome o l’ARN del cluster.
aws sagemaker describe-cluster --cluster-nameyour-hyperpod-cluster
Quando lo stato del cluster diventa InService, procedi con la fase successiva. Utilizzando questa API, puoi anche recuperare i messaggi di errore eseguendo altre operazioni dell’API HyperPod.
Elenco dei dettagli dei nodi del cluster
Esegui list-cluster-nodes per controllare le informazioni chiave dei nodi del cluster.
aws sagemaker list-cluster-nodes --cluster-nameyour-hyperpod-cluster
Questo restituisce una risposta e InstanceId è ciò che ti serve per l’accesso (con aws ssm).
Descrizione dei dettagli di un nodo del cluster
Esegui describe-cluster-node per recuperare i dettagli di un nodo del cluster. Puoi ottenere l’ID del nodo del cluster dall’output di list-cluster-nodes. Puoi specificare il nome o l’ARN del cluster.
aws sagemaker describe-cluster-node \ --cluster-nameyour-hyperpod-cluster\ --node-idi-111222333444555aa
Elenco dei cluster
Esegui list-clusters per elencare tutti i cluster del tuo account.
aws sagemaker list-clusters
Puoi anche aggiungere ulteriori flag per filtrare l’elenco dei cluster. Per ulteriori informazioni su cosa viene eseguito a basso livello da questo comando e sui flag aggiuntivi per il filtraggio, consulta la documentazione di riferimento dell’API per ListClusters.
Aggiornamento della configurazione del cluster
Esegui update-cluster per aggiornare la configurazione di un cluster.
Nota
Puoi utilizzare l’API UpdateCluster per ridurre verticalmente o rimuovere interi gruppi di istanze dal cluster SageMaker HyperPod. Per ulteriori istruzioni su come ridurre verticalmente o eliminare i gruppi di istanze, consulta Riduzione verticale di un cluster.
-
Crea un file di richiesta
UpdateClusterin formato JSON. Assicurati di specificare correttamente il nome del cluster e il nome del gruppo di istanze da aggiornare. Puoi modificare il tipo di istanza, il numero di istanze, lo script del punto di ingresso della configurazione del ciclo di vita e il percorso dello script.-
Per
ClusterName, specifica il nome del cluster da aggiornare. -
Per
InstanceGroupName-
Per aggiornare un gruppo di istanze esistente, specifica il nome del gruppo di istanze da aggiornare.
-
Per aggiungere un nuovo gruppo di istanze, specifica un nuovo nome non presente nel cluster.
-
-
Per
InstanceType-
Per aggiornare un gruppo di istanze esistente, è necessario che il tipo di istanza specificato all’inizio corrisponda al gruppo.
-
Per aggiungere un nuovo gruppo di istanze, specifica il tipo di istanza con cui configurare il gruppo.
-
-
Per
InstanceCount-
Per aggiornare un gruppo di istanze esistente, specifica un numero intero corrispondente al numero di istanze desiderato. Puoi fornire un valore più alto o più basso (fino a 0) per aumentare o ridurre verticalmente il gruppo di istanze.
-
Per aggiungere un nuovo gruppo di istanze, specifica un numero intero maggiore o uguale a 1.
-
-
Per
LifeCycleConfig, puoi modificare entrambi i valoriSourceS3UrieOnCreateper aggiornare il gruppo di istanze. -
Per
ExecutionRole-
Per aggiornare un gruppo di istanze esistente, continua a utilizzare lo stesso ruolo IAM collegato durante la creazione del cluster.
-
Per aggiungere un nuovo gruppo di istanze, specifica un ruolo IAM da collegare.
-
-
Per
ThreadsPerCore-
Per aggiornare un gruppo di istanze esistente, continua a utilizzare lo stesso valore specificato durante la creazione del cluster.
-
Per aggiungere un nuovo gruppo di istanze, puoi scegliere qualsiasi valore tra le opzioni consentite dal tipo di istanza. Per ulteriori informazioni, cerca il tipo di istanza e consulta la colonna Thread validi per core nella tabella di riferimento in CPU cores and threads per CPU core per instance type in Amazon EC2 User Guide.
-
Puoi utilizzare il frammento di codice seguente, che corrisponde a un modello di file di richiesta JSON. Per ulteriori informazioni sulla sintassi e i parametri della richiesta di questa API, consulta la documentazione di riferimento dell’API per UpdateCluster.
// update_cluster.json { // Required "ClusterName": "name-of-cluster-to-update", // Required "InstanceGroups": [ { "InstanceGroupName": "name-of-instance-group-to-update", "InstanceType": "ml.m5.xlarge", "InstanceCount":1, "LifeCycleConfig": { "SourceS3Uri": "s3://amzn-s3-demo-bucket-sagemaker/lifecycle-script-directory/src/", "OnCreate": "on_create.sh" }, "ExecutionRole": "arn:aws:iam::111122223333:role/iam-role-for-cluster",// Optional: Configure an additional storage per instance group."InstanceStorageConfigs": [ {// Attach an additional EBS volume to each instance within the instance group.// The default mount path for the additional EBS volume is /opt/sagemaker."EbsVolumeConfig":{// Specify an integer between 1 and 16384 in gigabytes (GB)."VolumeSizeInGB":integer, } } ] }, // add more blocks of instance groups as needed { ... } ] } -
-
Esegui il comando
update-clusterper inviare la richiesta.aws sagemaker update-cluster \ --cli-input-jsonfile://complete/path/to/update_cluster.json
Aggiornamento del software della piattaforma SageMaker HyperPod di un cluster
Esegui update-cluster-software per aggiornare i cluster esistenti con software e patch di sicurezza forniti dal servizio SageMaker HyperPod. Per --cluster-name, specifica il nome o l’ARN del cluster da aggiornare.
Importante
Ricorda di eseguire il backup del tuo lavoro prima di applicare questa API. Il processo di applicazione delle patch sostituisce il volume root con l’AMI aggiornata, il che significa che i dati precedenti archiviati nel volume root dell’istanza andranno persi. Assicurati di eseguire il backup dei dati dal volume root dell’istanza su Amazon S3 o Amazon FSx per Lustre. Per ulteriori informazioni, consulta Utilizzo dello script di backup fornito da SageMaker HyperPod.
aws sagemaker update-cluster-software --cluster-nameyour-hyperpod-cluster
Questo comando richiama l’API UpdateClusterSoftware. Dopo la chiamata API, SageMaker HyperPod verifica se è disponibile una DLAMI più recente per le istanze del cluster. Se è necessario un aggiornamento DLAMI, SageMaker HyperPod aggiornerà le istanze del cluster per utilizzare le DLAMI di SageMaker HyperPod più recenti ed eseguirà gli script del ciclo di vita nel bucket Amazon S3 specificato durante la creazione o l’aggiornamento del cluster. Se il cluster utilizza già la DLAMI più recente, SageMaker HyperPod non apporterà alcuna modifica al cluster né eseguirà nuovamente gli script del ciclo di vita. Il team di assistenza SageMaker HyperPod distribuisce regolarmente nuovi DLAMI di SageMaker HyperPod per migliorare la sicurezza e l’esperienza degli utenti. Consigliamo di continuare ad aggiornare la DLAMI di SageMaker HyperPod alla versione più recente. Per i futuri aggiornamenti alla DLAMI di SageMaker HyperPod per l’applicazione delle patch di sicurezza, consulta Note di rilascio di Amazon SageMaker HyperPod.
Suggerimento
Se la patch di sicurezza non riesce, è possibile recuperare i messaggi di errore eseguendo l’API DescribeCluster come indicato in Descrizione di un cluster.
Nota
Puoi eseguire questa API solo in modo programmatico. La funzionalità di applicazione delle patch non è implementata nell’interfaccia utente della console SageMaker HyperPod.
Utilizzo dello script di backup fornito da SageMaker HyperPod
SageMaker HyperPod fornisce uno script per il backup e il ripristino dei dati in 1.architectures/5.sagemaker-hyperpod/patching-backup.sh
Per eseguire il backup dei dati su un bucket S3 prima dell’applicazione delle patch
sudo bash patching-backup.sh --create<s3-buckup-bucket-path>
Dopo aver eseguito il comando, lo script verifica squeue per rilevare se ci sono processi in coda, arresta Slurm se non c’è alcun processo in coda, esegue il backup di mariadb e copia gli elementi locali sul disco definito in LOCAL_ITEMS. Puoi aggiungere altri file e directory a LOCAL_ITEMS.
# Define files and directories to back up. LOCAL_ITEMS=( "/var/spool/slurmd" "/var/spool/slurmctld" "/etc/systemd/system/slurmctld.service" "/home/ubuntu/backup_slurm_acct_db.sql" # ... Add more items as needed )
Inoltre, puoi aggiungere codice personalizzato allo script fornito per eseguire il backup di qualsiasi applicazione collegata al tuo caso d’uso.
Per ripristinare i dati da un bucket S3 dopo l’applicazione delle patch
sudo bash patching-backup.sh --restore<s3-buckup-bucket-path>
Riduzione verticale di un cluster
Puoi ridurre verticalmente il numero di istanze o eliminare i gruppi di istanze nel cluster SageMaker HyperPod per ottimizzare l’allocazione delle risorse o ridurre i costi.
Puoi ridurre verticalmente le istanze con l’operazione API UpdateCluster per terminare in modo casuale le istanze dal gruppo di istanze fino a un numero specificato oppure puoi terminare istanze specifiche utilizzando l’operazione API BatchDeleteClusterNodes. Puoi anche rimuovere completamente interi gruppi di istanze utilizzando l’API UpdateCluster. Per ulteriori informazioni su come ridurre verticalmente le istanze con questi metodi, consulta Riduzione verticale di un cluster SageMaker HyperPod.
Nota
Non è possibile rimuovere le istanze configurate come nodi controller Slurm. Il tentativo di eliminare un nodo controller Slurm genera un errore di convalida con il codice di errore NODE_ID_IN_USE.
Eliminazione di un cluster
Esegui delete-cluster per eliminare un cluster. Puoi specificare il nome o l’ARN del cluster.
aws sagemaker delete-cluster --cluster-nameyour-hyperpod-cluster