Share via


IBM Spectrum LSF

Ab LSF 10.1 FixPack 9 (10.1.0.9) ist Azure CycleCloud ein nativer Anbieter für Resource Connector. IBM stellt Dokumentation bereit. Diese Ressourcen enthalten Anweisungen zum Konfigurieren des LSF-Masterknotens für die Verbindung mit CycleCloud.

LSF ist ein VON IBM lizenziertes Produkt; Die Verwendung von LSF in CycleCloud erfordert eine Berechtigungsdatei, die IBM seinen Kunden zur Verfügung stellt.

Hinweis

LSF ist ein VON IBM lizenziertes Produkt; Die Verwendung von LSF in CycleCloud erfordert eine Berechtigungsdatei, die IBM seinen Kunden zur Verfügung stellt. Die LSF-Binärdateien und die Berechtigungsdatei müssen dem Blobs/Verzeichnis hinzugefügt werden, um den vollautomatisierten Cluster oder den VM Image Builder in diesem Projekt verwenden zu können. Um den vollautomatisierten Cluster oder den VM Image Builder in diesem Projekt verwenden zu können, müssen LSF-Binärdateien und -Berechtigungsdateien dem Verzeichnis blobs/hinzugefügt werden.

Unterstützte Szenarien des CycleCloud-LSF-Clustertyps

LSF kann Hosts aus Azure "ausleihen", um Aufträge bedarfsgesteuert auszuführen, wobei Hosts bei Bedarf hinzugefügt und entfernt werden. Der LSF-Clustertyp ist flexibel, um mehrere Szenarien in einem einzelnen Cluster zu verarbeiten:

  1. Aufträge mit hohem Durchsatz (CPU & GPU)
  2. Eng gekoppelt (MPI, CPU & GPU)
  3. Niedrige Priorität

Diese Szenarien werden durch die Gemeinsame Konfiguration mehrerer Nodearrays- und LSF-Eigenschaften behandelt. Die nodearrays sind in CycleCloud vorkonfiguriert. Die richtige Konfiguration von LSF ermöglicht die verschiedenen Auftragsszenarien.

Wenn LSF gemäß diesen Empfehlungen konfiguriert wird, bsub können Ressourcenanforderungen -R auf folgende Weise verwendet werden:

Verwenden Sie die PlacementGroup-Ressource, um einen Auftrag mit dem verbundenen InfiniBand-Netzwerk auszuführen.

-R "span[ptile=2] select[nodearray=='ondemandmpi' && cyclecloudmpi] same[placementgroup]"

Für GPUs wird empfohlen, LSF-Unterstützung für erweiterte GPU-Syntax zu verwenden. In der Regel ist das Hinzufügen von zwei Attributen zu lsf.conf erforderlich: LSB_GPU_NEW_SYNTAX=extend und LSF_GPU_AUTOCONFIG=Y. Wenn die Unterstützung für erweiterte Syntax aktiviert ist, verwenden Sie die placementGroup zusammen mit, -gpu um einen eng gekoppelten Auftrag mit GPU-Beschleunigung auszuführen.

-R "span[ptile=1] select[nodearray=='gpumpi' && cyclecloudmpi] same[placementgroup]" -gpu "num=2:mode=shared:j_exclusive=yes"

Führen Sie GPU-fähige Aufträge parallel aus.

-R "select[nodearray=='gpu' && !cyclecloudmpi && !cyclecloudlowprio]" -gpu "num=1:mode=shared:j_exclusive=yes"

Führen Sie einen großen Burstauftrag auf VMs mit geringem Wert aus.

-J myArr[1000] -R "select[nodearray=='lowprio' && cyclecloudlowprio]"

Konfigurieren von LSF für den CycleCloud-LSF-Clustertyp

Um diese Szenarien wie beschrieben zu aktivieren, fügen Sie lsb.shared eine Reihe von freigegebenen Ressourcentypen hinzu.

   cyclecloudhost  Boolean  ()       ()       (instances from Azure CycleCloud)
   cyclecloudmpi  Boolean   ()       ()       (instances that support MPI placement)
   cyclecloudlowprio  Boolean ()     ()       (instances that low priority / interruptible from Azure CycleCloud)
   nodearray  String     ()       ()       (nodearray from CycleCloud)
   placementgroup String ()       ()       (id used to note locality of machines)
   instanceid String     ()       ()       (unique host identifier)

Es ist möglich, dass dies cyclecloudlowprio weggelassen werden kann, aber es bietet eine zusätzliche Überprüfung, ob Aufträge auf ihrem beabsichtigten VM-Mandanten ausgeführt werden.

LSF-Anbietervorlage für CycleCloud

Der LSF CycleCloud-Anbieter macht eine Reihe von Konfigurationen über die Anbietervorlage verfügbar. Diese Konfigurationen sind eine Teilmenge der vollständigen Konfiguration des Nodearrays.

Hier sehen Sie ein Beispiel für eine LSF-Vorlage für Cyclecloud aus cyclecloudprov_templates.json:

{
    "templateId": "ondemand",
    "attributes": {
        "type": ["String", "X86_64"],
        "ncores": ["Numeric", "44"],
        "ncpus": ["Numeric", "44"],
        "mem": ["Numeric", "327830"],
        "cyclecloudhost": ["Boolean", "1"],
        "nodearray" : ["String", "ondemand"]
    },
    "priority" : 250,
    "nodeArray": "ondemand",
    "vmType" : "Standard_HC44rs",
    "subnetId" : "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/azurecyclecloud-lab/providers/Microsoft.Network/virtualNetworks/hpc-network/subnets/compute",
    "imageId" : "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/azurecyclecloud-lab/providers/Microsoft.Compute/images/lsf-worker-a4bc2f10",
    "maxNumber": 500,
    "keyPairLocation": "/opt/cycle_server/.ssh/id_rsa_admin.pem",
    "customScriptUri": "https://aka.ms/user_data.sh",
    "userData": "nodearray_name=ondemand"
}

LSF-Vorlagenattribute für CycleCloud

Nicht alle nodearray-Attribute werden von der LSF-Anbietervorlage verfügbar gemacht. Diese können als Außerkraftsetzungen der CycleCloud nodearray-Konfiguration betrachtet werden. Die einzige erforderliche LSF-Vorlage sind:

  • templateId
  • nodeArray

Andere werden aus der CycleCloud-Konfiguration abgeleitet, können weggelassen werden oder sind überhaupt nicht erforderlich.

  • imageId: Azure-VM-Image z. B. "/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx/resourceGroups/my-images-rg/providers/Microsoft.Compute/images/lsf-execute-201910230416-80a9a87f" außer Kraft setzen für die CycleCloud-Clusterkonfiguration.
  • subnetId: Azure-Subnetz z. B. "resource_group/vnet/subnet" außer Kraft setzen für die CycleCloud-Clusterkonfiguration.
  • vmType– z. B. "Standard_HC44rs" außer Kraft setzen für die CycleCloud-Clusterkonfiguration.
  • keyPairLocation – z. B. "~/.ssh/id_rsa_beta" außer Kraft setzen für die CycleCloud-Clusterkonfiguration.
  • customScriptUri– z. B. "http://10.1.0.4/user_data.sh", kein Skript, wenn nicht angegeben.
  • userData – z. B. "nodearray_name=gpumpi;placement_group_id=gpumpipg1" leer, wenn nicht angegeben.

Hinweis zu PlacementGroups

Azure-Rechenzentren verfügen über eine Infiniband-Netzwerkfunktion für HPC-Szenarien. Diese Netzwerke haben im Gegensatz zum normalen Ethernet eine begrenzte Spanne. Die Infiniband-Netzwerkausdehnungen werden durch "PlacementGroups" beschrieben. Wenn sich virtuelle Computer in derselben Platzierungsgruppe befinden und spezielle VM-Typen mit Infiniband-Unterstützung sind, teilen sie sich ein Infiniband-Netzwerk.

Diese Platzierungsgruppen erfordern eine spezielle Handhabung in LSF und CycleCloud.

Hier sehen Sie ein Beispiel für eine LSF-Vorlage für Cyclecloud aus cyclecloudprov_templates.json:

{
  "templateId": "ondemandmpi-1",
  "attributes": {
    "nodearray": ["String", "ondemandmpi" ],
    "zone": [  "String",  "westus2"],
    "mem": [  "Numeric",  8192.0],
    "ncpus": [  "Numeric",  2],
    "cyclecloudmpi": [  "Boolean",  1],
    "placementgroup": [  "String",  "ondemandmpipg1"],
    "ncores": [  "Numeric",  2],
    "cyclecloudhost": [  "Boolean",  1],
    "type": [  "String",  "X86_64"],
    "cyclecloudlowprio": [  "Boolean",  0]
  },
  "maxNumber": 40,
  "nodeArray": "ondemandmpi",
  "placementGroupName": "ondemandmpipg1",
  "priority": 448,
  "customScriptUri": "https://aka.ms/user_data.sh",
  "userData" : "nodearray_name=ondemandmpi;placement_group_id=ondemandmpipg1"
}

Die placementGroupName in dieser Datei kann beliebig sein, bestimmt jedoch den Namen der placementGroup in CycleCloud. Alle Knoten, die von CycleCloud aus dieser Vorlage entliehen werden, befinden sich in dieser PlacementGroup und, wenn sie Infiniband-fähige VMs sind, teilen sich ein IB-Netzwerk.

Beachten Sie, dass placementGroupName mit dem Host-Attribut placementgroupübereinstimmt, dies beabsichtigt und erforderlich. Außerdem ist userData festgelegt, dass in placement_group_iduser_data.sh zur Startzeit des Hosts verwendet werden soll. Das ondemandmpi Attribut mag unpassend erscheinen, wird aber verwendet, um zu verhindern, dass dieser Auftrag auf Hosts abgleicht, auf denen placementGroup nicht definiert ist.

Bei Verwendung von Platzierungsgruppen wird häufig eine maximale Platzierungsgruppengröße festgelegt, die von der Azure.MaxScaleSetSize -Eigenschaft bestimmt wird. Diese Eigenschaft begrenzt indirekt, wie viele Knoten einer Platzierungsgruppe hinzugefügt werden können, wird aber von LSF nicht berücksichtigt. Daher ist es wichtig, die LSF-Vorlage in der Clustervorlage gleich festzulegen MaxNumberAzure.MaxScaleSetSize .

user_data.sh

Die Vorlage stellt Attribute zum Ausführen eines user_data.sh Skripts bereit. customScriptUri und userData. Dies sind die URI- und benutzerdefinierten Umgebungsvariablen des vom Benutzer verwalteten Skripts, das beim Starten des Knotens ausgeführt wird. Dieses Skript wird von einem annonymous CURL-Befehl heruntergeladen, sodass customScriptUri die Authentifizierung fehlschlägt. Verwenden Sie dieses Skript für Folgendes:

  1. Konfigurieren Sie die Worker-LSF-Daemons. insbesondere LSF_LOCAL_RESOURCES und LSF_MASTER_LIST
    • Wenn LSF_TOP sich in einem freigegebenen Dateisystem befindet, kann es hilfreich sein, vor dem Starten der Daemons eine lokale Kopie von lsf.conf zu erstellen und die LSF_ENVDIR Variable festzulegen.
  2. Starten Sie die Daemons lim, res und sbatch.

Es gibt einige Standardumgebungsvariablen, die vom CycleCloud-Anbieter festgelegt werden.

  • rc_account
  • template_id
  • providerName
  • clustername
  • cyclecloud_nodeid (empfohlen, dies auf Ressource festzulegen instanceId )

Weitere Benutzerdatenvariablen, die beim Verwalten von Ressourcen im CycleCloud-Anbieter nützlich sein können, sind:

  • nodearray_name
  • placement_group_id

Hinweis

Obwohl Windows eine offiziell unterstützte LSF-Plattform ist, unterstützt CycleCloud die Ausführung von LSF unter Windows derzeit nicht.