Share via


IBM Spectrum LSF

Från och med LSF 10.1 FixPack 9 (10.1.0.9) är Azure CycleCloud en intern provider för Resource Connector. IBM tillhandahåller dokumentation. De här resurserna innehåller instruktioner om hur du konfigurerar LSF-huvudnoden för att ansluta till CycleCloud.

LSF är en IBM-licensierad produkt; Användning av LSF i CycleCloud kräver en rättighetsfil som IBM tillhandahåller sina kunder.

Anteckning

LSF är en IBM-licensierad produkt; Användning av LSF i CycleCloud kräver en rättighetsfil som IBM tillhandahåller sina kunder. LSF-binärfilerna och berättigandefilen måste läggas till i blobar/katalogen för att använda det helt automatiserade klustret eller VM-avbildningsverktyget i det här projektet. Om du vill använda det helt automatiserade klustret eller vm-avbildningsverktyget i det här projektet måste LSF-binärfiler och berättigandefil läggas till i blobbarna/katalogen.

Scenarier som stöds av typen CycleCloud LSF-kluster

LSF kan "låna" värdar från Azure för att köra jobb på begäran och lägga till och ta bort värdar efter behov. LSF-klustertypen är flexibel för att hantera flera scenarier i ett enda kluster:

  1. Jobb med högt dataflöde (CPU & GPU)
  2. Nära kopplad (MPI, CPU & GPU)
  3. Låg prioritet

De här scenarierna hanteras av konfigurationen av flera nodmatriser och LSF-egenskaper tillsammans. Nodmatriserna är förkonfigurerade i CycleCloud. Korrekt konfiguration av LSF möjliggör de olika jobbscenarierna.

När LSF har konfigurerats i enlighet med dessa rekommendationer bsub kan resurskrav -R användas på följande sätt:

Använd resursen placementGroup för att köra ett jobb med infiniBand-anslutet nätverk.

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

För GPU:er rekommenderar vi att du använder LSF-stöd för utökad GPU-syntax. Kräver vanligtvis att två attribut läggs till i lsf.conf: LSB_GPU_NEW_SYNTAX=extend och LSF_GPU_AUTOCONFIG=Y. Med stöd för utökad syntax aktiverat använder du placementGroup tillsammans med -gpu för att köra ett nära kopplat jobb med GPU-acceleration.

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

Kör GPU-aktiverade jobb parallellt.

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

Kör ett stort burst-jobb på virtuella datorer med lågprioritet.

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

Konfigurera LSF för LSF-klustertypen CycleCloud

Om du vill aktivera dessa scenarier enligt beskrivningen lägger du till ett antal delade resurstyper i 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)

Det är möjligt att det cyclecloudlowprio kan utelämnas, men det ger ytterligare en kontroll av att jobb körs på den avsedda virtuella datorns klientorganisation.

LSF-providermall för CycleCloud

LSF CycleCloud-providern exponerar ett antal konfigurationer via providermallen. Dessa konfigurationer är en delmängd av den fullständiga konfigurationen av nodearray.

Här är ett exempel på en LSF-mall för Cyclecloud från 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-mallattribut för CycleCloud

Alla nodearray-attribut exponeras inte av LSF-providermallen. Dessa kan betraktas som åsidosättningar av konfigurationen av CycleCloud-nodmatrisen. Den enda obligatoriska LSF-mallen är:

  • templateId
  • nodeArray

Andra härleds från CycleCloud-konfigurationen, kan utelämnas eller är inte nödvändiga alls.

  • imageId – Azure VM Image t.ex. "/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx/resourceGroups/my-images-rg/providers/Microsoft.Compute/images/lsf-execute-201910230416-80a9a87f" åsidosättning för Konfiguration av CycleCloud-kluster.
  • subnetId – Azure-undernät t.ex. "resource_group/vnet/subnet" åsidosättning för Konfiguration av CycleCloud-kluster.
  • vmType – t.ex. "Standard_HC44rs" åsidosättning för Konfiguration av CycleCloud-kluster.
  • keyPairLocation – t.ex. "~/.ssh/id_rsa_beta" åsidosättning för Konfiguration av CycleCloud-kluster.
  • customScriptUri – t.ex. "http://10.1.0.4/user_data.sh", inget skript om det inte anges.
  • userData – t.ex. "nodearray_name=gpumpi;placement_group_id=gpumpipg1" tomt om det inte har angetts.

En anteckning om PlacementGroups

Azure-datacenter har Infiniband-nätverkskapacitet för HPC-scenarier. Dessa nätverk har, till skillnad från det normala Ethernet, begränsat intervall. Infiniband-nätverksfunktionerna beskrivs av "PlacementGroups". Om virtuella datorer finns i samma placeringsgrupp och är särskilda Infiniband-aktiverade VM-typer delar de ett Infiniband-nätverk.

Dessa placeringsgrupper kräver särskild hantering i LSF och CycleCloud.

Här är ett exempel på en LSF-mall för Cyclecloud från 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"
}

placementGroupName I den här filen kan vara vad som helst men avgör namnet på placementGroup i CycleCloud. Alla noder som lånas från CycleCloud från den här mallen finns i den här placementGroup och, om de är Infiniband-aktiverade virtuella datorer, kommer att dela ett IB-nätverk.

Observera att placementGroupName matchar värdattributet placementgroup, detta avsiktligt och nödvändigt. Också att är inställd på placement_group_iduserData att användas i user_data.sh vid värdstarttid. Attributet ondemandmpi kan verka överflödigt men används för att förhindra att det här jobbet matchar på värdar där placementGroup är odefinierat.

När du använder placeringsgrupper finns det ofta en maximal placeringsgruppstorlek som bestäms av Azure.MaxScaleSetSize egenskapen . Den här egenskapen begränsar indirekt hur många noder som kan läggas till i en placeringsgrupp, men beaktas inte av LSF. Det är därför viktigt att ange MaxNumber en LSF-mall som är Azure.MaxScaleSetSize lika med i klustermallen.

user_data.sh

Mallen innehåller attribut för att köra ett user_data.sh skript. customScriptUri och userData. Det här är URI och anpassade miljövariabler för det användarhanterade skriptet som körs vid nodstart. Det här skriptet laddas ned av annonymous CURL-kommandot, vilket customScriptUri innebär att autentiseringen misslyckas. Använd det här skriptet för att:

  1. Konfigurera arbetarens LSF-daemon; särskilt LSF_LOCAL_RESOURCES och LSF_MASTER_LIST
    • Om LSF_TOP finns i ett delat filsystem kan det vara bra att göra en lokal kopia av lsf.conf och ange variabeln LSF_ENVDIR innan du startar daemonerna.
  2. Starta lim, res och sbatch daemons.

Det finns några standardmiljövariabler som anges av CycleCloud-providern.

  • rc_account
  • template_id
  • providerName
  • clustername
  • cyclecloud_nodeid (rekommenderas att ange detta till instanceId resurs)

Andra användardatavariabler som kan vara användbara för att hantera resurser i CycleCloud-providern är:

  • nodearray_name
  • placement_group_id

Anteckning

Även om Windows är en officiellt stödd LSF-plattform har CycleCloud inte stöd för att köra LSF på Windows just nu.