Freigeben über


IBM Spectrum LSF

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

LSF ist ein IBM lizenziertes Produkt. Um LSF in CycleCloud zu verwenden, benötigen Sie eine Berechtigungsdatei, die IBM ihren Kunden bereitstellt.

Hinweis

  • LSF ist ein IBM lizenziertes Produkt. Um LSF in CycleCloud zu verwenden, benötigen Sie eine Berechtigungsdatei, die IBM seinen Kunden bereitstellt. Fügen Sie die LSF-Binärdateien und die Berechtigungsdatei zum blobs/ Verzeichnis hinzu, um den vollständig automatisierten Cluster oder den VM-Image-Generator in diesem Projekt zu verwenden.
  • Um den vollständig automatisierten Cluster oder den VM-Image-Generator in diesem Projekt zu verwenden, fügen Sie die LSF-Binärdateien und die Berechtigungsdatei zum blobs/ Verzeichnis hinzu.
  • LSF hängt von dem ed Paket ab, das in den letzten Versionen des Azure HPC-Images standardmäßig nicht installiert ist. Wenn Ihr ausgewähltes VM-Image ed nicht enthält, empfehlen wir die Verwendung von Cloud-Init, um das Paket hinzuzufügen. Beispielsweise können Sie auf RedHat Enterprise Linux, AlmaLinux oder CentOS die folgenden Elemente zu Ihrer Clustervorlage hinzufügen (oder in der CycleCloud-GUI über das Dialogfeld "Clusterbearbeitung"):
[node defaults]
CloudInit = '''#!/bin/bash
yum install -y ed
'''

Unterstützte Szenarien des CycleCloud LSF-Clustertyps

LSF kann Hosts von Azure "ausleihen", um Aufträge bei Bedarf auszuführen, Hosts bei Bedarf hinzuzufügen und zu entfernen. Der LSF-Clustertyp ist flexibel, um mehrere Szenarien in einem einzelnen Cluster zu verarbeiten:

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

Behandeln Sie diese Szenarien, indem Sie mehrere Knotenarrays und LSF-Eigenschaften konfigurieren. CycleCloud konfiguriert die Knotenarrays vor. Die richtige Konfiguration von LSF ermöglicht die verschiedenen Auftragsszenarien.

Wenn Sie LSF gemäß diesen Empfehlungen konfigurieren, können Sie ressourcenanforderungen bsub auf folgende Weise verwenden-R:

Verwenden Sie die Ressource placementGroup, um einen Auftrag mit InfiniBand verbundenem Netzwerk auszuführen.

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

Für GPUs empfehlen wir die Verwendung der LSF-Unterstützung für erweiterte GPU-Syntax. In der Regel fügen Sie diese Attribute zu lsf.conf: LSB_GPU_NEW_SYNTAX=extend und LSF_GPU_AUTOCONFIG=Y. Wenn die 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-aktivierte Aufträge parallel aus.

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

Führen Sie einen großen Burst-Job auf VMs mit niedriger Priorität aus.

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

Konfigurieren von LSF für den CycleCloud LSF-Clustertyp

Um diese Szenarien zu aktivieren, fügen Sie gemeinsam genutzte Ressourcentypen zu lsb.shared 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)

Möglicherweise können Sie cyclecloudlowprio auslassen, doch es bietet eine zusätzliche Überprüfung, ob Aufträge auf ihrem vorgesehenen VM-Mandanten ausgeführt werden.

LSF-Anbietervorlage für CycleCloud

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

Hier ist eine Beispiel-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

Die LSF-Anbietervorlage macht nicht alle Knotenarrayattribute verfügbar. Diese Attribute gelten als Überschreibungen der CycleCloud-Knotenarray-Konfiguration. Die einzigen erforderlichen LSF-Vorlagenattribute sind:

  • templateId
  • nodeArray

Sie können andere Attribute weglassen, oder sie sind möglicherweise überhaupt nicht erforderlich. CycleCloud leitet die folgenden Attribute ab:

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

Eine Notiz zu PlacementGroups

Azure-Rechenzentren verfügen über InfiniBand-Netzwerkfunktionen für HPC-Szenarien. Im Gegensatz zum normalen Ethernet haben diese Netzwerke eine begrenzte Spanne. "PlacementGroups" beschreibt die InfiniBand-Netzwerkausdehnungen. Wenn sich virtuelle Computer in derselben Platzierungsgruppe befinden und spezielle InfiniBand-fähige VM-Typen sind, teilen sie ein InfiniBand-Netzwerk.

Diese Platzierungsgruppen erfordern eine besondere Behandlung in LSF und CycleCloud.

Hier ist eine Beispiel-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"
}

Für placementGroupName kann in dieser Datei alles Mögliche angegeben werden, die Angabe bestimmt jedoch den Namen der placementGroup in CycleCloud. Alle Knoten, die von CycleCloud aus dieser Vorlage geliehen werden, befinden sich in dieser placementGroup und teilen sich ein IB-Netzwerk, wenn es sich um InfiniBand-fähige VMs handelt.

Die placementGroupName Eigenschaft stimmt mit dem Host-Attribut placementgroupüberein. Diese Übereinstimmung ist beabsichtigt und erforderlich. Legen Sie die Eigenschaft placement_group_id in userData für die Verwendung in user_data.sh zur Startzeit des Hosts fest. Das ondemandmpi-Attribut mag überflüssig erscheinen, wird jedoch verwendet, um zu verhindern, dass dieser Job auf Hosts ausgeführt wird, auf denen placementGroup nicht definiert ist.

Wenn Sie Platzierungsgruppen verwenden, bestimmt der Wert der Azure.MaxScaleSetSize Eigenschaft die maximale Platzierungsgruppengröße. Diese Eigenschaft schränkt indirekt die Anzahl der Knoten ein, die Sie einer Platzierungsgruppe hinzufügen können, aber LSF berücksichtigt sie nicht. Legen Sie MaxNumber der LSF-Vorlage auf den Wert von Azure.MaxScaleSetSize in der Clustervorlage fest.

user_data.sh

Die Vorlage stellt zwei Attribute zum Ausführen eines user_data.sh Skripts bereit: customScriptUri und userData. Diese Attribute sind die URI- und benutzerdefinierten Umgebungsvariablen des benutzerseitig verwalteten Skripts, das beim Knotenstart ausgeführt wird. Die customScriptUri Authentifizierung kann nicht erforderlich sein, da ein anonymer CURL-Befehl das Skript herunterlädt. Verwenden Sie dieses Skript für Folgendes:

  1. Konfigurieren der LSF-Daemons des Workers (insbesondere LSF_LOCAL_RESOURCES und LSF_MASTER_LIST)
    • Wenn LSF_TOP sich auf einem freigegebenen Dateisystem befindet, empfiehlt es sich, eine lokale Kopie von lsf.conf zu erstellen und die LSF_ENVDIR Variable vor dem Starten der Daemons festzulegen.
  2. Starten Sie die Lim-, Res- und Sbatch-Daemons.

Der CycleCloud-Anbieter legt einige Standardumgebungsvariablen fest.

  • rc_account
  • template_id
  • Anbietername
  • clustername
  • cyclecloud_nodeid (Diese Variable auf instanceId Ressource festlegen)

Andere Benutzerdatenvariablen, die beim Verwalten von Ressourcen im CycleCloud-Anbieter hilfreich sein können, sind:

  • nodearray_name
  • placement_group_id

Hinweis

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