Delen via


IBM Spectrum LSF

Vanaf LSF 10.1 FixPack 9 (10.1.0.9) is Azure CycleCloud een systeemeigen provider voor Resource Connector. IBM biedt documentatie. Deze resources bieden instructies voor het configureren van het primaire LSF-knooppunt om verbinding te maken met CycleCloud.

LSF is een product met een IBM-licentie. Als u LSF in CycleCloud wilt gebruiken, hebt u een rechtenbestand nodig dat IBM aan hun klanten biedt.

Notitie

  • LSF is een product met een IBM-licentie. Als u LSF in CycleCloud wilt gebruiken, hebt u een rechtenbestand nodig dat IBM aan haar klanten biedt. Voeg de binaire LSF-bestanden en het rechtenbestand toe aan de blobs/ map om het volledig geautomatiseerde cluster of de opbouwfunctie voor VM-installatiekopieën in dit project te gebruiken.
  • Als u het volledig geautomatiseerde cluster of de opbouwfunctie voor VM-installatiekopieën in dit project wilt gebruiken, voegt u de binaire LSF-bestanden en het rechtenbestand toe aan de blobs/ map.
  • LSF is afhankelijk van het ed pakket dat niet standaard is geïnstalleerd in recente versies van de Azure HPC-installatiekopieën. Als uw geselecteerde VM-image ed niet bevat, adviseren we om cloud-init te gebruiken om het pakket te installeren. Op RedHat Enterprise Linux, AlmaLinux of CentOS kunt u bijvoorbeeld het volgende toevoegen aan uw clustersjabloon (of in de CycleCloud-GUI via het dialoogvenster Cluster bewerken):
[node defaults]
CloudInit = '''#!/bin/bash
yum install -y ed
'''

Ondersteunde scenario's van het CycleCloud LSF-clustertype

LSF kan hosts van Azure 'lenen' om taken op een on-demand manier uit te voeren en zo nodig hosts toe te voegen en te verwijderen. Het LSF-clustertype is flexibel voor het afhandelen van verschillende scenario's in één cluster:

  1. Taken met hoge doorvoer (CPU & GPU)
  2. Nauw gekoppeld (MPI, CPU & GPU)
  3. Lage prioriteit

U kunt deze scenario's afhandelen door meerdere knooppuntmatrices en LSF-eigenschappen te configureren. CycleCloud configureert de knooppuntmatrices vooraf. De juiste configuratie van LSF maakt de verschillende taakscenario's mogelijk.

Wanneer u LSF configureert in overeenstemming met deze aanbevelingen, kunt u resourcevereisten bsub op de volgende manier gebruiken-R:

Gebruik de placementGroup resource om een taak uit te voeren met een verbonden InfiniBand-netwerk.

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

Voor GPU's wordt u aangeraden LSF-ondersteuning te gebruiken voor uitgebreide GPU-syntaxis. Normaal gesproken voegt u deze kenmerken toe aan lsf.conf: LSB_GPU_NEW_SYNTAX=extend en LSF_GPU_AUTOCONFIG=Y. Als ondersteuning voor uitgebreide syntaxis is ingeschakeld, gebruikt u de placementGroup samen met -gpu om een nauw gekoppelde taak uit te voeren met GPU-versnelling.

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

Voer op een parallelle manier GPU-taken uit.

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

Voer een grote burst-taak uit op VM's met lage prioriteit.

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

LSF configureren voor het type CycleCloud LSF-cluster

Als u deze scenario's wilt inschakelen, voegt u gedeelde resourcetypen toe aan lsb.shared.

   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)

Mogelijk kunt u dit weglaten cyclecloudlowprio, maar het biedt een extra controle dat taken worden uitgevoerd op hun beoogde VM-tenancy.

LSF-providersjabloon voor CycleCloud

De LSF CycleCloud-provider maakt configuraties beschikbaar via de providersjabloon. Deze configuraties vormen een subset van de volledige configuratie van de nodearray.

Hier volgt een voorbeeld van een LSF-sjabloon voor Cyclecloud vanuit 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-sjabloonkenmerken voor CycleCloud

In de sjabloon van de LSF-provider worden niet alle nodearray-attributen weergegeven. Deze kenmerken worden beschouwd als overschrijvingen van de configuratie van de CycleCloud-nodearray. De enige vereiste LSF-sjabloonkenmerken zijn:

  • templateId
  • nodeArray

U kunt andere kenmerken weglaten of ze zijn mogelijk helemaal niet nodig. CycleCloud leidt de volgende attributen af:

  • imageId - Azure VM Image, bijvoorbeeld "/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx/resourceGroups/my-images-rg/providers/Microsoft.Compute/images/lsf-execute-201910230416-80a9a87f" - override voor CycleCloud-clusterconfiguratie.
  • subnetId - Azure-subnet, bijvoorbeeld "resource_group/vnet/subnet" : overschrijven voor cycleCloud-clusterconfiguratie.
  • vmType - bijvoorbeeld "Standard_HC44rs" : overschrijven voor cycleCloud-clusterconfiguratie.
  • keyPairLocation - bijvoorbeeld "~/.ssh/id_rsa_beta" : overschrijven voor cycleCloud-clusterconfiguratie.
  • customScriptUri - bijvoorbeeld: http://10.1.0.4/user_data.sh. Geen script als dit niet is opgegeven.
  • userData - bijvoorbeeld "nodearray_name=gpumpi;placement_group_id=gpumpipg1". Leeg als dit niet is opgegeven.

Een opmerking over PlacementGroups

Azure-datacenters beschikken over infiniBand-netwerkmogelijkheden voor HPC-scenario's. In tegenstelling tot het normale Ethernet hebben deze netwerken een beperkte spanwijdte. 'PlacementGroups' beschrijft de InfiniBand-netwerkbreedten. Als VM's zich in dezelfde plaatsingsgroep bevinden en speciale VM-typen met InfiniBand zijn, delen ze een InfiniBand-netwerk.

Deze plaatsingsgroepen vereisen speciale verwerking in LSF en CycleCloud.

Hier volgt een voorbeeld van een LSF-sjabloon voor CycleCloud vanuit 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"
}

Het placementGroupName in dit bestand kan alles zijn, maar bepaalt de naam van de placementGroup in CycleCloud. Alle knooppunten die vanuit deze sjabloon van CycleCloud zijn geleend, bevinden zich in deze placementGroup en delen een IB-netwerk als ze vm's met InfiniBand zijn ingeschakeld.

De placementGroupName eigenschap komt overeen met het hostkenmerk placementgroup. Deze match is bewust en noodzakelijk. Stel de placement_group_id eigenschap in userData voor gebruik in user_data.sh bij het starten van de host. Het ondemandmpi kenmerk lijkt misschien overbodig, maar wordt gebruikt om te voorkomen dat deze taak overeenkomt met hosts waar placementGroup niet is gedefinieerd.

Wanneer u plaatsingsgroepen gebruikt, bepaalt de waarde van de Azure.MaxScaleSetSize eigenschap de maximale grootte van de plaatsingsgroep. Deze eigenschap beperkt indirect het aantal knooppunten dat u aan een plaatsingsgroep kunt toevoegen, maar LSF beschouwt dit niet. Stel MaxNumber van de LSF-sjabloon gelijk aan Azure.MaxScaleSetSize in de clustersjabloon.

user_data.sh

De sjabloon bevat twee kenmerken voor het uitvoeren van een user_data.sh script: customScriptUri en userData. Deze kenmerken zijn de URI- en aangepaste omgevingsvariabelen van het door de gebruiker beheerde script dat wordt uitgevoerd bij het opstarten van knooppunten. De customScriptUri verificatie kan niet worden vereist omdat een anonieme CURL-opdracht het script downloadt. Gebruik dit script om het volgende te doen:

  1. Configureer de LSF-daemons voor werkers, met name LSF_LOCAL_RESOURCES en LSF_MASTER_LIST.
    • Als LSF_TOP zich in een gedeeld bestandssysteem bevindt, is het handig om een lokale kopie van lsf.conf te maken en de variabele LSF_ENVDIR in te stellen voordat u de daemons start.
  2. Starten de demonen lim, res en sbatch.

De CycleCloud-provider stelt enkele standaardomgevingsvariabelen in.

  • rc_rekening
  • template_id
  • providerNaam
  • clusternaam
  • cyclecloud_nodeid (stel deze variabele in op instanceId hulpbron)

Andere variabelen voor gebruikersgegevens die nuttig kunnen zijn bij het beheren van resources in de CycleCloud-provider zijn:

  • nodearray_name
  • plaatsingsgroep_id

Notitie

Hoewel Windows een officieel ondersteund LSF-platform is, biedt CycleCloud momenteel geen ondersteuning voor het uitvoeren van LSF in Windows.