Blog

Hochleistungs-Computing auf AWS

Steyn Huizinga

Aktualisiert Oktober 15, 2025
11 Minuten

Wie unterscheidet sich High-Performance Computing auf AWS vom normalen Computing?

Die heutige Serverhardware ist leistungsfähig genug, um die meisten Rechenaufgaben auszuführen. Mit gängigen Rechenressourcen können die meisten (seriellen) Rechenaufgaben gelöst werden. Einige Aufgaben sind jedoch sehr komplex und erfordern einen anderen Ansatz. Denken Sie an Fälle, die eine verbesserte Geschwindigkeit und Effizienz, die Fähigkeit zur Verarbeitung großer Datenmengen und Flexibilität usw. erfordern. Hierfür bringt HPC massiv paralleles Computing, Cluster- und Workload-Manager und Hochleistungskomponenten ins Spiel.

Warum HPC und Cloud gut zusammenpassen

  • Die Einrichtung von HPC in der Cloud erfordert keine Vorabinvestitionen (CAPEX).
  • Keine veraltete Infrastruktur. Mit einer öffentlichen Cloud haben Sie Zugriff auf die neuesten Komponenten, die nicht nur eine bessere Leistung, sondern auch ein besseres Preis-Leistungs-Verhältnis bieten.
  • Geringere laufende Kosten. Umgebungen können beendet werden, sobald der Auftrag ausgeführt wurde. Dadurch werden die Betriebs- und Verwaltungskosten gesenkt.
  • Ressourcen sind auf Abruf verfügbar, es gibt keine Bestell-/Wartezeit für die Bereitstellung von Ressourcen.
  • Die Sicherheitsfunktionen der Cloud können genutzt werden, um Sicherheitskontrollen auf Auftragsebene (Richtlinien, Verschlüsselung usw.) zu ermöglichen.

HPC-Grundlagen

Modernes HPC besteht aus den folgenden Komponenten:

  • Hauptknoten - zur Konfiguration von Aufträgen und zur Orchestrierung verteilter Aufträge
  • Rechenknoten - um die schwere Arbeit zu erledigen
  • GPUs - zur Beschleunigung von Berechnungen
  • Optimierter Speicher - entweder lokaler/gemeinsamer Speicher mit niedriger Latenz oder Blob-Speicher (S3)
  • Netzwerk - für konsistente Latenz und Durchsatz
  • Container - zur Bündelung von Anwendungen und Abhängigkeiten
  • Linux - wissenschaftliche Software basiert oft auf Linux-Distributionen

In den nächsten Kapiteln wird dies auf AWS-Ressourcen übertragen.

HPC-Dienste auf AWS

Berechnen Sie

Technisch gesehen könnten Sie Ihren eigenen HPC-Cluster auf AWS entwerfen und bauen. Es wird funktionieren, aber Sie werden viel Zeit mit Klempnerarbeiten und undifferenziertem Heavy Lifting verbringen. Der wahre Wert der Cloud liegt in der Nutzung von Abstraktionsdiensten auf höherer Ebene. AWS bietet zwei Services zur Unterstützung Ihrer HPC-Arbeitslast.

AWS Stapel

AWS Batch ist ein vollständig verwalteter Service, der die Ausführung von Batch-Computing-Arbeitslasten über AWS-Services hinweg vereinfacht. Er bietet eine leistungsstarke und skalierbare Plattform für die Ausführung umfangreicher Batch-Aufträge mit minimalem Einrichtungs- und Verwaltungsaufwand. Mit AWS Batch müssen Sie keine Batch-Computing-Software installieren oder verwalten, so dass Sie Ihre Zeit auf die Analyse von Ergebnissen und die Lösung von Problemen konzentrieren können.

Die wichtigsten Funktionen von AWS Batch

  • Effizientes Ressourcenmanagement: AWS Batch stellt automatisch die erforderlichen Ressourcen wie Recheninstanzen und Speicherplatz auf der Grundlage der Auftragsanforderungen bereit. Es skaliert die Ressourcen dynamisch nach oben und unten und sorgt so für optimale Auslastung und Kosteneffizienz.
  • Auftragsplanung und Prioritätensetzung: Mit AWS Batch können Sie Auftragswarteschlangen, Prioritäten und Abhängigkeiten definieren, was eine effiziente Planung und Ausführung von Aufträgen ermöglicht. Dadurch wird sichergestellt, dass wichtige Aufgaben priorisiert und auf die effektivste Weise ausgeführt werden.
  • Integration mit AWS-Diensten: AWS Batch lässt sich nahtlos in andere AWS-Services wie Amazon S3, AWS Lambda und Amazon DynamoDB integrieren. So können Sie End-to-End-Workflows erstellen, die das gesamte Spektrum der AWS-Funktionen für Datenverarbeitung, Speicherung und Analyse nutzen.

AWS Batch besteht aus den folgenden Komponenten:

Jobs

Ein Job ist eine Arbeitseinheit, die als containerisierte Anwendung auf AWS Fargate oder Amazon EC2 in Ihrer Datenverarbeitungsumgebung ausgeführt wird. Jobs können Artefakte wie Docker-Container-Images, Shell-Skripte oder reguläre ausführbare Linux-Dateien sein.

Job-Definitionen

AWS Batch-Auftragsdefinitionen legen fest, wie Aufträge ausgeführt werden sollen. Jeder Auftrag verweist auf eine Auftragsdefinition. Die Definition umfasst Konfigurationen wie CPU, Speicher, Orchestrierungstyp, parallele Ausführung mit mehreren Knoten, Ausführungszeitüberschreitungen, Prioritäten, Wiederholungsbedingungen, Zielknoten, Speichervolumen, (EKS-)Container-Konfiguration, Geheimnisse usw. Zu guter Letzt konfigurieren Sie IAM-Rollen und Richtlinien. Viele der Parameter können während der Laufzeit überschrieben werden.

Auftragswarteschlangen

Zunächst werden Aufträge an eine Auftragswarteschlange übermittelt. Jedes AWS-Konto kann mehrere Warteschlangen beherbergen, mit denen Sie zum Beispiel Warteschlangen mit hoher und niedriger Priorität konfigurieren können, die jeweils eigene Merkmale aufweisen. Die Aufträge verbleiben in der Warteschlange, bis sie für die Ausführung in der Rechenumgebung geplant werden können.

Compute-Umgebung

Compute-Umgebungen sind mit einer Job-Warteschlange verbunden (eine oder mehrere Umgebungen pro Warteschlange und/oder eine oder mehrere Warteschlangen pro Umgebung). Jede Umgebung kann unterschiedliche Spezifikationen/Konfigurationen haben. Vorzugsweise werden verwaltete Datenverarbeitungsumgebungen verwendet. Damit verwaltet AWS Batch Kapazität und Instanztypen. Es kann auch EC2 On-Demand-Instanzen und EC2 Spot-Instanzen in Ihrem Namen verwalten, wählt das richtige AMI aus, da es GPU-optimierte AMIs für Instanztypen mit GPU-Beschleunigung verwendet. Es ist auch möglich, Ihren eigenen ECS-Cluster zu verwenden, indem Sie nicht verwaltete Rechenumgebungen konfigurieren.

Richtlinien zur Terminplanung

Mithilfe von Planungsrichtlinien können Sie konfigurieren, wie Aufträge in der Warteschlange zugewiesen werden und wie die Ressourcen zwischen Aufträgen/Benutzern aufgeteilt werden.

AWS ParallelCluster

AWS ParallelCluster ist ein Open-Source-Cluster-Management-Tool, das die Erstellung und Verwaltung von HPC-Clustern (High Performance Computing) vereinfacht. Es ermöglicht Benutzern die Einrichtung von Clustern in wenigen einfachen Schritten und automatisiert den Prozess der Bereitstellung und Konfiguration der erforderlichen Ressourcen.

Hauptmerkmale von AWS ParallelCluster

  • Flexibilität und Anpassbarkeit: AWS ParallelCluster unterstützt eine breite Palette von Anwendungen und Frameworks, darunter so beliebte wie MPI, TensorFlow und Apache Hadoop. Diese Flexibilität ermöglicht es Ihnen, maßgeschneiderte Umgebungen zu erstellen, die Ihren spezifischen Anforderungen entsprechen. Es unterstützt Slurm Workload Manager und AWS Batch als Scheduler.
  • Skalierbarkeit: Mit AWS ParallelCluster können Sie Ihre Cluster je nach Arbeitslastanforderung problemlos vergrößern oder verkleinern. Der Service ist mit AWS Auto Scaling integriert, so dass Sie die Größe des Clusters dynamisch anpassen können, um unterschiedliche Rechenanforderungen effizient zu bewältigen.
  • Kostenoptimierung: AWS ParallelCluster trägt zur Kostenoptimierung bei, da Sie aus verschiedenen Instance-Typen und Preisoptionen wählen können. So können Sie Spot-Instances für kostengünstiges Computing nutzen und gleichzeitig hohe Verfügbarkeit und Fehlertoleranz gewährleisten.

Slurm Workload-Manager

Bestehende HPC-Anwender kennen vielleicht Slurm, einen hochgradig konfigurierbaren Open-Source-Workload-Manager. Slurm wird für die Verwaltung und Übermittlung von Batch-Aufträgen an den Cluster verwendet. Er verwendet CLI-Befehle wie sbatch (Aufträge übermitteln), salloc (eine Auftragszuweisung erhalten) und srun (einen parallelen Auftrag auf dem Cluster ausführen). Slurm verwaltet auch die Rechenressourcen für Ihren Cluster. Die genaue Konfiguration ist in der Clusterkonfiguration beschrieben.

AWS ParallelCluster-Benutzeroberfläche

AWS ParallelCluster UI ist eine webbasierte Benutzeroberfläche zur Verwaltung von Clustern. Sie basiert auf serverlosen Services (API Gateway / Lambda) und bietet die gleiche Funktionalität wie das CLI-Tool pcluster.

HPC-spezifische Ressourcen

Obwohl die meisten gängigen AWS-Services in einem HPC-System verwendet werden können, bietet AWS einige ergänzende Funktionen

Amazon FSx für Lustre

Lustre ist ein paralleles, verteiltes Open-Source-Dateisystem, das für große Cluster entwickelt wurde. Es verwendet verschiedene Schichten: Verwaltungsserver, Metadatenserver, Objektspeicher-Server und Objektspeicher-Ziele. Durch die Entkopplung von Aufgaben und die Bereitstellung einer Reihe von Servern (bis zu hundert Hosts) kann die Architektur eine Skala von Terabyte pro Sekunde bieten, die von Tausenden von Hosts genutzt wird. Sie bietet mehr Skalierbarkeit als herkömmliche Netzwerk-Dateisysteme. Lustre ist POSIX-kompatibel. AWS bietet Lustre als verwalteten Service an (Amazon FSx für Lustre). Das Einrichten eines neuen Clusters und dessen Wartung erfordern nur minimalen Aufwand. Die Daten werden mit AWS KMS, Verschlüsselung während der Übertragung, IAM und täglichen Backups in S3 geschützt und verfügen über AWS Backup Support. Lustre unterstützt nur Linux-Clients.

Elastic Fabric Adapter

Elastic Fabric Adapter (EFA) ist eine Art Netzwerkschnittstelle für Amazon EC2-Instanzen. Er nutzt OS-Bypass-Funktionen und verbessert die Leistung der Kommunikation zwischen den Instanzen, die für die Skalierung von HPC- und Machine Learning-Anwendungen entscheidend ist. Sie ist für den Einsatz in der bestehenden AWS-Netzwerkinfrastruktur optimiert und kann je nach Anwendungsanforderungen skaliert werden. Mit einer EFA verwenden HPC-Anwendungen MPI oder NCCL als Schnittstelle zur Libfabric-API. Die Libfabric-API umgeht den Betriebssystemkern und kommuniziert direkt mit dem EFA-Gerät, um Pakete über das Netzwerk zu übertragen. Dadurch wird der Overhead reduziert und die HPC-Anwendung kann effizienter ausgeführt werden. EFA ist kein Ersatz für normale Schnittstellen, da es Einschränkungen hat, z.B. kann es nicht zum Senden außerhalb des Subnetzes verwendet werden.

Ausführen Ihrer ersten HPC-Anwendung

In diesem Blogbeitrag verwenden wir AWS ParallelCluster, um die Arbeitslast zu verwalten. Das Lösungsdiagramm unten bietet einen Überblick über die Lösung.

Wie bei den meisten anderen Systemen, die für den Betrieb auf AWS konzipiert sind, müssen Sie zunächst einige Grundlagen schaffen. Sowohl AWS Batch als auch AWS ParallelCluster basieren auf EC2 und Netzwerken. Dies erfordert eine VPC mit öffentlichen und privaten Subnetzen, Zugang zum Internet (Routen/NAT-Gateway). Wichtig ist, dass AWS ParallelCluster die VPC-Optionen benötigt DNS-Auflösung = ja und DNS-Hostnamen = ja aktiviert werden.

Cluster-Konfigurationsdatei generieren

Es wird empfohlen, die folgenden Befehle in einer Virtualenv auszuführen. Sie können die Befehle auf Ihrem lokalen Rechner oder auf EC2 in AWS ausführen. Bevor Sie beginnen, stellen Sie sicher, dass Sie Ihre VPC-Konfiguration und Ihr SSH-Schlüsselpaar konfiguriert haben. Die pcluster configure führt Sie durch eine Reihe von Fragen, wie z. B. die VPC-Subnetz-ID für Ihren Hauptknoten, die maximale Größe Ihres Clusters, Instance-Typen usw. Es ist selbsterklärend, wenn Sie die AWS-Grundlagen kennen. Für weitere Informationen zur Installation der Tools klicken Sie auf hier.

$ pip install -U aws-parallelcluster setuptools-rust
$ export AWS_PROFILE=myprofile
$ pcluster configure --config cluster-config.yaml

Dadurch wird eine Konfigurationsdatei erzeugt:

Region: eu-west-1
Image:
    Os: alinux2
HeadNode:
    InstanceType: t2.micro
    Networking:
    SubnetId: subnet-08c245b78a82c3924
    Ssh:
    KeyName: steyn-mbp
Scheduling:
    Scheduler: slurm
    SlurmQueues:
    - Name: queue1
    ComputeResources:
    - Name: t2micro
        Instances:
        - InstanceType: t2.micro
        MinCount: 0
        MaxCount: 10
    Networking:
        SubnetIds:
        - subnet-0b864625631add41e
        - subnet-0053337e5ceeea8f3
        - subnet-035761b17a12851ac

Die obige Konfiguration ist eine Beschreibung Ihres AWS ParallelCluster und eine Eingabe für Ihren neuen Cluster. Für Produktionsarbeitslasten müssen Sie die Konfiguration des AbschnittsSharedStoragein Betracht ziehen.

Erstellen des Clusters

Erstellen Sie nun den Cluster


$ export AWS_PROFILE=myprofile
$ pcluster create-cluster --cluster-name steyn  --cluster-configuration cluster-config.yaml


Mit dem Befehllist-clusterskönnen Sie den Fortschritt sehen:
$ export AWS_PROFILE=myprofile
$ pcluster list-clusters
{
  "clusters": [
    {
      "clusterName": "steyn",
      "cloudformationStackStatus": "CREATE_IN_PROGRESS",
      "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/steyn/173732e0-16b1-11ee-a432-0ab77f79d7f7",
      "region": "eu-west-1",
      "version": "3.6.0",
      "clusterStatus": "CREATE_IN_PROGRESS",
      "scheduler": {
        "type": "slurm"
      }
    }
  ]
}

Warten Sie nun darauf, dass der clusterStatus sich in CREATE_COMPLETED. Dies kann eine Weile dauern. Prüfen Sie nach Abschluss, ob Sie sich bei Ihrem Hauptknoten anmelden können:

$ export AWS_PROFILE=myprofile
$ pcluster ssh --cluster-name steyn
[ec2-user@ip-10-0-0-149 ~]$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
queue1*      up   infinite     10  idle~ queue1-dy-t2micro-[1-10]

Ihr Cluster ist nun in Betrieb und wartet darauf, dass Aufträge an die Warteschlange übermittelt werden. In Ihrer EC2-Konsole sehen Sie jetzt einen aktiven Knoten, den Head Node.

Ihren ersten Auftrag einreichen

Lassen Sie uns mit einem einfachen Auftrag beginnen, um zu überprüfen, ob alles funktioniert. Erstellen Sie ein einfaches Skript namens hellojob.sh.

$ cat > hellojob.sh
#!/bin/bash
sleep 30
echo "Hello World from $(hostname)"

Senden Sie dieses Skript nun an die Warteschlange:

$ sbatch hellojob.sh
$ sinfo

AWS ParallelCluster wird nun einen Rechenknoten für diesen Auftrag erstellen. Es kann einen Moment dauern, bis der Rechenknoten Aufträge aus der Warteschlange abruft.

Sie können die Warteschlange anzeigen, indem Sie squeue ausführen:

$ squeue
             JOBID PARTITION     NAME     USER ST   TIME  NODES NODELIST(REASON)
                 1    queue1 hellojob ec2-user  R   0:08      1 queue1-dy-t2micro-2

Dieser Auftrag mit der Auftragsnummer 1 befindet sich seit 0:08 Sekunden in der Ausführung. Die Spalte ST zeigt den Status an. Nach Abschluss des Auftrags wird die Ausgabe in das aktuelle Arbeitsverzeichnis in eine Datei geschrieben, die nach der Auftragsnummer benannt ist: slurm-1.out.

Planen von parallelen Aufträgen

Es gibt mehrere Strategien, um parallele Aufträge zu planen. Der bequemste Weg ist die Verwendung von Auftrags-Arrays in sbatch. Im nächsten Beispiel werden wir 64 Aufträge in einem Array planen.

$ sbatch --array=0-64 hellojob.sh
$ squeue
             JOBID PARTITION     NAME     USER ST       TIME  NODES NODELIST(REASON)
        20_[40-64]    queue1 hellojob ec2-user PD       0:00      1 (Resources)
             20_30    queue1 hellojob ec2-user  R       0:03      1 queue1-dy-t2micro-1
             20_31    queue1 hellojob ec2-user  R       0:03      1 queue1-dy-t2micro-7
             20_32    queue1 hellojob ec2-user  R       0:03      1 queue1-dy-t2micro-2
             20_33    queue1 hellojob ec2-user  R       0:03      1 queue1-dy-t2micro-8
             20_34    queue1 hellojob ec2-user  R       0:03      1 queue1-dy-t2micro-6
             20_35    queue1 hellojob ec2-user  R       0:03      1 queue1-dy-t2micro-9
             20_36    queue1 hellojob ec2-user  R       0:03      1 queue1-dy-t2micro-3
             20_37    queue1 hellojob ec2-user  R       0:03      1 queue1-dy-t2micro-4
             20_38    queue1 hellojob ec2-user  R       0:03      1 queue1-dy-t2micro-5
             20_39    queue1 hellojob ec2-user  R       0:03      1 queue1-dy-t2micro-10

Die Ergebnisse werden erneut in Ihr lokales Arbeitsverzeichnis geschrieben, allerdings mit einem anderen Namen. Die Jobid wird nun an den Array-Index angehängt.

ls  | tail
slurm-20_5.out
slurm-20_60.out
slurm-20_61.out
slurm-20_62.out
slurm-20_63.out
slurm-20_64.out
slurm-20_6.out
slurm-20_7.out
slurm-20_8.out
slurm-20_9.out

Aufräumen

Compute Nodes werden standardmäßig nach 10 Minuten Leerlaufzeit beendet. Beobachten Sie die EC2-Konsole, um den Status zu überprüfen. Nach 10 Minuten sollte nur noch der Hauptknoten in Betrieb sein.

Beenden Sie nun den Cluster. Diese Befehle müssen in Ihrer pcluster-Umgebung ausgeführt werden.

$ export AWS_PROFILE=myprofile
$ pcluster delete-cluster --cluster-name steyn
$ pcluster list-clusters
{
  "clusters": [
    {
      "clusterName": "steyn",
      "cloudformationStackStatus": "DELETE_IN_PROGRESS",
      "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:123456789012:stack/steyn/173732e0-16b1-11ee-a432-0ab77f79d7f7",
      "region": "eu-west-1",
      "version": "3.6.0",
      "clusterStatus": "DELETE_IN_PROGRESS",
      "scheduler": {
        "type": "slurm"
      }
    }
  ]
}

Wiederholen Sie den letzten Befehl, bis sich der Status ändert. Die Ausgabe sieht dann etwa so aus

$ export AWS_PROFILE=myprofile
$ pcluster list-clusters
{
  "clusters": []
}

Verwaltung des Clusters

Für einen bequemeren Zugriff auf den Cluster, die Aufträge und die Warteschlangen empfiehlt sich die Installation von AWS ParallelCluster UI. Dies ist eine serverlose Web-Benutzeroberfläche, die die pcluster-Funktionalität widerspiegelt.

Andere Ressourcen

Das Well-Architected Framework ist eine solide Grundlage für die Entwicklung und den Aufbau von Systemen auf AWS. Dieses Framework bietet Anleitungen und die Möglichkeit zur Selbsteinschätzung. Es gibt eine spezielle Linse (Fokus) für HPC-Workloads, siehe hier.

Verfasst von

Steyn Huizinga

As a cloud evangelist at Oblivion, my passion is to share knowledge and enable, embrace and accelerate the adoption of public cloud. In my personal life I’m a dad and a horrible sim racer.

Contact

Let’s discuss how we can support your journey.