Condividi tramite


IBM Spectrum LSF

A partire da LSF 10.1 FixPack 9 (10.1.0.9) Azure CycleCloud è un provider nativo per Resource Connector. IBM fornisce la documentazione. Queste risorse forniscono istruzioni sulla configurazione del nodo Master LSF per la connessione a CycleCloud.

LSF è un prodotto concesso in licenza IBM; L'uso di LSF in CycleCloud richiede un file entitlement fornito da IBM ai propri clienti.

Nota

LSF è un prodotto concesso in licenza IBM; L'uso di LSF in CycleCloud richiede un file entitlement fornito da IBM ai propri clienti. I file binari e il file entitlement LSF devono essere aggiunti ai BLOB/directory per usare il cluster completamente automatizzato o il generatore di immagini di macchine virtuali in questo progetto. Per usare il cluster completamente automatizzato o il generatore di immagini vm in questo progetto file binari LSF e entitlement devono essere aggiunti alla directory BLOB/.

Scenari supportati del tipo di cluster CycleCloud LSF

LSF può "prendere in prestito" gli host da Azure per eseguire processi in modo on demand, aggiungendo e rimuovendo host in base alle esigenze. Il tipo di cluster LSF è flessibile per gestire diversi scenari in un singolo cluster:

  1. Processi con velocità effettiva elevata (CPU & GPU)
  2. Strettamente accoppiato (MPI, CPU & GPU)
  3. Priorità bassa

Questi scenari vengono gestiti dalla configurazione di più nodearray e proprietà LSF in concerto. I nodearray sono preconfigurati in CycleCloud. La configurazione corretta di LSF consente i vari scenari di processo.

Quando LSF è configurato in base a queste raccomandazioni, bsub i requisiti -R delle risorse possono essere usati nel modo seguente:

Usare la risorsa placementGroup per eseguire un processo con la rete connessa InfiniBand.

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

Per le GPU è consigliabile usare il supporto LSF per la sintassi GPU estesa. In genere è necessario aggiungere due attributi a lsf.conf: LSB_GPU_NEW_SYNTAX=extend e LSF_GPU_AUTOCONFIG=Y. Con il supporto per la sintassi estesa abilitata, usare placementGroup insieme -gpu a per eseguire un processo strettamente associato con l'accelerazione GPU.

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

Eseguire processi abilitati per GPU in modo parallelo.

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

Eseguire un processo burst di grandi dimensioni in macchine virtuali a bassa priorità.

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

Configurazione di LSF per il tipo di cluster CycleCloud LSF

Per abilitare questi scenari come descritto, aggiungere diversi tipi di risorse condivise a 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)

È possibile che cyclecloudlowprio sia possibile uscire, ma offre un ulteriore controllo che i processi sono in esecuzione nella tenancy della macchina virtuale desiderata.

Modello di provider LSF per CycleCloud

Il provider LSF CycleCloud espone diverse configurazioni tramite il modello di provider. Queste configurazioni sono un subset della configurazione completa dell'oggetto nodearray.

Ecco un esempio di modello LSF per Cyclecloud da 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"
}

Attributi del modello LSF per CycleCloud

Non tutti gli attributi nodearray vengono esposti dal modello di provider LSF. Queste possono essere considerate sostituzioni della configurazione nodearray CycleCloud. L'unico modello LSF obbligatorio è:

  • templateId
  • nodeArray

Altri vengono dedotti dalla configurazione di CycleCloud, possono essere omessi o non sono necessari affatto.

  • imageId: immagine della macchina virtuale di Azure, ad esempio "/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx/resourceGroups/my-images-rg/providers/Microsoft.Compute/images/lsf-execute-201910230416-80a9a87f" override per la configurazione del cluster CycleCloud.
  • subnetId: subnet di Azure, ad esempio "resource_group/vnet/subnet" override per la configurazione del cluster CycleCloud.
  • vmType: ad esempio "Standard_HC44rs" override per la configurazione del cluster CycleCloud.
  • keyPairLocation: ad esempio "~/.ssh/id_rsa_beta" override per la configurazione del cluster CycleCloud.
  • customScriptUri, ad esempio "http://10.1.0.4/user_data.sh", nessun script se non specificato.
  • userData: ad esempio "nodearray_name=gpumpi;placement_group_id=gpumpipg1" vuoto se non specificato.

Nota sui placementGroup

I data center di Azure dispongono di funzionalità di rete Infiniband per gli scenari HPC. Queste reti, a differenza della normale ethernet, hanno un intervallo limitato. Gli extent di rete Infiniband sono descritti da "PlacementGroups". Se le macchine virtuali si trovano nello stesso gruppo di posizionamento e sono tipi di VM abilitati per Infiniband speciali, condivideranno una rete Infiniband.

Questi gruppi di posizionamento richiedono una gestione speciale in LSF e CycleCloud.

Ecco un esempio di modello LSF per Cyclecloud da 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"
}

In placementGroupName questo file può essere qualsiasi elemento, ma determinerà il nome del placementGroup in CycleCloud. Tutti i nodi presi in prestito da CycleCloud da questo modello si troveranno in questo placementGroup e, se sono macchine virtuali abilitate per Infiniband, condivideranno una rete IB.

Si noti che placementGroupName corrisponde all'attributo placementgrouphost , che è intenzionale e necessario. Inoltre, l'oggetto è impostato in userData da usare in user_data.sh all'ora placement_group_id di inizio dell'host. L'attributo ondemandmpi può sembrare estraneo, ma viene usato per impedire che questo processo corrisponda agli host in cui placementGroup non è definito.

Spesso quando si usano gruppi di posizionamento sarà presente una dimensione massima del gruppo di posizionamento determinata dalla Azure.MaxScaleSetSize proprietà . Questa proprietà limita indirettamente il numero di nodi che possono essere aggiunti a un gruppo di posizionamento, ma non vengono considerati da LSF. È quindi importante impostare MaxNumber il modello LSF uguale a Azure.MaxScaleSetSize nel modello di cluster.

user_data.sh

Il modello fornisce attributi per l'esecuzione di uno script user_data.sh ; customScriptUri e userData. Si tratta dell'URI e delle variabili di ambiente personalizzate dello script gestito dall'utente in esecuzione all'avvio del nodo. Questo script viene scaricato dal comando CURL annonymous, quindi customScriptUri la richiesta di autenticazione non riesce. Usare questo script per:

  1. Configurare i daemon LSF del ruolo di lavoro; in particolare LSF_LOCAL_RESOURCES e LSF_MASTER_LIST
    • Se LSF_TOP si trova in un file system condiviso, può essere utile creare una copia locale di lsf.conf e impostare la LSF_ENVDIR variabile prima di avviare i daemon.
  2. Avviare i daemon lim, res e sbatch.

Esistono alcune variabili di ambiente predefinite impostate dal provider CycleCloud.

  • rc_account
  • template_id
  • providerName
  • clustername
  • cyclecloud_nodeid (consigliato per impostare questa opzione su instanceId risorsa)

Altre variabili di dati utente che possono essere utili per la gestione delle risorse nel provider CycleCloud sono:

  • nodearray_name
  • placement_group_id

Nota

Anche se Windows è una piattaforma LSF supportata ufficialmente, CycleCloud non supporta attualmente l'esecuzione di LSF in Windows.