Tutorial zum Modus mit mehreren Warteschlangen - AWS ParallelCluster

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.

Tutorial zum Modus mit mehreren Warteschlangen

Weiteres Ausführen Ihrer Jobs im Modus AWS ParallelCluster mit mehreren Warteschlangen

Dieses Tutorial führt Sie durch die Ausführung Ihres ersten Hello World-Jobs AWS ParallelCluster mitModus mit mehreren Warteschlangen.

Voraussetzungen
Anmerkung

Der Modus mit mehreren Warteschlangen wird nur für AWS ParallelCluster Version 2.9.0 oder höher unterstützt.

Konfiguration Ihres Clusters

Stellen Sie zunächst sicher, dass die Installation korrekt AWS ParallelCluster ist, indem Sie den folgenden Befehl ausführen.

$ pcluster version

Mehr über pcluster version erfahren Sie unter pcluster version.

Dieser Befehl gibt die laufende Version von zurückAWS ParallelCluster.

Führen Sie als Nächstes pcluster configure den Befehl aus, um eine grundlegende Konfigurationsdatei zu generieren. Folgen Sie allen Anweisungen, die diesem Befehl folgen.

$ pcluster configure

Weitere Informationen zum Befehl pcluster configure finden Sie unter pcluster configure.

Nachdem Sie diesen Schritt abgeschlossen haben, sollten Sie eine grundlegende Konfigurationsdatei unter haben~/.parallelcluster/config. Diese Datei sollte grundlegende Clusterkonfigurationen und einen VPC-Abschnitt enthalten.

Im nächsten Teil des Tutorials wird beschrieben, wie Sie Ihre neu erstellte Konfiguration ändern und einen Cluster mit mehreren Warteschlangen starten.

Anmerkung

Für einige Instanzen, die in diesem Tutorial verwendet werden, gilt das kostenlose Kontingent nicht.

Verwenden Sie für dieses Tutorial die folgende Konfiguration.

[global] update_check = true sanity_check = true cluster_template = multi-queue [aws] aws_region_name = <Your AWS-Region> [scaling demo] scaledown_idletime = 5 # optional, defaults to 10 minutes [cluster multi-queue-special] key_name = < Your key name > base_os = alinux2 # optional, defaults to alinux2 scheduler = slurm master_instance_type = c5.xlarge # optional, defaults to t2.micro vpc_settings = <Your VPC section> scaling_settings = demo # optional, defaults to no custom scaling settings queue_settings = efa,gpu [cluster multi-queue] key_name = <Your SSH key name> base_os = alinux2 # optional, defaults to alinux2 scheduler = slurm master_instance_type = c5.xlarge # optional, defaults to t2.micro vpc_settings = <Your VPC section> scaling_settings = demo queue_settings = spot,ondemand [queue spot] compute_resource_settings = spot_i1,spot_i2 compute_type = spot # optional, defaults to ondemand [compute_resource spot_i1] instance_type = c5.xlarge min_count = 0 # optional, defaults to 0 max_count = 10 # optional, defaults to 10 [compute_resource spot_i2] instance_type = t2.micro min_count = 1 initial_count = 2 [queue ondemand] compute_resource_settings = ondemand_i1 disable_hyperthreading = true # optional, defaults to false [compute_resource ondemand_i1] instance_type = c5.2xlarge

Erstellen Sie Ihren Cluster

In diesem Abschnitt wird beschrieben, wie Sie den Cluster für den Modus mit mehreren Warteschlangen erstellen.

Benennen Sie zunächst Ihren Cluster multi-queue-hello-world und erstellen Sie den Cluster gemäß dem multi-queue Cluster-Abschnitt, der im vorherigen Abschnitt definiert wurde.

$ pcluster create multi-queue-hello-world -t multi-queue

Mehr über pcluster create erfahren Sie unter pcluster create.

Wenn der Cluster erstellt wird, wird die folgende Ausgabe angezeigt:

Beginning cluster creation for cluster: multi-queue-hello-world Creating stack named: parallelcluster-multi-queue-hello-world Status: parallelcluster-multi-queue-hello-world - CREATE_COMPLETE MasterPublicIP: 3.130.xxx.xx ClusterUser: ec2-user MasterPrivateIP: 172.31.xx.xx

Die Meldung CREATE_COMPLETE weist darauf hin, dass der Cluster erfolgreich erstellt wurde. Die Ausgabe liefert auch die öffentlichen und privaten IP-Adressen des Hauptknotens.

Loggen Sie sich in Ihren Hauptknoten ein

Verwenden Sie Ihre private SSH-Schlüsseldatei, um sich bei Ihrem Hauptknoten anzumelden.

$ pcluster ssh multi-queue-hello-world -i ~/path/to/keyfile.pem

Mehr über pcluster ssh erfahren Sie unter pcluster ssh.

Führen Sie nach der Anmeldung den sinfo Befehl aus, um zu überprüfen, ob Ihre Scheduler-Warteschlangen eingerichtet und konfiguriert sind.

Weitere Informationen zu sinfo finden Sie unter sinfo in der SlurmDokumentation.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10] spot* up infinite 18 idle~ spot-dy-c5xlarge-[1-10],spot-dy-t2micro-[2-9] spot* up infinite 2 idle spot-dy-t2micro-1,spot-st-t2micro-1

Die Ausgabe zeigt, dass Sie zwei t2.micro Rechenknoten im idle Status haben, die in Ihrem Cluster verfügbar sind.

Anmerkung
  • spot-st-t2micro-1ist ein statischer Knoten mit st in seinem Namen. Dieser Knoten ist immer verfügbar und entspricht dem min_count = 1 in Ihrer Cluster-Konfiguration.

  • spot-dy-t2micro-1ist ein dynamischer Knoten mit dy in seinem Namen. Dieser Knoten ist derzeit verfügbar, da er Ihrer Clusterkonfiguration entspricht. initial_count - min_count = 1 Dieser Knoten wird nach Ihrem benutzerdefinierten Zeitraum scaledown_idletime von fünf Minuten herunterskaliert.

Andere Knoten befinden sich alle im Energiesparmodus, was durch das ~ Suffix im Knotenstatus gekennzeichnet ist, ohne dass sie von EC2-Instances unterstützt werden. Die Standardwarteschlange wird durch ein * Suffix hinter ihrem Warteschlangennamen gekennzeichnet, ebenso spot wie Ihre Standard-Job-Warteschlange.

Job im Modus mit mehreren Warteschlangen ausführen

Versuchen Sie als Nächstes, einen Job für eine Weile im Schlaf auszuführen. Der Job gibt später seinen eigenen Hostnamen aus. Stellen Sie sicher, dass dieses Skript vom aktuellen Benutzer ausgeführt werden kann.

$ cat hellojob.sh #!/bin/bash sleep 30 echo "Hello World from $(hostname)" $ chmod +x hellojob.sh $ ls -l hellojob.sh -rwxrwxr-x 1 ec2-user ec2-user 57 Sep 23 21:57 hellojob.sh

Senden Sie den Job mit dem sbatch Befehl. Fordern Sie zwei Knoten für diesen Job mit der -N 2 Option an und stellen Sie sicher, dass der Job erfolgreich übermittelt wurde. Weitere Informationen sbatch dazu finden Sie sbatchin der Slurm-Dokumentation.

$ sbatch -N 2 --wrap "srun hellojob.sh" Submitted batch job 2

Mit dem squeue Befehl können Sie Ihre Warteschlange einsehen und den Status des Jobs überprüfen. Beachten Sie, dass die Standardqueue (spot) verwendet wird, da Sie keine bestimmte Warteschlange angegeben haben. Weitere Informationen squeue dazu finden Sie squeuein der SlurmDokumentation.

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 spot wrap ec2-user R 0:10 2 spot-dy-t2micro-1,spot-st-t2micro-1

Die Ausgabe zeigt, dass die Aufgabe zurzeit ausgeführt wird. Warten Sie 30 Sekunden, bis die Aufgabe beendet wird, und führen Sie squeue dann erneut aus.

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)

Nachdem alle Jobs in der Warteschlange abgeschlossen sind, suchen Sie slurm-2.out in Ihrem aktuellen Verzeichnis nach der Ausgabedatei.

$ cat slurm-2.out Hello World from spot-dy-t2micro-1 Hello World from spot-st-t2micro-1

Die Ausgabe zeigt auch, dass unser Job auf den spot-st-t2micro-2 Knoten spot-st-t2micro-1 und erfolgreich ausgeführt wurde.

Reichen Sie nun denselben Job ein, indem Sie mit den folgenden Befehlen Einschränkungen für bestimmte Instanzen angeben.

$ sbatch -N 3 -p spot -C "[c5.xlarge*1&t2.micro*2]" --wrap "srun hellojob.sh" Submitted batch job 3

Sie haben diese Parameter für verwendetsbatch.

  • -N 3— fordert drei Knoten an

  • -p spot— leitet den Job an die spot Warteschlange weiter. Sie können einen Job auch an die ondemand Warteschlange weiterleiten, indem Sie Folgendes angeben-p ondemand.

  • -C "[c5.xlarge*1&t2.micro*2]"— gibt die spezifischen Knoteneinschränkungen für diesen Job an. Dadurch werden ein (1) c5.xlarge Knoten und zwei (2) t2.micro Knoten zur Verwendung für diesen Job angefordert.

Führen Sie den sinfo Befehl aus, um die Knoten und Warteschlangen anzuzeigen. (Warteschlangen AWS ParallelCluster werden als Partitionen in bezeichnet.) Slurm

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10] spot* up infinite 1 mix# spot-dy-c5xlarge-1 spot* up infinite 17 idle~ spot-dy-c5xlarge-[2-10],spot-dy-t2micro-[2-9] spot* up infinite 2 alloc spot-dy-t2micro-1,spot-st-t2micro-1

Die Knoten werden hochgefahren. Dies wird durch das # Suffix im Knotenstatus angezeigt. Führen Sie den squeue Befehl aus, um Informationen zu den Jobs im Cluster anzuzeigen.

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 3 spot wrap ec2-user CF 0:04 3 spot-dy-c5xlarge-1,spot-dy-t2micro-1,spot-st-t2micro-1

Ihr Job befindet sich im Status CF (CONFIGURING) und wartet darauf, dass die Instanzen skaliert werden und dem Cluster beitreten.

Nach etwa drei Minuten sollten die Knoten verfügbar sein und der Job wechselt in den Status R (RUNNING).

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10] spot* up infinite 17 idle~ spot-dy-c5xlarge-[2-10],spot-dy-t2micro-[2-9] spot* up infinite 1 mix spot-dy-c5xlarge-1 spot* up infinite 2 alloc spot-dy-t2micro-1,spot-st-t2micro-1 $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 3 spot wrap ec2-user R 0:04 3 spot-dy-c5xlarge-1,spot-dy-t2micro-1,spot-st-t2micro-1

Der Job ist abgeschlossen und alle drei Knoten befinden sich im idle Bundesstaat.

$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10] spot* up infinite 17 idle~ spot-dy-c5xlarge-[2-10],spot-dy-t2micro-[2-9] spot* up infinite 3 idle spot-dy-c5xlarge-1,spot-dy-t2micro-1,spot-st-t2micro-1

Wenn sich keine Jobs mehr in der Warteschlange befinden, können Sie slurm-3.out in Ihrem lokalen Verzeichnis nach Jobs suchen.

$ cat slurm-3.out Hello World from spot-dy-c5xlarge-1 Hello World from spot-st-t2micro-1 Hello World from spot-dy-t2micro-1

Die Ausgabe zeigt auch, dass der Job auf den entsprechenden Knoten erfolgreich ausgeführt wurde.

Sie können den Prozess des Herunterskalierens beobachten. In Ihrer Clusterkonfiguration haben Sie einen benutzerdefinierten Wert scaledown_idletime von 5 Minuten angegeben. Nach fünf Minuten im Ruhezustand skalieren Ihre dynamischen Knoten spot-dy-c5xlarge-1 spot-dy-t2micro-1 automatisch nach unten und wechseln in den POWER_DOWN Modus. Beachten Sie, dass der statische Knoten spot-st-t2micro-1 nicht herunterskaliert wird.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10] spot* up infinite 2 idle% spot-dy-c5xlarge-1,spot-dy-t2micro-1 spot* up infinite 17 idle~ spot-dy-c5xlarge-[2-10],spot-dy-t2micro-[2-9] spot* up infinite 1 idle spot-st-t2micro-1

Aus dem obigen Code können Sie das sehen spot-dy-c5xlarge-1 und spot-dy-t2micro-1 befinden sich im POWER_DOWN Modus. Dies wird durch das % Suffix angezeigt. Die entsprechenden Instanzen werden sofort beendet, aber die Knoten bleiben im POWER_DOWN Status und können 120 Sekunden (zwei Minuten) lang nicht verwendet werden. Nach dieser Zeit kehren die Knoten in den Energiesparmodus zurück und können wieder verwendet werden. Weitere Informationen finden Sie unter Slurm Leitfaden für den Modus mit mehreren Warteschlangen.

Dies sollte der endgültige Status des Clusters sein:

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST ondemand up infinite 10 idle~ ondemand-dy-c52xlarge-[1-10] spot* up infinite 19 idle~ spot-dy-c5xlarge-[1-10],spot-dy-t2micro-[1-9] spot* up infinite 1 idle spot-st-t2micro-1

Nachdem Sie sich vom Cluster abgemeldet haben, können Sie den Vorgang ausführenpcluster delete. Weitere Informationen zu pcluster list und pcluster delete finden Sie unter pcluster list undpcluster delete.

$ pcluster list multi-queue CREATE_COMPLETE 2.11.9 $ pcluster delete multi-queue Deleting: multi-queue ...

Ausführen von Jobs im Cluster mit EFA- und GPU-Instances

In diesem Teil des Tutorials wird beschrieben, wie Sie die Konfiguration ändern und einen Cluster mit mehreren Warteschlangen starten, der Instances mit EFA-Netzwerk- und GPU-Ressourcen enthält. Beachten Sie, dass es sich bei den in diesem Tutorial verwendeten Instances um teurere Instances handelt.

Überprüfe deine Kontolimits, um sicherzustellen, dass du zur Nutzung dieser Instanzen autorisiert bist, bevor du mit den in diesem Tutorial beschriebenen Schritten fortfährst.

Ändern Sie die Konfigurationsdatei wie folgt.

[global] update_check = true sanity_check = true cluster_template = multi-queue-special [aws] aws_region_name = <Your AWS-Region> [scaling demo] scaledown_idletime = 5 [cluster multi-queue-special] key_name = <Your SSH key name> base_os = alinux2 # optional, defaults to alinux2 scheduler = slurm master_instance_type = c5.xlarge # optional, defaults to t2.micro vpc_settings = <Your VPC section> scaling_settings = demo queue_settings = efa,gpu [queue gpu] compute_resource_settings = gpu_i1 disable_hyperthreading = true # optional, defaults to false [compute_resource gpu_i1] instance_type = g3.8xlarge [queue efa] compute_resource_settings = efa_i1 enable_efa = true placement_group = DYNAMIC # optional, defaults to no placement group settings [compute_resource efa_i1] instance_type = c5n.18xlarge max_count = 5

Erstellen Sie den Cluster

$ pcluster create multi-queue-special -t multi-queue-special

Nachdem der Cluster erstellt wurde, verwenden Sie Ihre private SSH-Schlüsseldatei, um sich bei Ihrem Hauptknoten anzumelden.

$ pcluster ssh multi-queue-special -i ~/path/to/keyfile.pem

Dies sollte der Anfangszustand des Clusters sein:

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 5 idle~ efa-dy-c5n18xlarge-[1-5] gpu up infinite 10 idle~ gpu-dy-g38xlarge-[1-10]

In diesem Abschnitt wird beschrieben, wie Sie einige Jobs einreichen, um zu überprüfen, ob die Knoten über EFA- oder GPU-Ressourcen verfügen.

Schreiben Sie zunächst die Job-Skripts. efa_job.shwird 30 Sekunden schlafen. Suchen Sie danach in der Ausgabe des lspci Befehls nach EFA. gpu_job.shwird 30 Sekunden schlafen. Führen Sie anschließend den Befehl aus, nvidia-smi um die GPU-Informationen über den Knoten anzuzeigen.

$ cat efa_job.sh #!/bin/bash sleep 30 lspci | grep "EFA" $ cat gpu_job.sh #!/bin/bash sleep 30 nvidia-smi $ chmod +x efa_job.sh $ chmod +x gpu_job.sh

Reichen Sie den Job ein mitsbatch,

$ sbatch -p efa --wrap "srun efa_job.sh" Submitted batch job 2 $ sbatch -p gpu --wrap "srun gpu_job.sh" -G 1 Submitted batch job 3 $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 efa wrap ec2-user CF 0:32 1 efa-dy-c5n18xlarge-1 3 gpu wrap ec2-user CF 0:20 1 gpu-dy-g38xlarge-1 $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 1 mix# efa-dy-c5n18xlarge-1 efa* up infinite 4 idle~ efa-dy-c5n18xlarge-[2-5] gpu up infinite 1 mix# gpu-dy-g38xlarge-1 gpu up infinite 9 idle~ gpu-dy-g38xlarge-[2-10]

Nach ein paar Minuten sollten Sie sehen, dass die Knoten online sind und die Jobs ausgeführt werden.

[ec2-user@ip-172-31-15-251 ~]$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 4 idle~ efa-dy-c5n18xlarge-[2-5] efa* up infinite 1 mix efa-dy-c5n18xlarge-1 gpu up infinite 9 idle~ gpu-dy-g38xlarge-[2-10] gpu up infinite 1 mix gpu-dy-g38xlarge-1 [ec2-user@ip-172-31-15-251 ~]$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 4 gpu wrap ec2-user R 0:06 1 gpu-dy-g38xlarge-1 5 efa wrap ec2-user R 0:01 1 efa-dy-c5n18xlarge-1

Überprüfen Sie nach Abschluss des Jobs die Ausgabe. Aus der Ausgabe in der slurm-2.out Datei können Sie erkennen, dass EFA auf dem efa-dy-c5n18xlarge-1 Knoten vorhanden ist. Aus der Ausgabe in der slurm-3.out Datei können Sie sehen, dass die nvidia-smi Ausgabe GPU-Informationen für den gpu-dy-g38xlarge-1 Knoten enthält.

$ cat slurm-2.out 00:06.0 Ethernet controller: Amazon.com, Inc. Elastic Fabric Adapter (EFA) $ cat slurm-3.out Thu Oct 1 22:19:18 2020 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 450.51.05 Driver Version: 450.51.05 CUDA Version: 11.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla M60 Off | 00000000:00:1D.0 Off | 0 | | N/A 28C P0 38W / 150W | 0MiB / 7618MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ | 1 Tesla M60 Off | 00000000:00:1E.0 Off | 0 | | N/A 36C P0 37W / 150W | 0MiB / 7618MiB | 98% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+

Sie können den Prozess des Herunterskalierens beobachten. In der Clusterkonfiguration haben Sie zuvor einen benutzerdefinierten Wert scaledown_idletime von fünf Minuten angegeben. Infolgedessen skalieren Ihre dynamischen Knoten nach fünf Minuten im Ruhezustand automatisch nach unten und wechseln in den POWER_DOWN Modus. spot-dy-c5xlarge-1 spot-dy-t2micro-1 Schließlich wechseln die Knoten in den Energiesparmodus und können wieder verwendet werden.

$ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 1 idle% efa-dy-c5n18xlarge-1 efa* up infinite 4 idle~ efa-dy-c5n18xlarge-[2-5] gpu up infinite 1 idle% gpu-dy-g38xlarge-1 gpu up infinite 9 idle~ gpu-dy-g38xlarge-[2-10] # After 120 seconds $ sinfo PARTITION AVAIL TIMELIMIT NODES STATE NODELIST efa* up infinite 5 idle~ efa-dy-c5n18xlarge-[1-5] gpu up infinite 10 idle~ gpu-dy-g38xlarge-[1-10]

Nachdem Sie sich vom Cluster abgemeldet haben, können Sie den Vorgang ausführenpcluster delete <cluster name>.

$ pcluster list multi-queue-special CREATE_COMPLETE 2.11.9 $ pcluster delete multi-queue-special Deleting: multi-queue-special ...

Weitere Informationen finden Sie unter Slurm Leitfaden für den Modus mit mehreren Warteschlangen.