Share 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 LSF-hoofdknooppunt om verbinding te maken met CycleCloud.

LSF is een product met een IBM-licentie; voor het gebruik van LSF in CycleCloud is een rechtenbestand vereist dat IBM aan hun klanten verstrekt.

Notitie

LSF is een product met een IBM-licentie; voor het gebruik van LSF in CycleCloud is een rechtenbestand vereist dat IBM aan haar klanten verstrekt. De binaire LSF-bestanden en het rechtenbestand moeten worden toegevoegd 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, moeten de binaire LSF-bestanden en het rechtenbestand worden toegevoegd aan de map blobs/.

Ondersteunde scenario's van het CycleCloud LSF-clustertype

LSF kan hosts van Azure 'lenen' om taken op een on-demand manier uit te voeren, waarbij hosts indien nodig worden toegevoegd en verwijderd. Het LSF-clustertype is flexibel voor het verwerken van verschillende scenario's in één cluster:

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

Deze scenario's worden verwerkt door de configuratie van meerdere knooppuntmaarrays en LSF-eigenschappen in combinatie. De nodearrays zijn vooraf geconfigureerd in CycleCloud. De juiste configuratie van LSF maakt de verschillende taakscenario's mogelijk.

Wanneer LSF is geconfigureerd in overeenstemming met deze aanbevelingen, bsub kunnen resourcevereisten -R op de volgende manier worden gebruikt:

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

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

Voor GPU's raden we aan LSF-ondersteuning te gebruiken voor uitgebreide GPU-syntaxis. Normaal gesproken vereist het toevoegen van twee kenmerken aan lsf.conf: LSB_GPU_NEW_SYNTAX=extend en LSF_GPU_AUTOCONFIG=Y. Als ondersteuning voor uitgebreide syntaxis is ingeschakeld, gebruikt u placementGroup in combinatie met -gpu om een nauw gekoppelde taak met GPU-versnelling uit te voeren.

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

Voer taken met GPU parallel uit.

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

Voer een grote bursttaak uit op VM's met een lage prioriteit.

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

LSF configureren voor het CycleCloud LSF-clustertype

Als u deze scenario's wilt inschakelen zoals beschreven, voegt u een aantal 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)

Het is mogelijk dat dit cyclecloudlowprio kan worden weggelaten, maar het biedt een extra controle dat taken worden uitgevoerd op de beoogde VM-tenancy.

LSF-providersjabloon voor CycleCloud

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

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

Niet alle knooppuntmaarray-kenmerken worden weergegeven door de LSF-providersjabloon. Deze kunnen worden beschouwd als overschrijvingen van de configuratie van het CycleCloud-knooppunt. De enige vereiste LSF-sjabloon zijn:

  • templateId
  • nodeArray

Andere worden afgeleid uit de CycleCloud-configuratie, kunnen worden weggelaten of zijn helemaal niet nodig.

  • imageId - Azure VM-installatiekopieën bijvoorbeeld "/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx/resourceGroups/my-images-rg/providers/Microsoft.Compute/images/lsf-execute-201910230416-80a9a87f" overschrijven voor CycleCloud-clusterconfiguratie.
  • subnetId - Azure-subnet bijv. "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 indien niet opgegeven.

Een opmerking over PlacementGroups

Azure-datacenters hebben infiniband-netwerkmogelijkheden voor HPC-scenario's. Deze netwerken hebben, in tegenstelling tot het normale ethernet, een beperkte spanwijdte. De Infiniband-netwerk extents worden beschreven door 'PlacementGroups'. Als VM's zich in dezelfde plaatsingsgroep bevinden en speciale VM-typen met Infiniband zijn, delen ze een Infiniband-netwerk.

Deze plaatsingsgroepen vereisen speciale afhandeling in LSF en CycleCloud.

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

De placementGroupName in dit bestand kan van alles zijn, maar bepaalt de naam van de placementGroup in CycleCloud. Alle knooppunten die van deze sjabloon zijn geleend van CycleCloud, bevinden zich in deze placementGroup en delen, als ze infiniband-VM's zijn, een IB-netwerk.

Houd er rekening mee dat placementGroupName dit overeenkomt met het hostkenmerk placementgroup, dit opzettelijk en noodzakelijk is. Ook dat de placement_group_id is ingesteld in userData om te worden gebruikt in user_data.sh op de begintijd van de host. Het ondemandmpi kenmerk lijkt misschien overbodig, maar wordt gebruikt om te voorkomen dat deze taak overeenkomt op hosts waar placementGroup niet is gedefinieerd.

Bij het gebruik van plaatsingsgroepen is er vaak een maximale grootte van de plaatsingsgroep die wordt bepaald door de Azure.MaxScaleSetSize eigenschap. Deze eigenschap beperkt indirect het aantal knooppunten dat aan een plaatsingsgroep kan worden toegevoegd, maar wordt niet meegenomen door LSF. Het is daarom belangrijk om de LSF-sjabloon in te stellen MaxNumber die gelijk is aan Azure.MaxScaleSetSize in de clustersjabloon.

user_data.sh

De sjabloon bevat kenmerken voor het uitvoeren van een user_data.sh script; customScriptUri en userData. Dit zijn de URI- en aangepaste omgevingsvariabelen van het door de gebruiker beheerde script dat wordt uitgevoerd bij het opstarten van het knooppunt. Dit script wordt gedownload met de anonieme CURL-opdracht, waardoor customScriptUri de verificatie mislukt. Gebruik dit script om het volgende te doen:

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

Er zijn enkele standaardomgevingsvariabelen ingesteld door de CycleCloud-provider.

  • rc_account
  • template_id
  • providerName
  • clusternaam
  • cyclecloud_nodeid (aanbevolen om dit in te instanceId stellen op resource)

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

  • nodearray_name
  • placement_group_id

Notitie

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