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:
- Taken met hoge doorvoer (CPU & GPU)
- Nauw gekoppeld (MPI, CPU & GPU)
- 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:
- Configureer de werkrol-LSF-daemons; met name
LSF_LOCAL_RESOURCES
enLSF_MASTER_LIST
- Als
LSF_TOP
zich in een gedeeld bestandssysteem bevindt, kan het handig zijn om een lokale kopie vanlsf.conf
te maken en deLSF_ENVDIR
variabele in te stellen voordat u de daemons start.
- Als
- 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.