Configurazione di un cluster Linux RDMA per eseguire applicazioni MPISet up a Linux RDMA cluster to run MPI applications

Informazioni su come configurare un cluster Linux RDMA in Azure con Dimensioni delle VM High Performance Computing (HPC) per eseguire applicazioni MPI (Message Passing Interface) in parallelo.Learn how to set up a Linux RDMA cluster in Azure with High performance compute VM sizes to run parallel Message Passing Interface (MPI) applications. Questo articolo illustra la procedura per preparare un'immagine Linux HPC per l'esecuzione di Intel MPI in un cluster.This article provides steps to prepare a Linux HPC image to run Intel MPI on a cluster. Dopo la preparazione viene distribuito un cluster di macchine virtuali usando questa immagine e una delle dimensioni di macchina virtuale di Azure con supporto per RDMA (attualmente H16r, H16mr, A8 o A9).After preparation, you deploy a cluster of VMs using this image and one of the RDMA-capable Azure VM sizes (currently H16r, H16mr, A8, or A9). Usare il cluster per eseguire applicazioni MPI in grado di comunicare in modo efficiente tramite una rete a bassa latenza e velocità effettiva elevata basata sulla tecnologia di accesso diretto a memoria remota (RDMA).Use the cluster to run MPI applications that communicate efficiently over a low-latency, high-throughput network based on remote direct memory access (RDMA) technology.

Importante

Azure offre due diversi modelli di distribuzione per creare e usare le risorse: Azure Resource Manager e la distribuzione classica.Azure has two different deployment models for creating and working with resources: Azure Resource Manager and classic. Questo articolo illustra l'uso del modello di distribuzione classica.This article covers using the classic deployment model. Microsoft consiglia di usare il modello di Gestione risorse per le distribuzioni più recenti.Microsoft recommends that most new deployments use the Resource Manager model.

Opzioni di distribuzione del clusterCluster deployment options

Di seguito vengono riportati i metodi utilizzabili per creare un cluster Linux RDMA con o senza un'utilità di pianificazione del processo.Following are methods you can use to create a Linux RDMA cluster with or without a job scheduler.

  • Script dell'interfaccia della riga di comando di Azure: come illustrato più avanti in questo articolo, usare l'interfaccia della riga di comando di Azure per eseguire lo script della distribuzione di un cluster di macchine virtuali con supporto per RDMA.Azure CLI scripts: As shown later in this article, use the Azure command-line interface (CLI) to script the deployment of a cluster of RDMA-capable VMs. L'interfaccia della riga di comando in modalità Service Management crea i nodi del cluster in modo seriale nel modello di distribuzione classica, quindi la distribuzione di molti nodi di calcolo potrebbe richiedere alcuni minuti.The CLI in Service Management mode creates the cluster nodes serially in the classic deployment model, so deploying many compute nodes might take several minutes. Per abilitare la connessione di rete RDMA quando si usa il modello di distribuzione classico, distribuire le macchine virtuali nello stesso servizio cloud.To enable the RDMA network connection when you use the classic deployment model, deploy the VMs in the same cloud service.
  • Modelli di Azure Resource Manager: è possibile anche usare il modello di distribuzione di Resource Manager per distribuire un cluster di macchine virtuali con supporto per RDMA che si connette alla rete RDMA.Azure Resource Manager templates: You can also use the Resource Manager deployment model to deploy a cluster of RDMA-capable VMs that connects to the RDMA network. Per distribuire la soluzione desiderata, è possibile creare un modello personalizzato o vedere la Modelli di avvio rapido di Azure per accedere ai modelli forniti da Microsoft o dalla community.You can create your own template, or check the Azure quickstart templates for templates contributed by Microsoft or the community to deploy the solution you want. I modelli di Gestione risorse riescono a fornire un modo veloce e affidabile per distribuire un cluster Linux.Resource Manager templates can provide a fast and reliable way to deploy a Linux cluster. Per abilitare la connessione di rete RDMA quando si usa il modello di distribuzione di Resource Manager, distribuire le macchine virtuali nello stesso set di disponibilità.To enable the RDMA network connection when you use the Resource Manager deployment model, deploy the VMs in the same availability set.
  • HPC Pack: creare un cluster Microsoft HPC Pack in Azure e aggiungere nodi di calcolo con supporto per RDMA che eseguono una distribuzione Linux supportata per accedere alla rete RDMA.HPC Pack: Create a Microsoft HPC Pack cluster in Azure and add RDMA-capable compute nodes that run a supported Linux distribution to access the RDMA network. Per ulteriori informazioni, vedere Introduzione all’uso di nodi di calcolo Linux in un cluster HPC Pack in Azure.For more information, see Get started with Linux compute nodes in an HPC Pack cluster in Azure.

Procedura per una distribuzione di esempio nel modello classicoSample deployment steps in the classic model

I passaggi seguenti mostrano come usare l'interfaccia della riga di comando di Azure per distribuire una macchina virtuale HPC SUSE Linux Enterprise Server (SLES) 12 SP1 da Azure Marketplace, personalizzarla e creare un'immagine di macchina virtuale personalizzata.The following steps show how to use the Azure CLI to deploy a SUSE Linux Enterprise Server (SLES) 12 SP1 HPC VM from the Azure Marketplace, customize it, and create a custom VM image. È quindi possibile usare l'immagine per lo script della distribuzione di un cluster di macchine virtuali con supporto per RDMA.Then you can use the image to script the deployment of a cluster of RDMA-capable VMs.

Suggerimento

Usare una procedura simile per distribuire un cluster di macchine virtuali con supporto per RDMA basate su immagini HPC basate su CentOS in Azure Marketplace.Use similar steps to deploy a cluster of RDMA-capable VMs based on CentOS-based HPC images in the Azure Marketplace. Come indicato, alcuni passaggi variano leggermente.Some steps differ slightly, as noted.

PrerequisitiPrerequisites

  • Computer client: è necessario un computer client Mac, Linux o Windows per comunicare con Azure.Client computer: You need a Mac, Linux, or Windows client computer to communicate with Azure. Nella procedura si presuppone che venga usato un client Linux.These steps assume you are using a Linux client.
  • Sottoscrizione di Azure: se non è disponibile una sottoscrizione, è possibile creare un account gratuito in pochi minuti.Azure subscription: If you don't have a subscription, you can create a free account in just a couple of minutes. Per cluster di maggiori dimensioni, prendere in considerazione una sottoscrizione con pagamento in base al consumo o altre opzioni di acquisto.For larger clusters, consider a pay-as-you-go subscription or other purchase options.
  • Disponibilità delle dimensioni di macchina virtuale: offrono supporto per RDMA le dimensioni di istanza seguenti: H16r, H16mr, A8 e A9.VM size availability: The following instance sizes are RDMA capable: H16r, H16mr, A8, and A9. Per informazioni sulla disponibilità nelle aree di Azure, vedere Prodotti disponibili in base all'area .Check Products available by region for availability in Azure regions.
  • Quota di core: può essere necessario aumentare la quota di core per distribuire un cluster di macchine virtuali a elevato uso di calcolo.Cores quota: You might need to increase the quota of cores to deploy a cluster of compute-intensive VMs. Ad esempio, se si desidera distribuire 8 VM A9 come illustrato in questo articolo, è necessario disporre di almeno 128 core.For example, you need at least 128 cores if you want to deploy 8 A9 VMs as shown in this article. La sottoscrizione può anche limitare il numero di core che è possibile distribuire in alcune famiglie di dimensioni di macchina virtuale, inclusa la serie H.Your subscription might also limit the number of cores you can deploy in certain VM size families, including the H-series. Per richiedere un aumento della quota, è possibile aprire una richiesta di assistenza clienti online senza alcun addebito.To request a quota increase, open an online customer support request at no charge.
  • Interfaccia della riga di comando di Azure: installare l'interfaccia della riga di comando di Azure e connetterla alla sottoscrizione di Azure dal computer client.Azure CLI: Install the Azure CLI and connect to your Azure subscription from the client computer.

Provisioning di una macchina virtuale HPC SLES 12 SP1Provision an SLES 12 SP1 HPC VM

Dopo l'accesso ad Azure con l'interfaccia della riga di comando di Azure, eseguire azure config list per verificare che l'output indichi la modalità Azure Service Management.After signing in to Azure with the Azure CLI, run azure config list to confirm that the output shows Service Management mode. In caso contrario, impostare la modalità eseguendo questo comando:If it does not, set the mode by running this command:

azure config mode asm

Digitare il comando seguente per elencare tutte le sottoscrizioni per le quali si dispone dell'autorizzazione:Type the following to list all the subscriptions you are authorized to use:

azure account list

La sottoscrizione attualmente attiva sarà identificata da Current impostato su true.The current active subscription is identified with Current set to true. Se questa sottoscrizione non è quella che si desidera usare per creare il cluster, impostare l'ID sottoscrizione appropriato come sottoscrizione attiva:If this subscription isn't the one you want to use to create the cluster, set the appropriate subscription ID as the active subscription:

azure account set <subscription-Id>

Per visualizzare le immagini HPC SLES 12 SP1 disponibili pubblicamente in Azure, eseguire un comando simile al seguente, presupponendo che l'ambiente shell supporti grep:To see the publicly available SLES 12 SP1 HPC images in Azure, run a command like the following, assuming your shell environment supports grep:

azure vm image list | grep "suse.*hpc"

Eseguire il provisioning di una macchina virtuale con supporto per RDMA con un'immagine HPC SLES 12 SP1 eseguendo un comando simile al seguente:Provision an RDMA-capable VM with a SLES 12 SP1 HPC image by running a command like the following:

azure vm create -g <username> -p <password> -c <cloud-service-name> -l <location> -z A9 -n <vm-name> -e 22 b4590d9e3ed742e4a1d46e5424aa335e__suse-sles-12-sp1-hpc-v20160824

Dove:Where:

  • La dimensione (A9 in questo esempio) è una delle dimensioni di macchina virtuale con supporto per RDMA.The size (A9 in this example) is one of the RDMA-capable VM sizes.
  • Il numero della porta SSH esterna (22 in questo esempio, ovvero la porta SSH predefinita) può essere qualsiasi numero di porta valido.The external SSH port number (22 in this example, which is the SSH default) is any valid port number. Il numero della porta SSH interna è impostato su 22.The internal SSH port number is set to 22.
  • viene creato un nuovo servizio cloud nell'area di Azure specificata dalla localitàA new cloud service is created in the Azure region specified by the location. Specificare una posizione in cui sia disponibile la dimensione di macchina virtuale scelta.Specify a location in which the VM size you choose is available.
  • Attualmente il nome dell'immagine SLES 12 SP1 può essere una delle due opzioni seguenti per il supporto SUSE prioritario (sono previsti costi aggiuntivi).For SUSE priority support (which incurs additional charges), the SLES 12 SP1 image name currently can be one of these two options:

    b4590d9e3ed742e4a1d46e5424aa335e__suse-sles-12-sp1-hpc-v20160824

    b4590d9e3ed742e4a1d46e5424aa335e__suse-sles-12-sp1-hpc-priority-v20160824

Personalizzazione della macchina virtualeCustomize the VM

Quando la macchina virtuale completa il provisioning, assegnare una porta SSH alla macchina virtuale usando l'indirizzo IP esterno della macchina virtuale (o nome DNS) e il numero della porta esterna configurata, quindi personalizzarla.After the VM finishes provisioning, SSH to the VM by using the VM's external IP address (or DNS name) and the external port number you configured, and then customize it. Per informazioni dettagliate sulla connessione, vedere Come accedere a una macchina virtuale che esegue Linux.For connection details, see How to log on to a virtual machine running Linux. Eseguire i comandi come l'utente configurato nella VM, a meno che non sia necessario l'accesso alla radice per eseguire un passaggio.Perform commands as the user you configured on the VM, unless root access is required to complete a step.

Importante

Microsoft Azure non fornisce l'accesso alla directory principale per le macchine virtuali Linux.Microsoft Azure does not provide root access to Linux VMs. Per ottenere l'accesso amministrativo quando si è connessi come utente alla macchina virtuale, eseguire i comandi con sudo.To gain administrative access when connected as a user to the VM, run commands by using sudo.

  • Aggiornamenti: installare gli aggiornamenti usando zypper.Updates: Install updates by using zypper. È anche possibile decidere di installare le utilità NFS.You might also want to install NFS utilities.

    Importante

    In una macchina virtuale HPC SLES 12 SP1 è consigliabile non applicare gli aggiornamenti del kernel, che possono causare problemi con i driver Linux RDMA.In a SLES 12 SP1 HPC VM, we recommend that you don't apply kernel updates, which can cause issues with the Linux RDMA drivers.

  • Intel MPI: completare l'installazione di Intel MPI nella macchina virtuale HPC SLES 12 SP1 eseguendo il comando seguente:Intel MPI: Complete the installation of Intel MPI on the SLES 12 SP1 HPC VM by running the following command:

      sudo rpm -v -i --nodeps /opt/intelMPI/intel_mpi_packages/*.rpm
    
  • Blocco della memoria: affinché i codici MPI blocchino la memoria disponibile per RDMA, aggiungere o modificare le impostazioni seguenti nel file /etc/security/limits.conf.Lock memory: For MPI codes to lock the memory available for RDMA, add or change the following settings in the /etc/security/limits.conf file. Per modificare questo file è necessario l'accesso alla radice.You need root access to edit this file.

    <User or group name> hard    memlock <memory required for your application in KB>
    
    <User or group name> soft    memlock <memory required for your application in KB>
    

    Nota

    A scopo di test, è inoltre possibile impostare memlock su illimitato.For testing purposes, you can also set memlock to unlimited. Ad esempio: <User or group name> hard memlock unlimited.For example: <User or group name> hard memlock unlimited. Per altre informazioni, vedere Metodi noti per l'impostazione delle dimensioni della memoria bloccata.For more information, see Best known methods for setting locked memory size.

  • Chiavi SSH per VM SLES: generare chiavi SSH per stabilire una relazione di trust per il proprio account utente tra i nodi di calcolo del cluster SLES quando vengono eseguiti processi MPI.SSH keys for SLES VMs: Generate SSH keys to establish trust for your user account among the compute nodes in the SLES cluster when running MPI jobs. Se è stata distribuita una macchina virtuale HPC basata su CentOS, non seguire questo passaggio.If you deployed a CentOS-based HPC VM, don't follow this step. Vedere le istruzioni più avanti nell'articolo per configurare un trust SSH senza password tra i nodi del cluster dopo aver acquisito l'immagine e distribuito il cluster.See instructions later in this article to set up passwordless SSH trust among the cluster nodes after you capture the image and deploy the cluster.

    Usare il comando seguente per creare chiavi SSH.To create SSH keys, run the following command. Quando viene richiesto, premere INVIO per generare le chiavi nel percorso predefinito senza impostare una password.When you are prompted for input, select Enter to generate the keys in the default location without setting a password.

      ssh-keygen
    

    Aggiungere la chiave pubblica alla fine del file authorized_keys per le chiavi pubbliche note.Append the public key to the authorized_keys file for known public keys.

      cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    

    Nella directory ~/.ssh modificare o creare il file config.In the ~/.ssh directory, edit or create the config file. Specificare l'intervallo di indirizzi IP della rete privata che si prevede di usare in Azure (10.32.0.0/16 in questo esempio):Provide the IP address range of the private network that you plan to use in Azure (10.32.0.0/16 in this example):

      host 10.32.0.*
      StrictHostKeyChecking no
    

    In alternativa, elencare l'indirizzo IP di rete privata di ogni macchina virtuale del cluster come segue:Alternatively, list the private network IP address of each VM in your cluster as follows:

    host 10.32.0.1
     StrictHostKeyChecking no
    host 10.32.0.2
     StrictHostKeyChecking no
    host 10.32.0.3
     StrictHostKeyChecking no
    

    Nota

    La configurazione di StrictHostKeyChecking no può creare un potenziale rischio di sicurezza quando non viene specificato un intervallo o un indirizzo IP specifico.Configuring StrictHostKeyChecking no can create a potential security risk when a specific IP address or range is not specified.

  • Applicazioni: installare le applicazioni necessarie in questa macchina virtuale o eseguire altre personalizzazioni prima di acquisire l'immagine.Applications: Install any applications you need or perform other customizations before you capture the image.

Acquisire l'immagineCapture the image

Per acquisire l'immagine, eseguire prima il comando seguente nella macchina virtuale Linux.To capture the image, first run the following command on the Linux VM. Questo comando esegue il deprovisioning della VM, ma mantiene gli account utente e le chiavi SSH configurati.This command deprovisions the VM but maintains user accounts and SSH keys that you set up.

sudo waagent -deprovision

Dal computer client, usare i seguenti comandi dell'interfaccia della riga di comando di Azure per acquisire l'immagine.From your client computer, run the following Azure CLI commands to capture the image. Per ulteriori informazioni, vedere Come acquisire una macchina virtuale Linux classica come immagine.For more information, see How to capture a classic Linux virtual machine as an image.

azure vm shutdown <vm-name>

azure vm capture -t <vm-name> <image-name>

Dopo l'esecuzione di questi comandi, l'immagine della macchina virtuale viene acquisita per l'uso e la macchina virtuale viene eliminata.After you run these commands, the VM image is captured for your use and the VM is deleted. Ora si dispone dell'immagine personalizzata pronta per distribuire un cluster.Now you have your custom image ready to deploy a cluster.

Distribuzione di un cluster con l'immagineDeploy a cluster with the image

Modificare lo script Bash seguente con i valori appropriati per il proprio ambiente ed eseguirlo dal computer client.Modify the following Bash script with appropriate values for your environment and run it from your client computer. Poiché Azure distribuisce le VM in modo seriale nel modello di distribuzione classica, sono necessari alcuni minuti per distribuire le otto macchine virtuali A9 suggerite in questo script.Because Azure deploys the VMs serially in the classic deployment model, it takes a few minutes to deploy the eight A9 VMs suggested in this script.

#!/bin/bash -x
# Script to create a compute cluster without a scheduler in a VNet in Azure
# Create a custom private network in Azure
# Replace 10.32.0.0 with your virtual network address space
# Replace <network-name> with your network identifier
# Replace "West US" with an Azure region where the VM size is available
# See Azure Pricing pages for prices and availability of compute-intensive VMs

azure network vnet create -l "West US" -e 10.32.0.0 -i 16 <network-name>

# Create a cloud service. All the compute-intensive instances need to be in the same cloud service for Linux RDMA to work across InfiniBand.
# Note: The current maximum number of VMs in a cloud service is 50. If you need to provision more than 50 VMs in the same cloud service in your cluster, contact Azure Support.

azure service create <cloud-service-name> --location "West US" –s <subscription-ID>

# Define a prefix naming scheme for compute nodes, e.g., cluster11, cluster12, etc.

vmname=cluster

# Define a prefix for external port numbers. If you want to turn off external ports and use only internal ports to communicate between compute nodes via port 22, don’t use this option. Since port numbers up to 10000 are reserved, use numbers after 10000. Leave external port on for rank 0 and head node.

portnumber=101

# In this cluster there will be 8 size A9 nodes, named cluster11 to cluster18. Specify your captured image in <image-name>. Specify the username and password you used when creating the SSH keys.

for (( i=11; i<19; i++ )); do
        azure vm create -g <username> -p <password> -c <cloud-service-name> -z A9 -n $vmname$i -e $portnumber$i -w <network-name> -b Subnet-1 <image-name>
done

# Save this script with a name like makecluster.sh and run it in your shell environment to provision your cluster

Considerazioni per un cluster HPC CentOSConsiderations for a CentOS HPC cluster

Se si vuole impostare un cluster in base a una delle immagini HPC basate su CentOS in Azure Marketplace anziché SLES 12 per HPC, seguire la procedura generale riportata nella sezione precedente.If you want to set up a cluster based on one of the CentOS-based HPC images in the Azure Marketplace instead of SLES 12 for HPC, follow the general steps in the preceding section. Durante il provisioning e la configurazione della macchina virtuale, tenere presenti le differenze seguenti:Note the following differences when you provision and configure the VM:

  • Intel MPI è già installato in una macchina virtuale con provisioning da un'immagine HPC basata su CentOS.Intel MPI is already installed on a VM provisioned from a CentOS-based HPC image.
  • Le impostazioni di blocco della memoria sono già state aggiunte al file /etc/security/limits.conf della macchina virtuale.Lock memory settings are already added in the VM's /etc/security/limits.conf file.
  • Non generare chiavi SSH sulla macchina virtuale di cui viene effettuato il provisioning per l'acquisizione.Do not generate SSH keys on the VM you provision for capture. È invece consigliabile impostare l'autenticazione basata sull'utente dopo la distribuzione del cluster.Instead, we recommend setting up user-based authentication after you deploy the cluster. Per altre informazioni, vedere la sezione seguente.For more information, see the following section.

Impostare il trust SSH senza password nel clusterSet up passwordless SSH trust on the cluster

In un cluster HPC basato su CentOS sono disponibili due metodi per stabilire relazioni di trust tra i nodi di calcolo: autenticazione basata sull'host e autenticazione basata sull'utente.On a CentOS-based HPC cluster, there are two methods for establishing trust between the compute nodes: host-based authentication and user-based authentication. L'autenticazione basata sull'host non rientra nell'ambito di questo articolo e in genere deve essere eseguita tramite uno script di estensione durante la distribuzione.Host-based authentication is outside of the scope of this article and generally must be done through an extension script during deployment. L'autenticazione basata sull'utente è utile per stabilire un trust dopo la distribuzione e richiede la generazione e la condivisione di chiavi SSH tra i nodi di calcolo nel cluster.User-based authentication is convenient for establishing trust after deployment and requires the generation and sharing of SSH keys among the compute nodes in the cluster. Questo metodo è comunemente noto come accesso SSH senza password ed è obbligatorio quando si eseguono processi MPI.This method is commonly known as passwordless SSH login and is required when running MPI jobs.

In GitHub è disponibile uno script di esempio fornito dalla community per abilitare l'autenticazione utente semplice in un cluster HPC basato su CentOS.A sample script contributed from the community is available on GitHub to enable easy user authentication on a CentOS-based HPC cluster. Scaricare e usare questo script con la procedura seguente.Download and use this script by using the following steps. È anche possibile modificare lo script o usare qualsiasi altro metodo per stabilire l'autenticazione SSH senza password tra i nodi di calcolo del cluster.You can also modify this script or use any other method to establish passwordless SSH authentication between the cluster compute nodes.

wget https://raw.githubusercontent.com/tanewill/utils/master/ user_authentication.sh

Per eseguire lo script, è necessario conoscere il prefisso degli indirizzi IP della subnet.To run the script, you need to know the prefix for your subnet IP addresses. È possibile ottenere il prefisso con il comando seguente in uno dei nodi del cluster.Get the prefix by running the following command on one of the cluster nodes. L'output sarà essere simile a 10.1.3.5 e il prefisso è la parte 10.1.3.Your output should look something like 10.1.3.5, and the prefix is the 10.1.3 portion.

ifconfig eth0 | grep -w inet | awk '{print $2}'

Eseguire lo script con tre parametri: il nome utente comune nei nodi di calcolo, la password comune per tale utente nei nodi di calcolo e il prefisso della subnet restituito dal comando precedente.Now run the script using three parameters: the common user name on the compute nodes, the common password for that user on the compute nodes, and the subnet prefix that was returned from the previous command.

./user_authentication.sh <myusername> <mypassword> 10.1.3

Lo script esegue queste operazioni:This script does the following:

  • Crea una directory nel nodo host denominata SSH, necessaria per l'accesso senza password.Creates a directory on the host node named .ssh, which is required for passwordless login.
  • Crea un file di configurazione nella directory .ssh che indica di consentire l'accesso senza password da qualsiasi nodo del cluster.Creates a configuration file in the .ssh directory that instructs passwordless login to allow login from any node in the cluster.
  • Crea file contenenti i nomi dei nodi e gli indirizzi IP dei nodi per tutti i nodi del cluster.Creates files containing the node names and node IP addresses for all the nodes in the cluster. Questi file vengono lasciati dopo l'esecuzione dello script come riferimento futuro.These files are left after the script is run for later reference.
  • Crea una coppia di chiavi pubblica e privata per ogni nodo del cluster, incluso il nodo host, e crea una voce nel file authorized_keys.Creates a private and public key pair for each cluster node (including the host node) and creates entries in the authorized_keys file.

Avviso

L'esecuzione di questo script può creare un potenziale rischio per la sicurezza.Running this script can create a potential security risk. Assicurarsi che le informazioni sulla chiave pubblica in ~/.ssh non vengano distribuite.Ensure that the public key information in ~/.ssh is not distributed.

Configurare Intel MPIConfigure Intel MPI

Per eseguire applicazioni MPI su Azure Linux RDMA, è necessario configurare determinate variabili di ambiente specifiche di Intel MPI.To run MPI applications on Azure Linux RDMA, you need to configure certain environment variables specific to Intel MPI. Di seguito è riportato uno script Bash di esempio per la configurazione delle variabili necessarie per eseguire un'applicazione.Here is a sample Bash script to configure the variables needed to run an application. Modificare il percorso in mpivars.sh secondo le esigenze per l'installazione di Intel MPI.Change the path to mpivars.sh as needed for your installation of Intel MPI.

#!/bin/bash -x

# For a SLES 12 SP1 HPC cluster

source /opt/intel/impi/5.0.3.048/bin64/mpivars.sh

# For a CentOS-based HPC cluster

# source /opt/intel/impi/5.1.3.181/bin64/mpivars.sh

export I_MPI_FABRICS=shm:dapl

# THIS IS A MANDATORY ENVIRONMENT VARIABLE AND MUST BE SET BEFORE RUNNING ANY JOB
# Setting the variable to shm:dapl gives best performance for some applications
# If your application doesn’t take advantage of shared memory and MPI together, then set only dapl

export I_MPI_DAPL_PROVIDER=ofa-v2-ib0

# THIS IS A MANDATORY ENVIRONMENT VARIABLE AND MUST BE SET BEFORE RUNNING ANY JOB

export I_MPI_DYNAMIC_CONNECTION=0

# THIS IS A MANDATORY ENVIRONMENT VARIABLE AND MUST BE SET BEFORE RUNNING ANY JOB

# Command line to run the job

mpirun -n <number-of-cores> -ppn <core-per-node> -hostfile <hostfilename>  /path <path to the application exe> <arguments specific to the application>

#end

Il formato del file host è indicato di seguito.The format of the host file is as follows. Aggiungere una riga per ciascun nodo del cluster.Add one line for each node in your cluster. Specificare gli indirizzi IP privati dalla rete virtuale definita in precedenza, non i nomi DNS.Specify private IP addresses from the virtual network defined earlier, not DNS names. Ad esempio, per due host con gli indirizzi IP 10.32.0.1 e 10.32.0.2 il file contiene quanto segue:For example, for two hosts with IP addresses 10.32.0.1 and 10.32.0.2, the file contains the following:

10.32.0.1:16
10.32.0.2:16

Eseguire MPI su un cluster di base a due nodiRun MPI on a basic two-node cluster

Se non si è ancora provveduto, prima configurare l'ambiente per Intel MPI.If you haven't already done so, first set up the environment for Intel MPI.

# For a SLES 12 SP1 HPC cluster

source /opt/intel/impi/5.0.3.048/bin64/mpivars.sh

# For a CentOS-based HPC cluster

# source /opt/intel/impi/5.1.3.181/bin64/mpivars.sh

Eseguire un comando MPIRun an MPI command

Eseguire un comando MPI su uno dei nodi di calcolo per vedere che MPI è installato correttamente e può comunicare tra almeno due nodi di calcolo.Run an MPI command on one of the compute nodes to show that MPI is installed properly and can communicate between at least two compute nodes. Il comando mpirun seguente esegue il comando hostname su due nodi.The following mpirun command runs the hostname command on two nodes.

mpirun -ppn 1 -n 2 -hosts <host1>,<host2> -env I_MPI_FABRICS=shm:dapl -env I_MPI_DAPL_PROVIDER=ofa-v2-ib0 -env I_MPI_DYNAMIC_CONNECTION=0 hostname

L'output dovrebbe elencare i nomi di tutti i nodi passati come input per -hosts.Your output should list the names of all the nodes that you passed as input for -hosts. Ad esempio, un comando mpirun con due nodi restituisce un output simile al seguente:For example, an mpirun command with two nodes returns output like the following:

cluster11
cluster12

Eseguire un benchmark MPIRun an MPI benchmark

Il comando Intel MPI seguente esegue un benchmark pingpong per verificare la configurazione del cluster e la connessione alla rete RDMA.The following Intel MPI command runs a pingpong benchmark to verify the cluster configuration and connection to the RDMA network.

mpirun -hosts <host1>,<host2> -ppn 1 -n 2 -env I_MPI_FABRICS=dapl -env I_MPI_DAPL_PROVIDER=ofa-v2-ib0 -env I_MPI_DYNAMIC_CONNECTION=0 IMB-MPI1 pingpong

In un cluster funzionante con due nodi dovrebbe essere visualizzato un output simile al seguente.On a working cluster with two nodes, you should see output like the following. Nella rete RDMA di Azure è prevista una latenza pari o inferiore a 3 microsecondi per i messaggi con una dimensione massima di 512 byte.On the Azure RDMA network, expect latency at or below 3 microseconds for message sizes up to 512 bytes.

#------------------------------------------------------------
#    Intel (R) MPI Benchmarks 4.0 Update 1, MPI-1 part
#------------------------------------------------------------
# Date                  : Fri Jul 17 23:16:46 2015
# Machine               : x86_64
# System                : Linux
# Release               : 3.12.39-44-default
# Version               : #5 SMP Thu Jun 25 22:45:24 UTC 2015
# MPI Version           : 3.0
# MPI Thread Environment:
# New default behavior from Version 3.2 on:
# the number of iterations per message size is cut down
# dynamically when a certain run time (per message size sample)
# is expected to be exceeded. Time limit is defined by variable
# "SECS_PER_SAMPLE" (=> IMB_settings.h)
# or through the flag => -time

# Calling sequence was:
# /opt/intel/impi_latest/bin64/IMB-MPI1 pingpong
# Minimum message length in bytes:   0
# Maximum message length in bytes:   4194304
#
# MPI_Datatype                   :   MPI_BYTE
# MPI_Datatype for reductions    :   MPI_FLOAT
# MPI_Op                         :   MPI_SUM
#
#
# List of Benchmarks to run:
# PingPong
#---------------------------------------------------
# Benchmarking PingPong
# #processes = 2
#---------------------------------------------------
       #bytes #repetitions      t[usec]   Mbytes/sec
            0         1000         2.23         0.00
            1         1000         2.26         0.42
            2         1000         2.26         0.85
            4         1000         2.26         1.69
            8         1000         2.26         3.38
           16         1000         2.36         6.45
           32         1000         2.57        11.89
           64         1000         2.36        25.81
          128         1000         2.64        46.19
          256         1000         2.73        89.30
          512         1000         3.09       157.99
         1024         1000         3.60       271.53
         2048         1000         4.46       437.57
         4096         1000         6.11       639.23
         8192         1000         7.49      1043.47
        16384         1000         9.76      1600.76
        32768         1000        14.98      2085.77
        65536          640        25.99      2405.08
       131072          320        50.68      2466.64
       262144          160        80.62      3101.01
       524288           80       145.86      3427.91
      1048576           40       279.06      3583.42
      2097152           20       543.37      3680.71
      4194304           10      1082.94      3693.63

# All processes entering MPI_Finalize

Passaggi successiviNext steps