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
-
Bereiten Sie Skripte zur Lebenszykluskonfiguration vor und laden Sie sie in einen S3-Bucket hoch, z. B.
s3://sagemaker-. Im folgenden Schritt 2 wird davon ausgegangen, dass sich im angegebenen S3-Bucket ein Einstiegspunktskript namensamzn-s3-demo-bucket/lifecycle-script-directory/src/on_create.shbefindet.Wichtig
Legen Sie den S3-Pfad so fest, dass er mit
s3://sagemaker-beginnt. An IAM-Rolle für SageMaker HyperPod ist die verwalteteAmazonSageMakerClusterInstanceRolePolicyangefügt, wodurch der Zugriff auf S3-Buckets mit dem spezifischen Präfixsagemaker-ermöglicht wird. -
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ürExecutionRoleden ARN der IAM-Rolle an, die Sie mit der verwaltetenAmazonSageMakerClusterInstanceRolePolicyaus 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. -
Führen Sie den Befehl create-cluster aus, um den Cluster zu erstellen.
aws sagemaker create-cluster \ --cli-input-jsonfile://complete/path/to/create_cluster.jsonDies 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-nameyour-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-nameyour-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-nameyour-hyperpod-cluster\ --node-idi-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.
-
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.-
Geben Sie für
ClusterNameden Namen des Clusters an, den Sie aktualisieren möchten. -
Für
InstanceGroupName-
Um eine bestehende Instance-Gruppe zu aktualisieren, geben Sie den Namen der Instance-Gruppe an, die Sie aktualisieren möchten.
-
Um eine neue Instance-Gruppe hinzuzufügen, geben Sie einen neuen Namen an, der in Ihrem Cluster nicht vorhanden ist.
-
-
Für
InstanceType-
Um eine bestehende Instance-Gruppe zu aktualisieren, müssen Sie den Instance-Typ, den Sie ursprünglich angegeben haben, der Gruppe zuordnen.
-
Um eine neue Instance-Gruppe hinzuzufügen, geben Sie einen Instance-Typ an, mit dem Sie die Gruppe konfigurieren möchten.
-
-
Für
InstanceCount-
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.
-
Um eine neue Instance-Gruppe hinzuzufügen, geben Sie eine Ganzzahl größer oder gleich 1 an.
-
-
Für
LifeCycleConfigkönnen Sie die WerteSourceS3UriundOnCreateändern, wenn Sie die Instance-Gruppe aktualisieren möchten. -
Für
ExecutionRole-
Verwenden Sie zum Aktualisieren einer vorhandenen Instance-Gruppe weiterhin dieselbe IAM-Rolle, die Sie bei der Clustererstellung zugewiesen haben.
-
Um eine neue Instance-Gruppe hinzuzufügen, geben Sie eine IAM-Rolle an, die Sie anfügen möchten.
-
-
Für
ThreadsPerCore-
Verwenden Sie zum Aktualisieren einer vorhandenen Instance-Gruppe weiterhin denselben Wert, den Sie bei der Clustererstellung zugewiesen haben.
-
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 { ... } ] } -
-
Führen Sie den folgenden
update-cluster-Befehl aus, um die Anfrage einzureichen.aws sagemaker update-cluster \ --cli-input-jsonfile://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-nameyour-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
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-nameyour-hyperpod-cluster