Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Die grundlegenden Lebenszyklusskripte werden bereitgestellt von HyperPod
In diesem Abschnitt werden Sie von oben nach unten durch alle Komponenten des grundlegenden Ablaufs der Einrichtung von Slurm geführt. HyperPod Es beginnt mit der Vorbereitung einer Anfrage zur HyperPod Clustererstellung zur Ausführung der CreateCluster API und taucht tief in die hierarchische Struktur ein, bis hin zu Lebenszyklus-Skripten. Verwenden Sie die Beispiel-Lebenszyklus-Skripte, die im Awsome Distributed Training GitHub
git clone https://github.com/aws-samples/awsome-distributed-training/
Die grundlegenden Lebenszyklus-Skripte für die Einrichtung eines Slurm-Clusters SageMaker HyperPod finden Sie unter. 1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config
cd awsome-distributed-training/1.architectures/5.sagemaker_hyperpods/LifecycleScripts/base-config
Das folgende Flussdiagramm zeigt eine detaillierte Übersicht darüber, wie Sie die Basis-Lebenszyklusskripte gestalten sollten. In den Beschreibungen unter dem Diagramm und dem Verfahrensleitfaden wird erklärt, wie sie während des HyperPod CreateCluster API-Aufrufs funktionieren.
Abbildung: Ein detailliertes Flussdiagramm der HyperPod Clustererstellung und der Struktur von Lebenszyklusskripten. (1) Die gestrichelten Pfeile zeigen in die Richtung, in die die Kästen „aufgerufen“ werden, und veranschaulichen den Ablauf der Vorbereitung von Konfigurationsdateien und Lebenszyklusskripten. Der erste Schritt besteht in der Vorbereitung von provisioning_parameters.json und den Lebenszyklusskripten. Diese werden dann für eine gemeinsame Ausführung in der richtigen Reihenfolge in lifecycle_script.py codiert. Und die Ausführung des lifecycle_script.py Skripts erfolgt durch das on_create.sh Shell-Skript, das im HyperPod Instanzterminal ausgeführt werden soll. (2) Die durchgezogenen Pfeile zeigen den Hauptablauf bei der HyperPod Clustererstellung und wie die Boxen „aufgerufen“ oder „eingereicht“ werden. on_create.shist für die Anfrage zur Clustererstellung erforderlich, entweder im Formular zur Clustererstellung create_cluster.json oder im Formular zur Clustererstellung in der Benutzeroberfläche der Konsole. Nachdem Sie die Anfrage eingereicht haben, HyperPod wird die CreateCluster API auf der Grundlage der angegebenen Konfigurationsinformationen aus der Anfrage und den Lebenszyklusskripts ausgeführt. (3) Der gepunktete Pfeil weist darauf hin, dass die HyperPod Plattform während der Bereitstellung von Clusterressourcen Instances resource_config.json in den Clustern erstellt. resource_config.jsonenthält HyperPod Clusterressourceninformationen wie den Cluster-ARN, Instanztypen und IP-Adressen. Es ist wichtig zu beachten, dass Sie die Lebenszyklusskripte so vorbereiten sollten, dass sie die resource_config.json-Datei während der Clustererstellung erwarten. Weitere Informationen finden Sie in der folgenden Verfahrensanleitung.
In der folgenden Anleitung wird erklärt, was bei der HyperPod Clustererstellung passiert und wie die grundlegenden Lebenszyklusskripts entworfen werden.
-
create_cluster.json— Um eine Anfrage zur HyperPod Clustererstellung einzureichen, bereiten Sie eineCreateClusterAnforderungsdatei im JSON-Format vor. In diesem Beispiel für bewährte Methoden gehen wir davon aus, dass die Anforderungsdateicreate_cluster.jsonheißt. Schreiben Siecreate_cluster.json, um einen HyperPod Cluster mit Instanzgruppen bereitzustellen. Es hat sich bewährt, die gleiche Anzahl von Instanzgruppen hinzuzufügen wie die Anzahl der Slurm-Knoten, die Sie auf dem HyperPod Cluster konfigurieren möchten. Stellen Sie sicher, dass Sie den Instance-Gruppen, die Sie den Slurm-Knoten zuweisen möchten, eindeutige Namen geben.Außerdem müssen Sie einen S3-Bucket-Pfad angeben, um Ihren gesamten Satz an Konfigurationsdateien und Lebenszyklusskripten im Feldnamen
InstanceGroups.LifeCycleConfig.SourceS3UriimCreateCluster-Anforderungsformular zu speichern, und den Dateinamen eines Einstiegspunkt-Shell-Skripts (angenommen, es heißton_create.sh) alsInstanceGroups.LifeCycleConfig.OnCreateangeben.Anmerkung
Wenn Sie das Formular „Cluster erstellen“ in der Benutzeroberfläche der HyperPod Konsole verwenden, verwaltet die Konsole das Ausfüllen und Senden der
CreateClusterAnfrage in Ihrem Namen und führt dieCreateClusterAPI im Backend aus. In diesem Fall müssen Siecreate_cluster.jsonnicht erstellen. Achten Sie stattdessen darauf, dass Sie die richtigen Informationen zur Cluster-Konfiguration in das zu übermittelnde Formular Cluster erstellen eingeben. -
on_create.sh— Für jede Instanzgruppe müssen Sie ein Einstiegs-Shell-Skript bereitstellen, um Befehle auszuführenon_create.sh, Skripte zur Installation von Softwarepaketen auszuführen und die HyperPod Clusterumgebung mit Slurm einzurichten. Die beiden Dinge, die Sie vorbereiten müssen, sind einprovisioning_parameters.jsonerforderliches HyperPod für die Einrichtung von Slurm und eine Reihe von Lifecycle-Skripten für die Installation von Softwarepaketen. Dieses Skript sollte so geschrieben werden, dass es die folgenden Dateien findet und ausführt, wie im Beispielskript unteron_create.shgezeigt. Anmerkung
Stellen Sie sicher, dass Sie den gesamten Satz von Lebenszyklusskripten an den in den S3-Speicherort hochladen, den Sie in
create_cluster.jsonangeben. Sie sollten Ihreprovisioning_parameters.jsonauch an demselben Speicherort speichern.-
provisioning_parameters.json— Das ist einKonfigurationsformular für die Bereitstellung von Slurm-Knoten auf HyperPod. Dason_create.sh-Skript findet diese JSON-Datei und definiert eine Umgebungsvariable, um den Pfad zu ihr zu identifizieren. Über diese JSON-Datei können Sie Slurm-Knoten und Speicheroptionen wie Amazon FSx for Lustre for Slurm für die Kommunikation konfigurieren. Stellen Sie sicherprovisioning_parameters.json, dass Sie die HyperPod Cluster-Instanzgruppen mit den Namen, die Sie angegeben haben, den Slurm-Knoten entsprechend zuweisen, je nachdem, wie Sie sie einrichten möchten.create_cluster.jsonDas folgende Diagramm zeigt ein Beispiel dafür, wie die beiden JSON-Konfigurationsdateien
create_cluster.jsongeschrieben werdenprovisioning_parameters.jsonsollten, um den HyperPod Slurm-Knoten Instanzgruppen zuzuweisen. In diesem Beispiel gehen wir von der Einrichtung von drei Slurm-Knoten aus: Controller-Knoten (Verwaltung), Anmeldeknoten (optional) und Rechenknoten (Worker).Tipp
Um Ihnen bei der Validierung dieser beiden JSON-Dateien zu helfen, stellt das HyperPod Serviceteam ein Validierungsskript zur Verfügung.
validate-config.pyWeitere Informationen hierzu finden Sie unter Validierung der JSON-Konfigurationsdateien vor dem Erstellen eines Slurm-Clusters auf HyperPod.
Abbildung: Direkter Vergleich zwischen
create_cluster.jsonder HyperPod Clustererstellung undprovisiong_params.jsonder Slurm-Konfiguration. Die Anzahl der Instance-Gruppen increate_cluster.jsonsollte der Anzahl der Knoten entsprechen, die Sie als Slurm-Knoten konfigurieren möchten. Im Fall des Beispiels in der Abbildung werden drei Slurm-Knoten auf einem HyperPod Cluster aus drei Instanzgruppen konfiguriert. Sie sollten die HyperPod Cluster-Instanzgruppen den Slurm-Knoten zuweisen, indem Sie die Namen der Instanzgruppen entsprechend angeben. -
resource_config.json— Während der Clustererstellung wird daslifecycle_script.pySkript so geschrieben, dass es eineresource_config.jsonDatei von HyperPod erwartet. Diese Datei enthält Informationen über den Cluster, z. B. Instance-Typen und IP-Adressen.Wenn Sie die
CreateClusterAPI ausführen, HyperPod erstellt es eine Ressourcenkonfigurationsdatei unter, die auf dercreate_cluster.jsonDatei/opt/ml/config/resource_config.jsonbasiert. Der Dateipfad wird in der Umgebungsvariablen namensSAGEMAKER_RESOURCE_CONFIG_PATHgespeichert.Wichtig
Die
resource_config.jsonDatei wird automatisch von der HyperPod Plattform generiert und Sie müssen sie NICHT erstellen. Der folgende Code zeigt ein Beispiel fürresource_config.json, die aus der Clustererstellung basierend aufcreate_cluster.jsonim vorherigen Schritt erstellt würde, und soll Ihnen helfen zu verstehen, was im Backend geschieht und wie eine automatisch generierteresource_config.jsonaussehen würde.{ "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" } ] } ] } -
lifecycle_script.py— Dies ist das wichtigste Python-Skript, das gemeinsam Lifecycle-Skripte ausführt, die Slurm auf dem HyperPod Cluster einrichten, während es bereitgestellt wird. Dieses Skript liest inprovisioning_parameters.jsonundresource_config.jsonaus den inon_create.shangegebenen oder identifizierten Pfaden, übergibt die relevanten Informationen an jedes Lebenszyklusskript und führt dann die Lebenszyklusskripte der Reihe nach aus.Lebenszyklusskripte sind eine Reihe von Skripten, die Sie vollständig flexibel anpassen können, um Softwarepakete zu installieren und während der Clustererstellung notwendige oder benutzerdefinierte Konfigurationen vorzunehmen, z. B. Slurm einrichten, Benutzer anlegen, Conda oder Docker installieren. Das
lifecycle_script.pyBeispielskript ist darauf vorbereitet, andere grundlegende Lebenszyklusskripte im Repository auszuführen, z. B. Slurm deamons ( start_slurm.sh) zu starten, Amazon FSx for Lustre () zu mounten und MariaDB-Buchhaltung ( mount_fsx.sh) und RDS-Buchhaltung ( setup_mariadb_accounting.sh) einzurichten. setup_rds_accounting.shSie können auch weitere Skripte hinzufügen, sie in dasselbe Verzeichnis packen und Codezeilen hinzufügen, um die Skripte ausführen zu lifecycle_script.pylassen. HyperPod Weitere Informationen zu den grundlegenden Lebenszyklus-Skripten finden Sie auch unter 3.1 Lifecycle-Skriptenim Awsome Distributed Training GitHub Repository. Anmerkung
HyperPod läuft SageMaker HyperPod DLAMI auf jeder Instanz eines Clusters, und das AMI verfügt über vorinstallierte Softwarepakete, die Kompatibilitäten zwischen ihnen und Funktionen erfüllen. HyperPod Beachten Sie, dass Sie bei der Neuinstallation eines der vorinstallierten Pakete für die Installation kompatibler Pakete verantwortlich sind und beachten Sie, dass einige HyperPod Funktionen möglicherweise nicht wie erwartet funktionieren.
Zusätzlich zu den Standardeinstellungen sind weitere Skripte zur Installation der folgenden Software im
utils-Ordner verfügbar. Die lifecycle_script.py-Datei enthält bereits Codezeilen zum Ausführen der Installationsskripte. Suchen Sie diese Zeilen anhand der folgenden Angaben und entfernen Sie die Kommentare, um sie zu aktivieren.-
Die folgenden Codezeilen beziehen sich auf die Installation von Docker
, Enroot und Pyxis . Diese Pakete sind erforderlich, um Docker-Container auf einem Slurm-Cluster auszuführen. Um diesen Installationsschritt zu aktivieren, legen Sie den
enable_docker_enroot_pyxis-Parameter in derconfig.py-Datei auf Truefest.# 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) -
Sie können Ihren HyperPod Cluster mit Amazon Managed Service for Prometheus und Amazon Managed Grafana integrieren, um Metriken über den HyperPod Cluster und die Clusterknoten in Amazon Managed Grafana-Dashboards zu exportieren. Um Metriken zu exportieren und das Slurm-Dashboard
, das Dashboard von NVIDIA DCGM Exporter und das EFA-Metrics-Dashboard auf Amazon Managed Grafana zu verwenden, müssen Sie den Slurm-Exporter für Prometheus , den NVIDIA-DCGM-Exporter und den EFA-Knoten-Exporter installieren. Weitere Informationen zur Installation der Exportpakete und zur Verwendung von Grafana-Dashboards in einem Workspace von Amazon Managed Grafana finden Sie unter SageMaker HyperPod Überwachung der Cluster-Ressourcen. Um diesen Installationsschritt zu aktivieren, legen Sie den
enable_observability-Parameter in derconfig.py-Datei auf Truefest.# 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()
-
-
-
Stellen Sie sicher, dass Sie alle Konfigurationsdateien und Einrichtungsskripte aus Schritt 2 in den S3-Bucket hochladen, den Sie in der
CreateCluster-Anforderung in Schritt 1 angegeben haben. Nehmen wir beispielsweise an, dass Ihrecreate_cluster.jsonFolgendes enthält."LifeCycleConfig": { "SourceS3URI": "s3://sagemaker-hyperpod-lifecycle/src", "OnCreate": "on_create.sh" }Dann sollte ihr
on_create.sh,lifecycle_script.py,provisioning_parameters.jsonund alle anderen Einrichtungsskripte enthalten. Angenommen, Sie haben die Dateien wie folgt in einem lokalen Ordner vorbereitet.└── lifecycle_files // your local folder ├── provisioning_parameters.json ├── on_create.sh ├── lifecycle_script.py └── ... // more setup scrips to be fed into lifecycle_script.pyVerwenden Sie den S3-Befehl wie folgt, um die Dateien hochzuladen.
aws s3 cp --recursive./lifecycle_scriptss3://sagemaker-hyperpod-lifecycle/src