Verwalten von Slurm-Clustern von SageMaker HyperPod unter Verwendung der AWS CLI - Amazon SageMaker AI

Verwalten von Slurm-Clustern von SageMaker HyperPod unter Verwendung der AWS CLI

Die folgenden Themen enthalten Anleitungen zum Schreiben von API-Anforderungsdateien von SageMaker HyperPod im JSON-Format und zum Ausführen dieser Dateien mithilfe der AWS CLI-Befehle.

Erstellen eines neuen Clusters

  1. Bereiten Sie Skripte zur Lebenszykluskonfiguration vor und laden Sie sie in einen S3-Bucket hoch, z. B. s3://sagemaker-amzn-s3-demo-bucket/lifecycle-script-directory/src/. Im folgenden Schritt 2 wird davon ausgegangen, dass sich im angegebenen S3-Bucket ein Einstiegspunktskript namens on_create.sh befindet.

    Wichtig

    Legen Sie den S3-Pfad so fest, dass er mit s3://sagemaker- beginnt. An IAM-Rolle für SageMaker HyperPod ist die verwaltete AmazonSageMakerClusterInstanceRolePolicy angefügt, wodurch der Zugriff auf S3-Buckets mit dem spezifischen Präfix sagemaker- ermöglicht wird.

  2. Bereiten Sie eine CreateCluster-API-Anforderungsdatei im JSON-Format vor. Sie sollten Instance-Gruppen so konfigurieren, dass sie mit dem Slurm-Cluster übereinstimmen, den Sie in der provisioning_parameters.json-Datei entwerfen, die während der Clustererstellung als Teil der Ausführung einer Reihe von Lebenszyklusskripten verwendet wird. Weitere Informationen hierzu finden Sie unter Anpassen von SageMaker-HyperPod-Clustern mithilfe von Lebenszyklusskripten. Die folgende Vorlage enthält zwei Instance-Gruppen, um die Mindestanforderungen für einen Slurm-Cluster zu erfüllen: einen Controller-Knoten (Head) und einen Rechenknoten (Worker). Geben Sie für ExecutionRole den ARN der IAM-Rolle an, die Sie mit der verwalteten AmazonSageMakerClusterInstanceRolePolicy aus Abschnitt IAM-Rolle für SageMaker HyperPod erstellt haben.

    // 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" ] } }

    Je nachdem, wie Sie die Clusterstruktur mithilfe Ihrer Lebenszyklusskripte entwerfen, können Sie bis zu 20 Instance-Gruppen unter dem InstanceGroups-Parameter konfigurieren.

    Für den Tags-Anforderungsparameter können Sie benutzerdefinierte Tags für die Verwaltung des SageMaker-HyperPod-Clusters als AWS-Ressource hinzufügen. Sie können Ihrem Cluster auf die gleiche Weise Tags hinzufügen, wie Sie sie in anderen AWS-Services hinzufügen, die das Markieren unterstützen. Weitere Informationen zum Markieren von AWS-Ressourcen im Allgemeinen finden Sie im Benutzerhandbuch zur Markierung von AWS-Ressourcen.

    Geben Sie für den VpcConfig-Anforderungsparameter die Informationen einer VPC an, die Sie verwenden möchten. Weitere Informationen finden Sie unter Einrichtung von SageMaker HyperPod mit einer benutzerdefinierten Amazon VPC.

  3. Führen Sie den Befehl create-cluster aus, um den Cluster zu erstellen.

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

    Dies sollte den ARN des neuen Clusters zurückgeben.

Beschreiben eines Clusters

Führen Sie describe-cluster aus, um den Status des Clusters zu prüfen. Sie können entweder den Namen oder den ARN des Clusters angeben.

aws sagemaker describe-cluster --cluster-name your-hyperpod-cluster

Nachdem der Status des Clusters auf InService geändert wurde, fahren Sie mit dem nächsten Schritt fort. Mithilfe dieser API können Sie auch Fehlermeldungen aus anderen HyperPod-API-Vorgängen abrufen.

Listet die Details der Clusterknoten auf

Führen Sie list-cluster-nodes aus, um die wichtigsten Informationen der Clusterknoten zu überprüfen.

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

Dies gibt eine Antwort zurück und Ihre Cluster-Benutzer benötigen InstanceId für die Protokollierung (Verwendung von aws ssm) in ihnen.

Beschreiben der Details eines Cluster-Knotens

Führen Sie describe-cluster-node aus, um Details zu einem Clusterknoten abzurufen. Sie können die Clusterknoten-ID aus der Ausgabe der list-cluster-Knoten abrufen. Sie können entweder den Namen oder den ARN des Clusters angeben.

aws sagemaker describe-cluster-node \ --cluster-name your-hyperpod-cluster \ --node-id i-111222333444555aa

Auflisten von Clustern

Führen Sie list-clusters aus, um alle Cluster in Ihrem Konto aufzulisten.

aws sagemaker list-clusters

Sie können auch zusätzliche Flags hinzufügen, um die Liste der Cluster zu filtern. Weitere Informationen darüber, was dieser Befehl auf niedriger Ebene ausführt, sowie zusätzliche Flags für die Filterung finden Sie in der ListClusters-API-Referenz.

Aktualisieren der Clusterkonfiguration

Führen Sie update-cluster aus, um die Konfiguration eines Clusters zu aktualisieren.

Anmerkung

Sie können die UpdateCluster-API verwenden, um ganze Instance-Gruppen zu verkleinern oder aus Ihrem SageMaker-HyperPod-Cluster entfernen. Weitere Anweisungen zum Herunterskalieren oder Löschen von Instance-Gruppen finden Sie unter Herunterskalieren eines Clusters.

  1. Erstellen Sie eine UpdateCluster-Anforderungsdatei im JSON-Format. Stellen Sie sicher, dass Sie den richtigen Clusternamen und Instance-Gruppennamen für die Aktualisierung angeben. Sie können den Instance-Typ, die Anzahl der Instances, das Einstiegspunktskript für die Lebenszykluskonfiguration und den Pfad zum Skript ändern.

    1. Geben Sie für ClusterName den Namen des Clusters an, den Sie aktualisieren möchten.

    2. Für InstanceGroupName

      1. Um eine bestehende Instance-Gruppe zu aktualisieren, geben Sie den Namen der Instance-Gruppe an, die Sie aktualisieren möchten.

      2. Um eine neue Instance-Gruppe hinzuzufügen, geben Sie einen neuen Namen an, der in Ihrem Cluster nicht vorhanden ist.

    3. Für InstanceType

      1. Um eine bestehende Instance-Gruppe zu aktualisieren, müssen Sie den Instance-Typ, den Sie ursprünglich angegeben haben, der Gruppe zuordnen.

      2. Um eine neue Instance-Gruppe hinzuzufügen, geben Sie einen Instance-Typ an, mit dem Sie die Gruppe konfigurieren möchten.

    4. Für InstanceCount

      1. Um eine bestehende Instance-Gruppe zu aktualisieren, geben Sie eine Ganzzahl an, die der gewünschten Anzahl von Instances entspricht. Sie können einen höheren oder niedrigeren Wert (bis 0) angeben, um die Instance-Gruppe herauf- oder herunterskalieren.

      2. Um eine neue Instance-Gruppe hinzuzufügen, geben Sie eine Ganzzahl größer oder gleich 1 an.

    5. Für LifeCycleConfig können Sie die Werte SourceS3Uri und OnCreate ändern, wenn Sie die Instance-Gruppe aktualisieren möchten.

    6. Für ExecutionRole

      1. Verwenden Sie zum Aktualisieren einer vorhandenen Instance-Gruppe weiterhin dieselbe IAM-Rolle, die Sie bei der Clustererstellung zugewiesen haben.

      2. Um eine neue Instance-Gruppe hinzuzufügen, geben Sie eine IAM-Rolle an, die Sie anfügen möchten.

    7. Für ThreadsPerCore

      1. Verwenden Sie zum Aktualisieren einer vorhandenen Instance-Gruppe weiterhin denselben Wert, den Sie bei der Clustererstellung zugewiesen haben.

      2. Um eine neue Instance-Gruppe hinzuzufügen, können Sie einen beliebigen Wert aus den zulässigen Optionen pro Instance-Typ auswählen. Weitere Informationen finden Sie unter dem Instance-Typ und in der Spalte Gültige Threads pro Kern in der Referenztabelle unter CPU-Kerne und Threads pro CPU-Kern pro Instance-Typ im Benutzerhandbuch für Amazon EC2.

    Der folgende Codeausschnitt ist eine JSON-Anforderungsdateivorlage, die Sie verwenden können. Weitere Informationen zur Anforderungssyntax und zu den Parametern dieser API finden Sie in der UpdateCluster-API-Referenz.

    // 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 { ... } ] }
  2. Führen Sie den folgenden update-cluster-Befehl aus, um die Anfrage einzureichen.

    aws sagemaker update-cluster \ --cli-input-json file://complete/path/to/update_cluster.json

Aktualisieren der SageMaker-HyperPod-Plattformsoftware eines Clusters

Führen Sie update-cluster-software aus, um bestehende Cluster mit Software- und Sicherheitspatches zu aktualisieren, die vom SageMaker-HyperPod-Service bereitgestellt werden. Für --cluster-name geben Sie entweder den Namen oder den ARN des zu aktualisierenden Clusters an.

Wichtig

Vor der Ausführung dieser API müssen Sie eine Sicherungskopie Ihrer Arbeit erstellen. Der Patching-Prozess ersetzt das Root-Volume durch das aktualisierte AMI, was bedeutet, dass Ihre zuvor im Root-Volume der Instance gespeicherten Daten verloren gehen. Stellen Sie sicher, dass Sie Ihre Daten vom Instance-Root-Volume auf Amazon S3 oder Amazon FSx für Lustre sichern. Weitere Informationen finden Sie unter Verwenden des von SageMaker HyperPod bereitgestellten Backup-Skripts.

aws sagemaker update-cluster-software --cluster-name your-hyperpod-cluster

Dieser Befehl ruft die UpdateClusterSoftware-API auf. Nach dem API-Aufruf prüft SageMaker HyperPod, ob ein neueres DLAMI für die Cluster-Instances verfügbar ist. Wenn ein DLAMI-Update erforderlich ist, aktualisiert SageMaker HyperPod die Cluster-Instances, damit sie das neueste SageMaker HyperPod DLAMI verwenden, und führt Ihre Lebenszyklusskripte in dem Amazon-S3-Bucket aus, den Sie bei der Erstellung oder Aktualisierung des Clusters angegeben haben. Wenn der Cluster bereits die neueste DLAMI-Version verwendet, nimmt SageMaker HyperPod keine Änderungen daran vor und führt die Lebenszyklusskripte nicht erneut aus. Das SageMaker-HyperPod-Serviceteam führt regelmäßig neue SageMaker HyperPod DLAMIs ein, um die Sicherheit zu erhöhen und die Benutzererfahrung zu verbessern. Wir empfehlen Ihnen, SageMaker-HyperPod-DLAMI immer auf die neueste Version zu aktualisieren. Für zukünftige Updates von SageMaker-HyperPod-DLAMI für Sicherheitspatches lesen Sie die Versionshinweise zu Amazon SageMaker HyperPod.

Tipp

Wenn der Sicherheitspatch fehlschlägt, können Sie Fehlermeldungen abrufen, indem Sie die DescribeCluster-API wie unter Beschreiben eines Clusters beschrieben ausführen.

Anmerkung

Sie können diese API nur programmgesteuert ausführen. Die Patching-Funktionalität ist in der Benutzeroberfläche der SageMaker-HyperPod-Konsole nicht implementiert.

Verwenden des von SageMaker HyperPod bereitgestellten Backup-Skripts

SageMaker HyperPod bietet ein Skript zum Sichern und Wiederherstellen Ihrer Daten unter 1.architectures/5.sagemaker-hyperpod/patching-backup.sh im GitHub-Repository von Awsome Distributed Training. Das Skript stellt die folgenden zwei Funktionen zur Verfügung.

So sichern Sie Daten vor dem Patchen in einem S3-Bucket

sudo bash patching-backup.sh --create <s3-buckup-bucket-path>

Nachdem Sie den Befehl ausgeführt haben, überprüft das Skript squeue, ob sich Aufträge in der Warteschlange befinden, beendet Slurm, wenn dies nicht der Fall ist, erstellt ein Backup von mariadb und kopiert lokale Elemente auf die unter LOCAL_ITEMS definierte Festplatte. Sie können weitere Dateien und Verzeichnisse zu LOCAL_ITEMS hinzufügen.

# 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 )

Sie können dem bereitgestellten Skript auch benutzerdefinierten Code hinzufügen, um alle Anwendungen für Ihren Anwendungsfall zu sichern.

So stellen Sie Daten nach dem Patchen aus einem S3-Bucket wieder her

sudo bash patching-backup.sh --restore <s3-buckup-bucket-path>

Herunterskalieren eines Clusters

Sie können die Anzahl der Instances reduzieren oder Instance-Gruppen in Ihrem SageMaker-HyperPod-Cluster löschen, um die Ressourcenzuweisung zu optimieren oder die Kosten zu senken.

Sie skalieren die Instance-Gruppe entweder mithilfe der UpdateCluster-API-Operation herunter, um Instances aus Ihrer Instance-Gruppe nach dem Zufallsprinzip bis auf eine bestimmte Anzahl zu reduzieren, oder indem Sie bestimmte Instances mithilfe der BatchDeleteClusterNodes-API-Operation beenden. Mithilfe der UpdateCluster-API können Sie auch ganze Instance-Gruppen vollständig entfernen. Weitere Informationen zum Herunterskalieren diesen Methoden finden Sie unter Einen SageMaker HyperPod-Cluster herunterskalieren.

Anmerkung

Sie können keine Instances entfernen, die als Slurm-Controller-Knoten konfiguriert sind. Der Versuch, einen Slurm-Controller-Knoten zu löschen, führt zu einem Validierungsfehler mit dem Fehlercode NODE_ID_IN_USE.

Einen Cluster löschen

Führen Sie delete-cluster aus, um einen Cluster zu löschen. Sie können entweder den Namen oder den ARN des Clusters angeben.

aws sagemaker delete-cluster --cluster-name your-hyperpod-cluster