Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Usa MPI aperto su Oracle Roving Edge Infrastructure
Introduzione
Oracle Roving Edge Infrastructure è una piattaforma di cloud computing e storage rinforzata adatta per l'implementazione ai margini della rete o in posizioni con connettività esterna limitata o nulla. Man mano che carichi di lavoro più grandi, più complessi e impegnativi si spostano verso il margine della rete, ciò può rappresentare una sfida per un'infrastruttura edge.
Open MPI è un'implementazione dello standard MPI (Message Passing Interface) utilizzato per lo sviluppo di applicazioni parallele in HPC (High Performance Computing). Open MPI può essere utilizzato per distribuire High Performance Computing e carichi di lavoro altamente paralleli in parti relativamente più piccole dell'infrastruttura che poi funzionano come un set di risorse aggregato più grande. Questo approccio può essere utilizzato per distribuire un carico di lavoro alla CPU e ad altre risorse di calcolo, come la GPU, che consente la distribuzione di attività più grandi e a uso intensivo di calcolo all'estremità della rete, come la modellazione predittiva o altri task di intelligenza artificiale/apprendimento automatico (AI/ML).
Open MPI può essere utilizzato per distribuire carichi di lavoro paralleli utilizzando le risorse nei nodi Oracle Roving Edge Infrastructure. Netfilter fornisce il DNAT (Destination Network Address Translation) e la NAT (Source Network Address Translation) necessari per le istanze VM utilizzando il software di clustering ospitato nei nodi Oracle Roving Edge Infrastructure. Questa esercitazione implementa Open MPI utilizzando Netfilter su Oracle Roving Edge Infrastructure eseguendo un calcolatore di numeri primi per dimostrare prestazioni migliorate quando si utilizzano risorse parallele.
Informazioni generali
Open MPI può essere eseguito su diverse istanze di Virtual Machine (VM) all'interno di un singolo nodo Oracle Roving Edge Infrastructure o su più nodi Oracle Roving Edge Infrastructure. L'esecuzione su un singolo nodo Oracle Roving Edge Infrastructure è semplice e non comporta problemi. Quando viene eseguito su più nodi Oracle Roving Edge Infrastructure, è importante comprendere la rete sulle istanze VM di Oracle Roving Edge Infrastructure e come Open MPI instrada il traffico per evitare possibili problemi.
Networking sulle istanze di Virtual Machine Oracle Roving Edge Infrastructure
Le istanze di Virtual Machine in esecuzione su Oracle Roving Edge Infrastructure utilizzano indirizzi IP privati per comunicare con altre istanze VM nella stessa subnet gestita in hosting sullo stesso nodo. Gli indirizzi IP pubblici possono essere assegnati alle istanze VM ospitate su Oracle Roving Edge Infrastructure per consentire alle istanze di comunicare con altre subnet e risorse in esecuzione al di fuori del nodo Oracle Roving Edge Infrastructure in cui è ospitato.
Nota: gli indirizzi IP pubblici vengono assegnati alle VNIC dell'istanza VM da un pool di indirizzi IP pubblici. Sebbene gli indirizzi siano denominati IP pubblici, in realtà si tratta di indirizzi IP sulla stessa rete locale in cui il nodo Oracle Roving Edge Infrastructure è connesso tramite la porta RJ-45. Questi indirizzi possono essere un indirizzo IPv4 raggiungibile tramite Internet oppure si tratta di indirizzi situati in una sottorete privata della rete locale. Questi indirizzi vengono anche definiti indirizzi IP esterni, poiché possono essere connessi a risorse esterne al nodo in cui è ospitata l'istanza VM.
È importante capire quando un'istanza VM in esecuzione all'interno di un nodo Oracle Roving Edge Infrastructure tenta di accedere alle risorse al di fuori del nodo, il traffico passa attraverso l'indirizzo IP esterno che viene instradato all'interno del nodo e alla connessione di rete esterna.
-
L'indirizzo IP privato utilizzato dalla VM viene tradotto dal nodo Oracle Roving Edge Infrastructure di hosting in un indirizzo IP pubblico (esterno) assegnato dal pool di indirizzi IP pubblici.
-
Il traffico di rete passa dall'istanza VM sul nodo Oracle Roving Edge Infrastructure di hosting alla rete esterna. Si tratta in effetti di una conversione NAT (Network Address Translation) 1:1.
-
L'istanza VM dispone di un indirizzo IP pubblico (esterno), ma l'istanza VM stessa non vede mai tale indirizzo IP.
-
D'altra parte, il traffico esterno per l'istanza VM che utilizza l'indirizzo IP pubblico (esterno) assegnato passa al nodo Oracle Roving Edge Infrastructure di hosting che converte l'indirizzo IP pubblico (esterno) nell'indirizzo IP privato associato dell'istanza VM di destinazione.
Nell'immagine riportata di seguito viene mostrata un'istanza VM di esempio sul nodo Oracle Roving Edge Infrastructure. Notare gli indirizzi IP pubblici e privati assegnati.
Sfide per l'esecuzione di MPI aperti su più nodi Oracle Roving Edge Infrastructure
L'uso degli indirizzi IP privati dell'istanza VM crea problemi per il software di clustering, ad esempio Open MPI, quando viene implementato su più nodi Oracle Roving Edge Infrastructure. Ogni nodo non è a conoscenza dei mapping degli indirizzi IP da privato a pubblico e della traduzione dei mapping per le istanze VM ospitate su altri nodi. Poiché i mapping non sono condivisi, i pacchetti che utilizzano indirizzi IP privati vengono instradati in modo errato o persi.
-
Il software di clustering esamina spesso le interfacce delle istanze VM e gli indirizzi IP e registra le informazioni con altri nodi nel cluster software.
-
Le istanze VM sono a conoscenza solo del proprio indirizzo IP privato e non hanno un modo per condividere il proprio indirizzo IP pubblico assegnato.
-
Anche i nodi remoti di Oracle Roving Edge Infrastructure che ospitano altri membri del cluster non hanno modo di tradurre l'indirizzo IP privato dell'istanza VM non ospitata nel rispettivo indirizzo IP pubblico.
-
Quando si esegue il clustering di istanze VM ospitate su nodi Oracle Roving Edge Infrastructure diversi, lo scambio di configurazione può contenere solo gli indirizzi IP privati.
- Se queste istanze VM tentano di comunicare tramite indirizzi IP privati tra i nodi Oracle Roving Edge Infrastructure, il traffico verrà inviato alla rete esterna e sarà probabilmente eliminato o instradato in modo errato dalla rete esterna.
Un esempio di come questo problema potrebbe apparire utilizzando Open MPI:
L'apertura di MPI in esecuzione sulle istanze VM tenterà di determinare il percorso di rete migliore da utilizzare per raggiungere altri membri dell'istanza VM, il software potrebbe esaminare le interfacce locali e gli indirizzi IP e registrarli con altri nodi nel cluster.
-
Purtroppo, né il nodo di origine né i nodi di destinazione sono a conoscenza della traduzione degli indirizzi di rete necessaria per la connettività.
-
Se
vm-node-1
ha un IP privato di10.0.100.2
(con un IP pubblico di10.123.123.9
) evm-node-2
ha un IP privato10.0.200.12
(con un IP pubblico di10.123.123.99
), possiamo inizialmente ottenerevm-node-1
evm-node-2
per effettuare il handshake over dei loro IP pubblici (10.123.123.x
).-
La configurazione che trovano e scambiano contiene gli IP
10.0.x.x
(i loro indirizzi IP privati). -
Pertanto, se
vm-node-1
dovesse provare a utilizzare l'IP privato divm-node-2
(10.0.200.12
) per comunicare, che è una destinazione non locale, il traffico verrà inviato alla rete esterna. -
La rete esterna non saprà cosa fare con
10.0.200.12
o potrebbe essere instradata da un'altra parte completamente anziché dall'istanza VM di destinazione prevista ospitata nell'altro nodo Oracle Roving Edge Infrastructure. Ecco come vengono persi i pacchetti di comunicazione MPI aperti. -
Tenere presente che
10.0.200.12
è privato su un IP di istanza virtuale ospitato su un nodo Oracle Roving Edge Infrastructure e che la rete esterna non sa come mappare l'indirizzo IP privato all'istanza VM. -
La rete esterna conosce solo
10.123.123.99
(l'IP pubblico divm-node-2
) che verrebbe indirizzato al nodo Oracle Roving Edge Infrastructure di destinazione, che tradurrà quindi l'indirizzo e invierà il traffico all'istanza VM corretta.
-
Implementa MPI aperti su Oracle Roving Edge Infrastructure
Per affrontare la natura non condivisa della rete interna di Oracle Roving Edge Infrastructure, il software Netfilter sulle istanze VM Linux viene utilizzato per riscrivere i pacchetti di rete provenienti da VM ospitate su altri nodi Oracle Roving Edge Infrastructure e destinati a tali VM.
considerazioni sulla progettazione
In questa esercitazione vengono utilizzati tre nodi RED (Roving Edge Devices) di Oracle Roving Edge Infrastructure per creare un cluster MPI aperto. Tutti i RED sono connessi a una rete esterna condivisa. Ogni nodo è stato configurato con il proprio pool di IP esterni per l'allocazione a istanze VM.
-
La rete esterna del RED è ancora una rete privata in RFC1918.
-
Ogni RED è configurato con una VCN. In questo caso d'uso, la VCN utilizza il CIDR di
10.0.0.0/16
. -
Ogni RED avrà un CIDR diverso per la subnet che utilizzerà. L'uso di un CIDR di subnet diverso semplifica l'impostazione e garantisce che non si verifichino conflitti IP tra VM su RED diversi.
Tabella CIDR VCN e subnet
Nome RED | CIDR VCN | CIDR subnet |
---|---|---|
RED1 | 10/16 | 10/24 |
RED2 | 10/16 | 10/24 |
RED3 | 10/16 | 10/24 |
Questo esempio viene mostrato nell'immagine seguente, due configurazioni di rete da due RED diversi.
Destinatari
Amministratori, sviluppatori e utenti di Oracle Roving Edge Infrastructure.
Obiettivi
-
Implementa Open MPI su Oracle Roving Edge Infrastructure.
-
Comprendi gli avvertimenti quando utilizzi Open MPI con più nodi Oracle Roving Edge Infrastructure.
-
Utilizza Open MPI per dimostrare l'elaborazione parallela su più nodi Oracle Roving Edge Infrastructure.
Prerequisiti
-
Accesso a uno o più nodi Oracle Roving Edge Infrastructure webUI. L'esempio in questa esercitazione utilizza 3 dispositivi Oracle Roving Edge Infrastructure (RED).
-
Autorizzazioni utente su Oracle Roving Edge Infrastructure per creare e avviare le istanze. Per ulteriori informazioni, consulta la sezione relativa alle autorizzazioni di computazione per l'infrastruttura Roving Edge.
-
Impostare la rete cloud virtuale (VCN) su ogni nodo Oracle Roving Edge Infrastructure. Per ulteriori informazioni, vedere Creazione di una VCN per un dispositivo dell'infrastruttura Roving Edge.
-
Impostare le subnet su ogni nodo Oracle Roving Edge Infrastructure con indirizzi IP pubblici. Per ulteriori informazioni, vedere Creazione di una subnet per un dispositivo di infrastruttura Roving Edge.
-
Scopri come importare un'immagine di computazione personalizzata in Oracle Roving Edge Infrastructure. Per ulteriori informazioni, vedere Gestione di immagini personalizzate in OCI Compute e Importazione di un'immagine personalizzata da un bucket in un dispositivo dell'infrastruttura Roving Edge.
-
Impostare le istanze in esecuzione sui nodi Oracle Roving Edge Infrastructure e accedere a tali nodi tramite SSH. Vedere Creazione di un'istanza per un dispositivo dell'infrastruttura Roving Edge.
-
Conoscenza di base di Oracle Linux per la connessione a un'istanza tramite SSH, utilizzo di tabelle IP, servizi, modifica di file, esecuzione di script shell, modifica di directory, installazione di software, utilizzo di repository di pacchetti e server proxy.
Task 1: Crea istanze Virtual Machine
Crea un'istanza VM in ogni subnet su ogni RED.
Assegnazioni di indirizzi IP di esempio:
Nome RED | Nome VM | VM O/S | IP privato VM | IP pubblico VM |
---|---|---|---|---|
RED1 | redvm1 | Ubuntu 22.04 | 10/24 | 10,123 |
RED2 | redvm2 | Ubuntu 22.04 | 10/24 | 10,123 |
RED3 | redvm3 | Ubuntu 22.04 | 10/24 | 10,123 |
Nota: le istanze VM in questo task vengono create utilizzando un'immagine esportata da Oracle Cloud Infrastructure (OCI) utilizzando OCI Ubuntu
22.04
LTS. È possibile utilizzare qualsiasi distribuzione Linux con pacchetti Open MPI adatti, ad esempio Oracle Linux 8 o 9, Fedora e così via.
-
In ogni RED, passare a Computazione, Istanza e fare clic su Crea istanza.
-
In Crea istanza di computazione, immettere Nome, selezionare l'immagine personalizzata, la forma, la configurazione della rete, le chiavi SSH e fare clic su Crea.
Task 2: installare il package MPI aperto su ogni istanza VM
Una volta create tutte le istanze VM, eseguire il login a ciascuna istanza VM tramite SSH con la chiave fornita durante il provisioning. I seguenti comandi sono adatti per Ubuntu 22.04
, potrebbe essere necessario adattare queste istruzioni o includere repository di pacchetti aggiuntivi se si utilizza una distribuzione Linux diversa.
-
Eseguire il comando seguente per aggiornare il sistema ed effettuare il reboot.
sudo apt update && sudo apt upgrade -y
Il completamento dell'operazione potrebbe richiedere alcuni minuti. Al termine, riavviare l'istanza.
sudo shutdown -r now
-
Eseguire il login all'istanza e installare i package Open MPI.
Nota:
-
Questo porterà attraverso un bel po 'di dipendenze.
-
Il pacchetto
libopenmpi-dev
è richiesto solo per la compilazione successiva di un programma di esempio con cui eseguire il test. Se non si desidera compilare le funzioni Open MPI nei programmi, questo pacchetto non è necessario.
sudo apt install openmpi-bin libopenmpi-dev -y
-
Task 3: Impostazione della conversione degli indirizzi di rete di destinazione (DNAT) e della conversione degli indirizzi di rete di origine (SNAT)
-
Visualizzare i dettagli di ogni istanza di VM avviata e annotare gli indirizzi IP pubblici privati e assegnati in modo casuale. Passare a Compute, Istanza e fare clic sul nome dell'istanza per visualizzare i dettagli.
-
Creare gli SNAT.
-
Se mappiamo le regole SNAT per ogni VM in una tabella, dovrebbe avere l'aspetto seguente:
SNAT Da RED1 Da RED2 Da RED3 Su redvm1
ND Input src 10.123.123.67 SNAT to src 10.0.2.2
Input src 10.123.123.101 SNAT to src 10.0.3.2
Su redvm2
Input src 10.123.123.32 SNAT to src 10.0.1.2
ND Input src 10.123.123.101 SNAT to src 10.0.3.2
Su redvm3
Input src 10.123.123.32 SNAT to src 10.0.1.2
Input src 10.123.123.67 SNAT to src 10.0.2.2
ND -
Utilizzare i comandi
iptables
per ogni VM.-
Su
redvm1
.sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT -m comment --comment "Allow REDs public subnet access." sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.67 -j SNAT --to-source 10.0.2.2 sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.101 -j SNAT --to-source 10.0.3.2 sudo netfilter-persistent save
-
Su
redvm2
.sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT -m comment --comment "Allow REDs public subnet access." sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.32 -j SNAT --to-source 10.0.1.2 sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.101 -j SNAT --to-source 10.0.3.2 sudo netfilter-persistent save
-
Su
redvm3
.sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT -m comment --comment "Allow REDs public subnet access." sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.32 -j SNAT --to-source 10.0.1.2 sudo iptables -t nat -I INPUT -p tcp -s 10.123.123.67 -j SNAT --to-source 10.0.2.2 sudo netfilter-persistent save
Nota: l'aggiunta della prima regola (
sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT
) per consentire l'accesso dalla subnet utilizzata dagli RED per gli IP pubblici. Senza questa (o una regola simile), è probabile che il traffico in entrata da RED a RED venga eliminato dal RED ricevente. Su queste VM, le nuove regole sono rese persistenti consudo netfilter-persistent save
, tuttavia, questo comando sarà probabilmente qualcos'altro se si utilizza una distribuzione Linux diversa. -
-
-
Creare i DNAT.
-
Allo stesso modo, se mappiamo le regole DNAT per ogni VM in una tabella, dovrebbe avere l'aspetto seguente:
DNAT Va a RED1 Va a RED2 Va a RED3 Su redvm1
ND Output dst 10.0.2.2 DNAT to dst 10.123.123.67
Output dst 10.0.3.2 DNAT to dst 10.123.123.101
Su redvm2
Output dst 10.0.1.2 DNAT to dst 10.123.123.32
ND Output dst 10.0.3.2 DNAT to dst 10.123.123.101
Su redvm3
Output dst 10.0.1.2 DNAT to dst 10.123.123.32
Output dst 10.0.2.2 DNAT to dst 10.123.123.67
ND -
Utilizzare i comandi
iptables
per ogni VM.-
Su
redvm1
.sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.2.2 -j DNAT --to-destination 10.123.123.67 sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.3.2 -j DNAT --to-destination 10.123.123.101 sudo netfilter-persistent save
-
Su
redvm2
.sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.1.2 -j DNAT --to-destination 10.123.123.32 sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.3.2 -j DNAT --to-destination 10.123.123.101 sudo netfilter-persistent save
-
Su
redvm3
.sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.1.2 -j DNAT --to-destination 10.123.123.32 sudo iptables -t nat -I OUTPUT -p tcp -d 10.0.2.2 -j DNAT --to-destination 10.123.123.67 sudo netfilter-persistent save
Nota: nelle istanze VM le nuove regole vengono rese persistenti con
sudo netfilter-persistent save
. -
-
Task 4: Imposta MPI aperto
Open MPI utilizza SSH per comunicare tra i membri del cluster, quindi ci sono alcune cose che devono essere prese in considerazione prima di poter eseguire i job.
-
Open MPI utilizzerà gli indirizzi IP privati di ciascuna VM, effettuerà le voci
/etc/hosts
per ogni istanza VM e il relativo indirizzo IP privato su ogni istanza VM MPI aperta.Ad esempio, l'uso della configurazione sopra la voce
/etc/hosts
inredvm1
conterrà le seguenti voci:127.0.0.1 localhost 127.0.1.1 redvm1 redvm1 10.0.2.2 redvm2 10.0.3.2 redvm3
In
redvm2
, il file/etc/hosts
conterrà le seguenti voci:127.0.0.1 localhost 127.0.1.1 redvm2 redvm2 10.0.1.2 redvm1 10.0.3.2 redvm3
In
redvm3
, il file/etc/hosts
conterrà le seguenti voci:127.0.0.1 localhost 127.0.1.1 redvm3 redvm3 10.0.1.2 redvm1 10.0.2.2 redvm2
-
Dobbiamo anche assicurarci che l'equivalenza SSH esista tra ogni VM per Open MPI da utilizzare.
Nota: si presume che si tratti di nuove VM che non contengono chiavi SSH esistenti per l'utente Ubuntu. Se si utilizzano VM precedenti per le quali sono già state create chiavi SSH, sarà necessario adattare queste istruzioni, tali istruzioni potrebbero sovrascrivere le chiavi esistenti e bloccare le VM.
-
In
redvm1
, creare una nuova coppia di chiavi pubblica o privata (se non sono già state create chiavi). Utilizzare il comandossh-keygen
simile assh-keygen -b 4096 -t rsa
(accettare le impostazioni predefinite, non impostare una password per le nuove chiavi). Verranno generati~/.ssh/id_rsa
e~/.ssh/id_rsa.pub
. -
Aggiungere la nuova chiave pubblica al file
authorized_keys
eseguendocat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
o copiandole manualmente tramite un editor di testo. -
Copiare sia
id_rsa
cheid_rsa.pub
nella directory~/.ssh
dell'utenteubuntu
inredvm2
eredvm3
. Assicurarsi di aggiungereid_rsa.pub
aauthorized_keys
, eseguirecat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
suredvm2
eredvm3
. -
Una volta eseguita questa operazione, da ogni VM connettersi a tutte le altre VM, inclusa la VM stessa, per assicurarsi che la connettività funzioni e che SSH consideri attendibili gli altri host.
-
Connessione SSH su
redvm1
.ubuntu@redvm1:~$ ssh redvm1 date The authenticity of host 'redvm1 (127.0.1.1)' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'redvm1' (ED25519) to the list of known hosts. Fri Apr 5 04:28:57 UTC 2024 ubuntu@redvm1:~$ ubuntu@redvm1:~$ ssh redvm2 date The authenticity of host 'redvm2 (10.0.2.2)' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'redvm2' (ED25519) to the list of known hosts. Wed Jan 31 04:29:11 UTC 2024 ubuntu@redvm1:~$ ubuntu@redvm1:~$ ssh redvm3 date The authenticity of host 'redvm3 (10.0.3.2)' can't be established. ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'redvm3' (ED25519) to the list of known hosts. Wed Jan 31 04:29:19 UTC 2024
-
-
Ripetere i passi precedenti per la connessione di
redvm2
aredvm2
,redvm1
eredvm3
eredvm3
aredvm3
,redvm1
eredvm2
.
-
-
Creare una posizione di memorizzazione comune per ogni membro del cluster.
Nota: in teoria tutte le istanze VM che utilizzano Open MPI avranno una posizione di storage condivisa. Ciò potrebbe assumere la forma di NFS, GlusterFS, OCFS2 o di qualsiasi altra soluzione di file system condiviso. Ciò è particolarmente importante se è necessaria una directory di lavoro o un data set comune per il carico di lavoro.
Per questo esempio non è necessario un file system condiviso, ma solo una posizione con un nome comune per i nostri file binari di test. Su ogni VM, creare la posizione del nome comune
/mpitest
.sudo mkdir /mpitest && sudo chown ubuntu:ubuntu /mpitest
Se si utilizza un file system condiviso, il file system condiviso verrà eseguito il MOUNT in questa posizione su tutte le istanze VM.
-
Creare un
hostfile
da utilizzare conmpirun
. Per ulteriori informazioni, vedere Come utilizzare l'opzione -hostfile per mpirun.-
Creeremo due
hostfiles
per i test. Inredvm1
, utilizzando la posizione nome comune/mpitest
creata in precedenza, creare un file/mpitest/mpihosts.txt
con il seguente contenuto:redvm1 redvm2 redvm3
-
Creare un file
/mpitest/mpihosts_slots.txt
con il seguente contenuto:redvm1 slots=1 redvm2 slots=1 redvm3 slots=1
-
Nota: in questa esercitazione i test verranno eseguiti solo da
redvm1
, pertanto non è necessario copiare questi file inredvm2
eredvm3
. Se desideri eseguire job anche da altre VM, dovrai copiare questi file nelle altre istanze VM o utilizzare un file system condiviso appropriato come NFS.
Task 5: eseguire il test dell'istanza VM
-
Un semplice test dei comandi distribuiti.
-
Un semplice test consiste nel richiamare un comando come
hostname
su tutti i membri del cluster. Ecco l'output previsto in esecuzione su tre nodi con fileslots=1
(mpihosts_slots.txt
). La direttivaslots
indica ampirun
quanti processi possono essere allocati a questo nodo anziché ampirun
per determinare il numero di processi.Nota: se si utilizzano risorse limitate diverse dalla CPU (ad esempio, le GPU), potrebbe essere necessario specificare
slots
, in cui si desidera limitare i processi al numero dell'altra risorsa. In caso contrario, i processi potrebbero non riuscire a causa dell'impossibilità di allocare le altre risorse.ubuntu@redvm1:~$ cd /mpitest ubuntu@redvm1:/mpitest$ cat mpihosts_slots.txt redvm1 slots=1 redvm2 slots=1 redvm3 slots=1 ubuntu@redvm1:/mpitest$ mpirun --hostfile mpihosts_slots.txt hostname redvm1 redvm2 redvm3
-
Eseguire lo stesso test, ma senza specificare il file
slots
(mpihosts.txt
),mpirun
determinerà le CPU disponibili ed eseguirà il numero di comandihostname
delle CPU su ciascun nodo. Queste tre VM hanno 16 CPU, quindi dovremmo ottenere 3 risposte x 16 (16 di ogni nome host).ubuntu@redvm1:/mpitest$ cat mpihosts.txt redvm1 redvm2 redvm3 ubuntu@redvm1:/mpitest$ mpirun --hostfile mpihosts.txt hostname | sort | uniq -c 16 redvm1 16 redvm2 16 redvm3
-
-
Creare un file binario di test MPI aperto.
Per un test corretto con un programma che utilizza Open MPI, utilizziamo un esempio di calcolatore di numeri primi di John Burkardt. Questo dovrà essere scaricato e compilato su
redvm1
. Per ulteriori informazioni, vedere Prime Number Calculator di John Burkardt.ubuntu@redvm1:~$ cd /mpitest ubuntu@redvm1:/mpitest$ curl https://people.sc.fsu.edu/~jburkardt/c_src/prime_mpi/prime_mpi.c -o prime_mpi.c % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 4699 100 4699 0 0 2990 0 0:00:01 0:00:01 --:--:-- 2991 ubuntu@redvm1:/mpitest$ mpicc prime_mpi.c -o prime_mpi ubuntu@redvm1:/mpitest$ ls -l prime_mpi -rwxrwxr-x 1 ubuntu ubuntu 16736 Apr 5 05:38 prime_mpi
Poiché un file system condiviso non è impostato per il test, il file binario
prime_mpi
deve essere copiato inredvm2
eredvm3
nella stessa posizione in cui si trova inredvm1
. eseguire il comando seguente.ubuntu@redvm1:/mpitest$ scp prime_mpi redvm2:/mpitest prime_mpi 100% 16KB 27.4MB/s 00:00 ubuntu@redvm1:/mpitest$ scp prime_mpi redvm3:/mpitest prime_mpi 100% 16KB 28.3MB/s 00:00
-
Per confrontare una baseline, eseguire un file binario Open MPI standalone. Eseguire
prime_mpi
senza MPI aperto per una baseline o un confronto.ubuntu@redvm1:/mpitest$ ./prime_mpi 31 January 2024 06:08:17 AM PRIME_MPI C/MPI version An MPI example program to count the number of primes. The number of processes is 1 N Pi Time 1 0 0.000003 2 1 0.000000 4 2 0.000000 8 4 0.000000 16 6 0.000000 32 11 0.000001 64 18 0.000002 128 31 0.000022 256 54 0.000019 512 97 0.000066 1024 172 0.000231 2048 309 0.000810 4096 564 0.002846 8192 1028 0.010093 16384 1900 0.037234 32768 3512 0.137078 65536 6542 0.515210 131072 12251 1.932970 262144 23000 7.243419 PRIME_MPI - Master process: Normal end of execution. 31 January 2024 06:08:27 AM
Nota: il numero di processi è 1 e il completamento richiede circa 10 secondi.
-
Esecuzione distribuita mediante MPI aperto. Eseguire
prime_mpi
con MPI aperto su tutte le CPU disponibili nelle tre istanze VM utilizzando il filempihosts.txt
.ubuntu@redvm1:/mpitest$ mpirun --hostfile mpihosts.txt ./prime_mpi 31 January 2024 06:09:02 AM PRIME_MPI C/MPI version An MPI example program to count the number of primes. The number of processes is 48 N Pi Time 1 0 0.020740 2 1 0.000428 4 2 0.000331 8 4 0.000392 16 6 0.000269 32 11 0.000295 64 18 0.000374 128 31 0.000390 256 54 0.000380 512 97 0.000331 1024 172 0.000351 2048 309 0.000385 4096 564 0.000740 8192 1028 0.001931 16384 1900 0.006316 32768 3512 0.021577 65536 6542 0.078834 131072 12251 0.273368 262144 23000 0.808825 PRIME_MPI - Master process: Normal end of execution. 31 January 2024 06:09:03 AM
Vengono utilizzati 48 processi e l'esecuzione richiede circa 1 secondo.
Esplorare Open MPI eseguendo lo stesso esempio, ma con il file
mpihosts_slots.txt
. Si dovrebbe vedere un miglioramento rispetto all'esecuzione diprime_mpi
standalone, ma utilizzerà solo 1 processore su ogni nodo (totale di 3) piuttosto che il complemento completo su tutti i nodi. Modificando il numero di slot in ogni istanza di VM, puoi controllare la distribuzione del job.
Collegamenti correlati
Conferme
- Autori - James George (Master Principal Cloud Architect), Melinda Centeno (Senior Principal Product Manager)
Altre risorse di apprendimento
Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.
Per la documentazione del prodotto, visita l'Oracle Help Center.
Use Open MPI on Oracle Roving Edge Infrastructure
F96271-01
April 2024