View a markdown version of this page

Benutzer auf einem Slurm-Cluster erstellen auf SageMaker HyperPod - Amazon SageMaker KI

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.

Benutzer auf einem Slurm-Cluster erstellen auf SageMaker HyperPod

Es gibt drei Möglichkeiten, POSIX-Benutzer über die Knoten eines Slurm-Clusters hinweg zu erstellen. SageMaker HyperPod Sie unterscheiden sich darin, wann Benutzer erstellt werden und wie viele Lebenszykluskonfigurationen Sie verwalten müssen. Wählen Sie die Option, die zu Ihrem Cluster und Workflow passt. Hier finden Sie eine Liste von der einfachsten bis zur fortschrittlichsten Option.

Option Am besten geeignet für Konfiguration des Lebenszyklus erforderlich Wenn Benutzer erstellt werden Verhalten beim Hochskalieren oder beim Node-Austausch
Option A: Fügen Sie Benutzer mit dem Utility-Skript „Benutzer erstellen“ hinzu Hinzufügen von Benutzern zu einem Cluster, der bereits existiert InService, ohne die Konfiguration des Lebenszyklus zu ändern Keine Bei Bedarf, wann immer Sie das Skript ausführen Manuell. Benutzer werden nicht automatisch übernommen. Führen Sie das Skript jedes Mal erneut aus, wenn Knoten hinzugefügt oder ersetzt werden (automatisch oder manuell).
Option B: Fügen Sie Benutzer mit dem Erweiterungsskript „add-users“ hinzu AMI-based lebenszykluskonfigurierte Cluster, die Benutzer automatisch bereitstellen Erweiterungsskripts für Benutzer hinzufügen Automatisch während der Knotenbereitstellung — während der Cluster-Erstellung, beim Hinzufügen von Knoten (Scale-Up), bei AMI-Updates und beim Austausch von Knoten. Automatisch. Die Erweiterung wird während der Bereitstellung auf jedem neuen Knoten ausgeführt, wobei die Benutzerdatei im Amazon S3-Bucket für Lebenszyklus-Skripts verwendet wird.
Option C: Fügen Sie Benutzer mit den Basis-Lifecycle-Skripten hinzu Cluster, die bereits den vollständigen benutzerdefinierten Basis-Lifecycle-Skriptsatz verwenden Vollständiger benutzerdefinierter Lebenszyklus-Skriptsatz Automatisch während der Knotenbereitstellung — während der Cluster-Erstellung, beim Hinzufügen von Knoten (Scale-Up), bei AMI-Updates und beim Austausch von Knoten. Automatisch. Das Basis-Lifecycle-Skript wird während der Bereitstellung auf jedem neuen Knoten ausgeführt, wobei die Benutzerdatei im Amazon S3-Bucket für Lebenszyklus-Skripts verwendet wird.

Alle drei Optionen verwenden Skripte, die das SageMaker HyperPod Serviceteam im Awsome Distributed Training-Repository auf der GitHub Website bereitstellt.

Option A: Fügen Sie Benutzer mit dem Utility-Skript „Benutzer erstellen“ hinzu

Dies ist die einfachste Option und erfordert keine Lebenszykluskonfiguration. Verwenden Sie sie, wenn Ihr Cluster bereits vorhanden ist InService und Sie sofort Benutzer hinzufügen möchten. Führen Sie das Utility-Skript create_users.sh auf der GitHub Website auf dem Controller-Knoten aus, um Benutzer auf allen Knoten in einem einzigen Durchlauf zu erstellen. Das Skript erkennt automatisch die anderen Knoten anhand der Cluster-Konfigurationsdateien, erstellt die Benutzer über SSH und konfiguriert die Rechenknoten parallel, sodass sie auf große Cluster skaliert werden können. Das Skript unterstützt drei Modi für die Angabe von Benutzern, die anhand der von Ihnen übergebenen Argumente und der im aktuellen Verzeichnis vorhandenen Dateien in der folgenden Prioritätsreihenfolge ausgewählt werden:

  • Befehlszeilenmodus — Sie übergeben Benutzernamen als Argumente und das Skript weist automatisch UIDs zu. Dies ist der schnellste Weg, Benutzer hinzuzufügen.

  • Dateimodus — Das Skript liest Benutzerdefinitionen aus einer shared_users.txt (CSV) oder shared_users.yaml (YAML) -Datei im aktuellen Verzeichnis.

  • Interaktiver Modus — das Skript fordert Sie zur Eingabe von Benutzernamen und optional UIDs auf.

Wichtig

In jedem Modus werden Benutzer nur auf den Knoten create_users.sh erstellt, die bei der Ausführung vorhanden sind. Dazu gehört auch der Dateimodus mit einem lokalen shared_users.txt Odershared_users.yaml. Benutzer werden nicht automatisch auf Knoten neu erstellt, die später durch Hochskalierung oder Knotenersetzung hinzugefügt werden. Dabei handelt es sich um Bereitstellungsereignisse, bei denen der neue Knoten mit einem neuen Root-Volume gestartet wird, das keine POSIX-Konten hat. (Home-Verzeichnisse und SSH-Schlüssel auf dem gemeinsam genutzten Dateisystem überleben, die Benutzerkonten selbst jedoch nicht.) Re-run create_users.shnachdem die neuen Knoten hinzugefügt wurden, um sie in Einklang zu bringen.

Re-running das Script ist sicher. Führen Sie es auf dem Controller-Knoten aus. Es erkennt die anderen Clusterknoten und wendet Benutzer im gesamten Cluster in einem Durchlauf an. Es ist pro Knoten idempotent: Es erstellt einen Benutzer nur dort, wo er fehlt, und lässt Knoten, auf denen der Benutzer bereits existiert, unverändert — eine erneute Ausführung nach dem Hinzufügen von Knoten wirkt sich also nur auf die neuen Knoten aus.

Damit neue Knoten automatisch Benutzer empfangen, muss die Benutzerdatei Teil der Lifecycle-Konfiguration des Clusters sein, damit sie während der Bereitstellung ausgeführt wird: Speichern Sie eine shared_users.yaml OR-Datei in Ihrem Amazon S3-Bucket für Lifecycle-Skripte und verwenden Sie sie mit shared_users.txt oder. Option B: Fügen Sie Benutzer mit dem Erweiterungsskript „add-users“ hinzu Option C: Fügen Sie Benutzer mit den Basis-Lifecycle-Skripten hinzu create_users.shhilft, indem jeder Benutzer, den er erstellt, an ihn angehängt wird shared_users.txt und angeboten wird, ihn auf Amazon S3 hochzuladen. Für sich genommen — in keinem Modus — führt dies jedoch nicht dazu, dass Benutzer über Bereitstellungsereignisse hinweg bestehen bleiben.

Für jeden Benutzer gilt das Skript:

  • Erzeugt einen POSIX-Benutzer mit einer konsistenten UID auf jedem Knoten.

  • Erzeugt ein Home-Verzeichnis auf dem gemeinsam genutzten Dateisystem (automatische Erkennung von OpenZFS unter /home oder Amazon FSX for Lustre at). /fsx

  • Generiert ein SSH-Schlüsselpaar auf dem gemeinsam genutzten Dateisystem für passwortloses SSH zwischen Knoten.

  • Fügt den Benutzer der docker Gruppe hinzu (und gewährt optional Sudo-Zugriff).

  • Registriert den Benutzer beim Slurm-Konto auf dem Controller, damit er Jobs einreichen kann.

  • Hängt die neuen Benutzer an eine shared_users.txt Datei an und lädt sie optional auf Amazon S3 hoch, sodass Sie sie mit den anderen Optionen wiederverwenden können.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass die folgenden Anforderungen erfüllt sind.

  • Der Cluster ist InService und Sie können eine Verbindung zum Controller-Knoten herstellen. Siehe Zugreifen auf Ihre SageMaker HyperPod Clusterknoten.

  • jqist auf dem Controller-Knoten installiert.

  • SSH-Zugriff ist vom Controller-Knoten aus auf alle anderen Knoten verfügbar (HyperPod konfiguriert dies für den Standardbenutzer).

Um Benutzer mit dem Utility-Skript create_users.sh hinzuzufügen

Führen Sie folgende Schritte aus:

  1. Stellen Sie eine Verbindung zum Controller-Knoten her und laden Sie das Skript herunter. Stellen Sie sicher, dass Sie es mit Sudo-Berechtigungen ausführen.

    $ curl -O https://raw.githubusercontent.com/awslabs/awsome-distributed-training/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config/utils/create_users.sh chmod +x create_users.sh
  2. Führen Sie das Skript in einem seiner drei Modi aus, den es nach Priorität aus den übergebenen Argumenten und den Dateien im aktuellen Verzeichnis auswählt: zuerst Befehlszeilenargumente, dann eine Benutzerdatei, dann interaktive Eingabeaufforderungen. Jeder Modus läuft in derselben Reihenfolge ab: Erstellen Sie die Benutzer auf dem aktuellen Knoten, richten Sie SSH-Schlüsselpaare auf dem gemeinsam genutzten Dateisystem ein, erstellen Sie die Benutzer auf allen verbleibenden Knoten (Rechenknoten parallel), registrieren Sie sie bei der Slurm-Buchhaltung auf dem Controller, hängen Sie sie an und bieten Sie anshared_users.txt, diese Datei auf Amazon S3 hochzuladen.

    Die drei Modi werden in den folgenden Beispielen beschrieben, wobei jeweils zwei Benutzer (und) hinzugefügt werden. user1 user2

    Befehlszeilenmodus

    Übergeben Sie die Benutzernamen als Argumente. Das Skript weist automatisch UIDs zu und fragt, ob die neuen Benutzer Sudoers sein sollen. Dies ist der schnellste Weg, Benutzer hinzuzufügen.

    $ sudo ./create_users.sh user1 user2

    Das Skript validiert die Benutzernamen und fordert dann zum Zugriff auf Sudoer auf:

    ======================================== Step 1: User Configuration ======================================== Users from CLI args: user1 user2 ✓ user1 — will be created (auto-assign UID) ✓ user2 — will be created (auto-assign UID) Make these user(s) sudoer(s)? (y/N): n

    Es erstellt dann die Benutzer auf dem aktuellen Knoten, richtet SSH-Schlüsselpaare ein, erstellt sie auf den Rechenknoten, registriert sie beim Slurm-Konto auf dem Controller und schreibt, sodass Sie am Ende aufgefordert werdenshared_users.txt, diese Datei auf Amazon S3 hochzuladen.

    Dateimodus

    Erstellen Sie eine Benutzerdatei im selben Verzeichnis wie das Skript und führen Sie das Skript dann ohne Argumente aus. Das Skript liest die Benutzerdefinitionen, validiert sie (es werden nur Benutzer erstellt, die noch nicht existieren, und UID-Konflikte werden übersprungen) und erstellt die Benutzer auf allen Knoten. Das Skript akzeptiert zwei Dateiformate.

    Verwenden Sie zum shared_users.txt Beispiel eine CSV-Datei mit einem Benutzer pro Zeile im folgenden Formatusername,uid,home_directory:

    user1,2001,/fsx/user1 user2,2002,/fsx/user2

    Verwenden Sie alternativ eine YAML-Datei mit einer einfachen Benutzerliste oder Benutzern, die in Gruppen organisiert sind. shared_users.yaml Für die Analyse dieses Formats ist PyYAML auf dem Knoten erforderlich. Das Folgende ist das einfache Listenformat:

    users: - username: user1 uid: 2001 - username: user2 uid: 2002

    Wenn beide Dateien vorhanden sind, hat shared_users.txt Vorrang. Führen Sie das Skript ohne Argumente aus:

    $ sudo ./create_users.sh

    Das Skript validiert die Dateieinträge, bestätigt die Erstellung, fordert zum Zugriff auf Sudoer auf und bietet an, Benutzer hinzuzufügen, die nicht in der Datei enthalten sind. Dann erstellt es user1 und user2 auf allen Knoten mit den UIDs aus der Datei (2001 und 2002), richtet SSH-Schlüsselpaare ein, registriert sie bei Slurm Accounting und aktualisiert sie. shared_users.txt

    interaktiver Modus

    Führt das Skript ohne Argumente und ohne Benutzerdatei aus. Das Skript fordert Sie auf, die Benutzernamen und optional die zuzuweisenden UIDs einzugeben:

    $ sudo ./create_users.sh
    ======================================== Step 1: User Configuration ======================================== No shared_users.txt or shared_users.yaml found. Entering interactive mode... Enter username(s), comma-separated (e.g. 'sean' or 'sean,alice,bob'): user1,user2 Specify UIDs? (Enter for auto-assign, or comma-separated UIDs): 2001,2002 Make these user(s) sudoer(s)? (y/N): n

    Nachdem Sie die Eingabeaufforderungen beantwortet haben, erstellt user1 das Skript user2 auf allen Knoten die von Ihnen eingegebenen UIDs, richtet SSH-Schlüsselpaare ein, registriert sie bei Slurm Accounting und aktualisiert sie. shared_users.txt

  3. Testen Sie einen Benutzer, indem Sie zu ihm wechseln und einen Befehl im gesamten Cluster ausführen.

    $ sudo su - user1 && ssh $(srun hostname)
Anmerkung

Das Skript ist idempotent. Bereits existierende Benutzer werden übersprungen, und bestehende SSH-Schlüssel und Slurm-Buchhaltungszuordnungen werden beibehalten, sodass es sicher erneut ausgeführt werden kann.

Option B: Fügen Sie Benutzer mit dem Erweiterungsskript „add-users“ hinzu

Verwenden Sie diese Option, wenn Ihr Cluster die AMI-based Konfiguration verwendet und Sie möchten, dass Benutzer automatisch bereitgestellt werden. SageMaker HyperPod Führt mit der Option „Verlängerungslebenszyklus“ zuerst die vollständige AMI-based Konfiguration aus und führt dann Ihr Erweiterungsskript aus. Das Serviceteam stellt im Ordner Extensions des Awsome Distributed Training Repositorys auf der Website eine gebrauchsfertige Erweiterung für Add-Users bereit. GitHub Da die Erweiterung während der Knotenbereitstellung ausgeführt wird, werden Benutzer automatisch erstellt, wenn der Cluster erstellt wird, und erneut auf allen neuen Knoten, die während des Scale-Outs hinzugefügt werden.

Weitere Informationen zum Einrichten von Erweiterungen finden Sie unter:

  • Informationen zum Einrichten von Erweiterungen mithilfe der AWS Konsole finden Sie unter Lifecycle-Konfiguration — optional unter Benutzerdefiniertes Setup.

  • Informationen zum Einrichten von Erweiterungen mithilfe der API finden Sie unter Option B: AMI-based Konfiguration erweitern mit OnInitComplete unter Create your cluster.

Die add-users Erweiterung erstellt POSIX-Benutzer mit konsistenten UIDs, richtet Home-Verzeichnisse auf dem gemeinsam genutzten Dateisystem ein, generiert SSH-Schlüsselpaare für passwortloses SSH zwischen Knoten und registriert Benutzer mit Slurm-Konten auf dem Controller. Sie akzeptiert zwei Eingabeformate:

  • shared_users.txt— dasselbe CSV-Format, das von den Basis-Lifecycle-Skripten verwendet wird (username,uid,/fsx/username). Alle Benutzer werden dem root Slurm-Konto hinzugefügt.

  • shared_users.yaml— ein YAML-Format, das zusätzlich die Organisation von Benutzern in Gruppen mit gruppenspezifischen Slurm-Konten und Dateisystem-Mounts unterstützt. Gruppen dienen nur organisatorischen Zwecken; sie bilden keine Linux-Gruppen.

Das Folgende ist ein Beispiel für die shared_users.yaml Verwendung des Gruppenformats:

groups: - name: research slurm_account: research users: - username: user1 uid: 2001 - username: user2 uid: 2002 - name: platform slurm_account: platform users: - username: user3 uid: 3001
Um Benutzer mit der Erweiterung „Add-Users“ bei der Clustererstellung hinzuzufügen

Führen Sie folgende Schritte aus:

  1. Kopieren Sie die entsprechende Beispieldatei in das add-users Verzeichnis und bearbeiten Sie sie mit Ihren Benutzern:

    $ cp shared_users_sample.yaml shared_users.yaml
  2. Laden Sie das add-users Verzeichnis in Ihren Amazon S3-Bucket für Lifecycle-Skripts hoch (der Bucket-Pfad muss mit beginnens3://sagemaker-):

    $ aws s3 cp add-users/ s3://DOC-EXAMPLE-BUCKET/add-users/ --recursive
  3. Geben Sie die Erweiterung im LifeCycleConfig Block Ihrer CreateCluster Anfrage an und verwenden Sie add_users.sh als OnInitComplete Skript:

    "LifeCycleConfig": { "OnInitComplete": "add_users.sh", "SourceS3Uri": "s3://DOC-EXAMPLE-BUCKET/add-users/" }
Tipp

Wenn Ihr Cluster zusätzlich zur Benutzererstellung mehrere Funktionen benötigt (z. B. Observability), laden Sie den gesamten Erweiterungsordner hoch und verwenden Sie den run_extensions.sh Orchestrator als Erweiterungsskript. Es bietet einfache boolesche Schalter, um beispielsweise jede Funktion zu aktivieren. ENABLE_ADD_USERS="true" Details hierzu finden Sie unter Erste Schritte mit der SageMaker HyperPod Verwendung von AWS CLI.

Um Benutzer nach der Erstellung zu einem vorhandenen Cluster hinzuzufügen

Da die Erweiterung nur während der Knotenbereitstellung ausgeführt wird, müssen Sie die Erweiterung manuell ausführen, um Benutzer zu Knoten hinzuzufügen, die bereits laufen.

  1. Aktualisieren Sie Ihre Benutzerdatei mit den neuen Benutzern (behalten Sie die vorhandenen Benutzer in der Datei bei) und laden Sie sie auf Amazon S3 hoch:

    $ aws s3 cp add-users/shared_users.yaml s3://DOC-EXAMPLE-BUCKET/add-users/shared_users.yaml
  2. Stellen Sie eine Verbindung zum Controller-Knoten her und ziehen Sie die Skripts in das gemeinsam genutzte Dateisystem:

    $ sudo mkdir -p /fsx/cluster-scripts/add-users sudo aws s3 cp s3://DOC-EXAMPLE-BUCKET/add-users/ /fsx/cluster-scripts/add-users/ --recursive sudo chmod +x /fsx/cluster-scripts/add-users/*.sh
  3. Führen Sie die Erweiterung auf dem Controller aus:

    $ sudo bash /fsx/cluster-scripts/add-users/add_users.sh
  4. Führen Sie die Erweiterung auf den Rechenknoten aus mitsrun:

    $ sudo srun --partition=partition-name bash /fsx/cluster-scripts/add-users/add_users.sh

Die Skripte überspringen bestehende Benutzer und erstellen nur neue; sie sind idempotent.

Option C: Fügen Sie Benutzer mit den Basis-Lifecycle-Skripten hinzu

Verwenden Sie diese Option nur, wenn Ihr Cluster bereits den vollständigen Satz benutzerdefinierter Basislebenszyklus-Skripts verwendet, wobei Ihre Skripts die gesamte Bereitstellungssequenz besitzen. Dies ist die fortschrittlichste Option, da Sie den kompletten Lifecycle-Skriptsatz und nicht eine einzelne Erweiterung verwalten. Das Serviceteam stellt das Skript add_users.sh auf der GitHub Website als ein Skript innerhalb des Base-Config-Lifecycle-Skriptsatzes bereit. Während der Clustererstellung, Cluster-Aktualisierung oder Cluster-Softwareupdate wird das Lifecycle-Skript runner (lifecycle_script.py) ausgeführtadd_users.sh, das eine shared_users.txt Datei liest und die Benutzer und ihre Home-Verzeichnisse erstellt.

In dieser Option add_users.sh behandelt es nur die Erstellung von POSIX-Benutzern und Basisverzeichnissen. Die Generierung von SSH-Schlüsselpaaren für kennwortloses SSH zwischen Knoten ist ein separates Modul im Basis-Lifecycle-Skriptsatz (z. B.gen-keypair-ubuntu.sh), das der Lifecycle-Skript-Runner als Teil des vollständigen Satzes aufruft. Stellen Sie sicher, dass das SSH-Schlüsselmodul in Ihrem Lifecycle-Skriptsatz enthalten ist, damit Benutzer Schlüsselpaare im gemeinsam genutzten Dateisystem erhalten.

Weitere Informationen zum Einrichten des vollständigen benutzerdefinierten Lifecycle-Skriptsatzes finden Sie unter:

  • Informationen zum Einrichten von Lifecycle-Skripten mithilfe der AWS Konsole finden Sie unter Lifecycle-Konfiguration — optional unter Benutzerdefiniertes Setup.

  • Informationen zum Einrichten von Lifecycle-Skripten mithilfe der API finden Sie unter Option C: Vollständige benutzerdefinierte Kontrolle OnCreate unter Create your cluster.

Um Benutzer während der Erstellung eines Slurm-Clusters zu erstellen

Führen Sie folgende Schritte aus:

  1. Laden Sie das https://github.com/awslabs/awsome-distributed-training/tree/main/1.architectures/5.sagemaker-hyperpod/LifecycleScripts/base-config Base-Config-Lifecycle-Skriptset von der Website herunter. GitHub Mit dieser Option laden Sie den gesamten Base-Config-Ordner als Ihren Lifecycle-Skriptsatz hoch, nicht nur. add_users.sh

  2. Erstellen oder bearbeiten Sie im Ordner base-config eine Textdatei mit dem folgenden Namenshared_users.txt. Die erste Spalte enthält den Benutzernamen, die zweite Spalte die eindeutige Benutzer-ID und die dritte Spalte ist das Benutzerverzeichnis im Amazon FSx Shared Space.

    username1,uid1,/fsx/username1 username2,uid2,/fsx/username2 ...

    add_users.shliest shared_users.txt aus demselben Ordner, daher muss sich die Datei zusammen mit dem Skript in base-config befinden.

  3. Laden Sie den gesamten Ordner base-config für Ihre Lifecycle-Skripte in den Amazon S3-Bucket hoch. HyperPod Während der Cluster-Erstellung, Cluster-Aktualisierung oder Cluster-Software-Aktualisierung wird der Lifecycle-Skript-Runner ausgeführtadd_users.sh, der die Benutzer shared_users.txt und ihre Home-Verzeichnisse liest und einrichtet.

Anmerkung

add_users.sherkennt automatisch das gemeinsam genutzte Dateisystem: Wenn OpenZFS dort gemountet ist, erstellt /home es dort Home-Verzeichnisse; andernfalls verwendet es den Amazon FSx for Lustre-Pfad.