Esercizio - Aggiungere una matrice di nodi personalizzata a un cluster HPC

Completato

Attenzione

Questo contenuto fa riferimento a CentOS, una distribuzione Linux con stato End Of Life (EOL). Valutare le proprie esigenze e pianificare di conseguenza. Per ulteriori informazioni, consultare la Guida alla fine del ciclo di vita di CentOS.

Un oggetto nodearray è una raccolta di nodi configurati in modo identico di un cluster Azure CycleCloud. Lo scopo è quello di offrire scalabilità orizzontale delle risorse di calcolo del cluster quando cambia il numero di processi in coda. Ogni oggetto nodearray ha un nome, un set di attributi che si applicano a ogni nodo e attributi facoltativi che descrivono come deve essere ridimensionato l'oggetto nodearray.

Nel pianificatore di processi Slurm le partizioni raggruppano i nodi in set logici potenzialmente sovrapposti. Lo scopo è quello di ottimizzare l'elaborazione dei processi rispettando i vincoli specifici, ad esempio i limiti di risorse o di tempo. L'utilità di pianificazione alloca i processi ai nodi all'interno di una partizione fino all'esaurimento delle risorse o all'elaborazione di tutti i processi.

Si vuole modificare il cluster gestito da Azure CycleCloud appena distribuito per soddisfare le esigenze di risorse specifiche del processo. A tale scopo, si decide di applicare altre modifiche al modello sottostante e convalidare l'approccio.

In questo esercizio si eseguiranno le seguenti attività:

  • Attività 1: Aggiungere una definizione di oggetto nodearray al modello di Azure CycleCloud
  • Attività 2: Aggiungere parametri di interfaccia grafica al modello di Azure CycleCloud
  • Attività 3: Esportare le proprietà del cluster Azure CycleCloud
  • Attività 4: Modificare il file delle proprietà per includere i nuovi parametri
  • Attività 5: Importare il modello modificato e il file dei parametri nel cluster esistente

Nota

Assicurarsi di aver completato l'esercizio precedente prima di iniziare questo esercizio.

Attività 1: Aggiungere una definizione di oggetto nodearray al modello di Azure CycleCloud

Si inizierà aggiungendo una definizione di un oggetto nodearray nel modello Slurm che stato personalizzato nell'esercizio precedente di questo modulo. Il modello di esempio include due partizioni con etichetta hpc e htc. Verranno creati un'altra partizione e l'oggetto nodearray corrispondente per i processi che usano le funzionalità CUDA (Compute Unified Device Architecture).

  1. Passare al portale di Azure. Quando richiesto, eseguire l'autenticazione con un account Microsoft o un account Microsoft Entra con il ruolo Collaboratore o Proprietario nella sottoscrizione di Azure usata in questo modulo.

  2. Dal portale di Azure aprire Cloud Shell selezionando la relativa icona sulla barra degli strumenti accanto alla casella di testo di ricerca e assicurarsi di eseguire una sessione di Bash.

  3. Eseguire il comando seguente in Cloud Shell per impostare la directory di lavoro su quella che ospita il repository GitHub recuperato nell'esercizio precedente:

    cd ~/cyclecloud-slurm/templates
    
  4. Eseguire il comando seguente per aprire il modello scaricato nell'editor nano:

    nano slurm.txt
    
  5. Nell'interfaccia dell'editor nano scorrere fino alla sezione [parameters About] e aggiungere il contenuto seguente direttamente prima di essa:

    
    [[nodearray cuda]]
    MachineType = $CUDAMachineType
    ImageName = $CUDAImageName
    MaxCoreCount = $MaxCUDAExecuteCoreCount
    
    AdditionalClusterInitSpecs = $CUDAClusterInitSpecs
    
        [[[configuration]]]
        slurm.autoscale = true
        slurm.hpc = true
    
        [[[cluster-init cyclecloud/slurm:execute]]]
    
        [[[network-interface eth0]]]
        AssociatePublicIpAddress = $ExecuteNodesPublic
    
    

    Nota

    Se si usa un computer Windows, è possibile incollare il contenuto degli Appunti usando la combinazione di tasti MAIUSC+INS.

    Nota

    Le modifiche definiscono un oggetto nodearray aggiuntivo.

Attività 2: Aggiungere parametri di interfaccia grafica al modello di Azure CycleCloud

Per poter modificare i valori dei parametri del modello nell'interfaccia grafica di Azure CycleCloud, verranno applicate altre modifiche al modello.

  1. Nell'interfaccia dell'editor nano scorrere fino alla sezione [[parameters Auto-Scaling]] e aggiungere il contenuto seguente direttamente prima di essa:

    
        [[[parameter CUDAMachineType]]]
        Label = CUDA VM Type
        Description = The VM type for CUDA execute nodes
        ParameterType = Cloud.MachineType
        DefaultValue = Standard_NC24
    
    
  2. Scorrere fino alla sezione [[[parameter HPCMaxScalesetSize]]] e aggiungere il contenuto seguente direttamente prima di esso:

    
        [[[parameter MaxCUDAExecuteCoreCount]]]
        Label = Max CUDA Cores
        Description = The total number of CUDA execute cores to start
        DefaultValue = 100
        Config.Plugin = pico.form.NumberTextBox
        Config.MinValue = 0
        Config.IntegerOnly = true
    
    
  3. Scorrere fino alla sezione [[[parameter SchedulerClusterInitSpecs]]] e aggiungere il contenuto seguente direttamente prima di esso:

    
        [[[parameter CUDAImageName]]]
        Label = CUDA OS
        ParameterType = Cloud.Image
        Config.OS = linux
        DefaultValue = cycle.image.centos7
        Config.Filter := Package in {"cycle.image.centos7", "cycle.image.ubuntu18"}
    
    
  4. Scorrere fino alla sezione [[parameters Advanced Networking]] e aggiungere il contenuto seguente direttamente prima di esso:

    
        [[[parameter CUDAClusterInitSpecs]]]
        Label = CUDA Cluster-Init
        DefaultValue = =undefined
        Description = Cluster init specs to apply to CUDA execute nodes
        ParameterType = Cloud.ClusterInitSpecs
    
    
  5. Sselezionare la combinazione di tasti CTRL+O, premere INVIO e quindi selezionare la combinazione di tasti CTRL+X per salvare le modifiche apportate e chiudere il file.

Attività 3: Esportare le proprietà del cluster Azure CycleCloud

Prima di applicare le modifiche di configurazione apportate nel modello di Azure CycleCloud al cluster di destinazione, è necessario esportare le proprietà del cluster.

  1. Eseguire il comando seguente in Cloud Shell per elencare i cluster esistenti:

    cyclecloud show_cluster
    

    Nota

    Verificare che l'output includa la voce contoso-custom-slurm-lab-cluster.

  2. Eseguire il comando seguente per esportare nel file params.json l'elenco di parametri del cluster contoso-custom-slurm-lab-cluster con i relativi valori:

    cyclecloud export_parameters contoso-custom-slurm-lab-cluster > ~/params.json
    
  3. Eseguire il comando seguente per esaminare l'elenco esportato di parametri con i relativi valori:

    cat ~/params.json
    

Attività 4: Modificare il file delle proprietà per includere i nuovi parametri

Anche se le modifiche applicate al modello di Azure CycleCloud includono i valori predefiniti per tutti i parametri appena introdotti, può essere necessario apportare modifiche in base ai requisiti specifici. In questa attività si imposteranno i valori dei parametri CUDAMachineType e MaxCUDAExecuteCoreCount.

  1. Eseguire il comando seguente in Cloud Shell per aprire il file dei parametri scaricato nell'editor nano:

    nano ~/params.json
    
  2. Nell'interfaccia dell'editor nano scorrere fino alla fine del file e aggiungere il contenuto seguente iniziando con una nuova riga prima della parentesi graffa di chiusura (}):

       "CUDAMachineType" : "Standard_NC6",
       "MaxCUDAExecuteCoreCount" : 60
    
  3. Aggiungere una virgola alla fine della riga che precede la riga aggiunta nel passaggio precedente:

       "CUDAMachineType" : "Standard_NC6"
    
  4. Sselezionare la combinazione di tasti CTRL+O, premere INVIO e quindi selezionare la combinazione di tasti CTRL+X per salvare le modifiche apportate e chiudere il file.

Attività 5: Importare il modello modificato e il file dei parametri nel cluster esistente

Per concludere questo esercizio, si importeranno il modello modificato e il relativo file dei parametri nel cluster esistente, sostituendo la configurazione corrente.

  1. Eseguire il comando seguente in Cloud Shell per importare il modello modificato e il relativo file di parametri nel cluster esistente:

    cyclecloud import_cluster contoso-custom-slurm-lab-cluster --file ~/cyclecloud-slurm/templates/slurm.txt -p ~/params.json -c Slurm --force
    

    Nota

    È necessario specificare il nome del cluster di destinazione e il flag --force force per sovrascrivere la configurazione del cluster esistente.

  2. Nel computer aprire un'altra finestra del browser e passare all'URL https://<IP_address>. Se viene richiesto, confermare di voler continuare.

  3. Se viene richiesto di eseguire l'autenticazione, accedere fornendo le credenziali dello stesso account utente dell'applicazione Azure CycleCloud usato per configurare l'interfaccia della riga di comando di Azure CycleCloud.

  4. Nell'interfaccia grafica di Azure CycleCloud passare alla pagina Clusters (Cluster). Nell'elenco dei cluster selezionare la voce contoso-custom-slurm-lab-cluster e quindi Edit (Modifica).

  5. Nella finestra popoup Edit contoso-custom-slurm-lab-cluster (Modifica contoso-custom-slurm-lab-cluster), nella pagina About (Informazioni) selezionare Next (Avanti).

  6. Nella pagina Required settings (Impostazioni obbligatorie) verificare la presenza della voce CUDA VM Type (Tipo VM CUDA) impostata sul valore Standard_NC6 e delle opzioni di scalabilità automatica corrispondenti:

Screenshot della pagina relativa alle impostazioni obbligatorie della finestra popup di modifica di contoso-custom-slurm-lab-cluster.

Complimenti. Il secondo esercizio del modulo è stato completato. In questo esercizio è stato ulteriormente personalizzato il cluster Azure CycleCloud usando un modello modificato che include la definizione di un nuovo oggetto nodearray con la partizione corrispondente. A tale scopo, dopo aver modificato il modello, il file dei parametri del cluster è stato esportato, modificato e importato, insieme al modello modificato, nel cluster.

Nota

Non eliminare le risorse distribuite e configurate in questo esercizio se si prevede di eseguire l'esercizio successivo. Queste risorse sono necessarie per completare l'esercizio successivo.