Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. A la fin de l'exercice, remplacez ces valeurs par des valeurs propres à votre environnement cloud.
Utiliser Open MPI sur Oracle Roving Edge Infrastructure
Introduction
Oracle Roving Edge Infrastructure est une plate-forme de stockage et de cloud computing robuste adaptée au déploiement en périphérie du réseau ou sur des sites avec une connectivité externe limitée ou inexistante. Alors que les charges de travail plus importantes, plus complexes et exigeantes se déplacent vers la périphérie du réseau, cela peut représenter des défis pour une infrastructure en périphérie.
Open MPI est une implémentation de la norme d'interface de transmission de message (MPI) utilisée pour développer des applications parallèles dans le calcul hautes performances (HPC). Open MPI peut être utilisé pour déployer des charges de travail de calcul haute performance et hautement parallèles sur des éléments d'infrastructure relativement plus petits qui fonctionnent ensuite comme un ensemble agrégé de ressources plus volumineux. Cette approche peut être utilisée pour distribuer une charge de travail à l'UC et à d'autres ressources de calcul telles que le GPU, ce qui permet le déploiement de tâches plus importantes et intensives en calcul à la périphérie du réseau, telles que la modélisation prédictive ou d'autres tâches d'intelligence artificielle/apprentissage automatique (IA/ML).
Open MPI peut être utilisé pour déployer des charges de travail parallèles en utilisant des ressources sur les noeuds Oracle Roving Edge Infrastructure. Netfilter fournit la traduction d'adresse réseau de destination (DNAT) et la traduction d'adresse réseau source (SNAT) nécessaires pour les instances de machine virtuelle à l'aide d'un logiciel de clustering hébergé sur les noeuds Oracle Roving Edge Infrastructure. Ce tutoriel implémente Open MPI à l'aide de Netfilter sur Oracle Roving Edge Infrastructure en exécutant un calculateur de nombre premier pour démontrer des performances améliorées lors de l'utilisation de ressources parallèles.
Informations de fond
Open MPI peut être exécuté sur plusieurs instances de machine virtuelle au sein d'un seul noeud Oracle Roving Edge Infrastructure ou sur plusieurs noeuds Oracle Roving Edge Infrastructure. L'exécution sur un seul noeud Oracle Roving Edge Infrastructure est transparente et ne pose aucun problème. Lors de l'exécution sur plusieurs noeuds Oracle Roving Edge Infrastructure, il est important de comprendre le réseau sur les instances de machine virtuelle Oracle Roving Edge Infrastructure et la façon dont Open MPI achemine le trafic pour éviter d'éventuels problèmes.
Mise en réseau sur des instances de machine virtuelle Oracle Roving Edge Infrastructure
Les instances de machine virtuelle exécutées sur Oracle Roving Edge Infrastructure utilisent des adresses IP privées pour communiquer avec d'autres instances de machine virtuelle sur le même sous-réseau hébergé sur le même noeud. Les adresses IP publiques peuvent être affectées à des instances de machine virtuelle hébergées sur Oracle Roving Edge Infrastructure pour permettre aux instances de communiquer avec d'autres sous-réseaux et ressources exécutés en dehors du noeud Oracle Roving Edge Infrastructure où elles sont hébergées.
Remarque : les adresses IP publiques sont affectées aux cartes d'interface réseau virtuelles d'instance de machine virtuelle à partir d'un pool d'adresses IP publiques. Bien que les adresses soient appelées adresses IP publiques, elles sont en réalité des adresses IP sur le réseau local sur lequel le noeud Oracle Roving Edge Infrastructure est connecté via son port RJ-45. Il peut s'agir d'une adresse IPv4 accessible à partir d'Internet ou d'adresses sur un sous-réseau privé sur le réseau local. Ces adresses sont également appelées adresses IP externes, car elles peuvent être connectées à des ressources externes au noeud sur lequel l'instance de machine virtuelle est hébergée.
Il est important de comprendre quand une instance de machine virtuelle exécutée dans un noeud Oracle Roving Edge Infrastructure tente d'accéder à des ressources en dehors du noeud, le trafic passe par l'adresse IP externe qui est acheminée dans le noeud et sort vers la connexion réseau externe.
-
L'adresse IP privée utilisée par la machine virtuelle est convertie par le noeud Oracle Roving Edge Infrastructure d'hébergement en adresse IP publique (externe) affectée à partir du pool d'adresses IP publiques.
-
Le trafic réseau transite de l'instance de machine virtuelle sur le noeud Oracle Roving Edge Infrastructure d'hébergement vers le réseau externe. Il s'agit en fait d'une conversion NAT (Network Address Translation) 1:1.
-
L'instance de machine virtuelle a une adresse IP publique (externe), mais l'instance de machine virtuelle elle-même ne voit jamais cette adresse IP.
-
D'autre part, le trafic externe de l'instance de machine virtuelle utilisant son adresse IP publique (externe) affectée est dirigé vers le noeud Oracle Roving Edge Infrastructure d'hébergement, qui convertit l'adresse IP publique (externe) en adresse IP privée associée de l'instance de machine virtuelle de destination.
Un exemple d'instance de machine virtuelle sur le noeud Oracle Roving Edge Infrastructure est affiché dans l'image suivante. Notez les adresses IP publiques et privées affectées.
Défis liés à l'exécution d'un MPI ouvert sur plusieurs noeuds Oracle Roving Edge Infrastructure
L'utilisation d'adresses IP privées d'instance de machine virtuelle est problématique pour les logiciels de clustering, tels qu'Open MPI, lorsqu'ils sont implémentés sur plusieurs noeuds Oracle Roving Edge Infrastructure. Chaque noeud ne connaît pas les mappages d'adresses IP privées à publiques et la traduction des mappages pour les instances de machine virtuelle hébergées sur d'autres noeuds. Comme les mappages ne sont pas partagés, les paquets utilisant des adresses IP privées sont acheminés de manière incorrecte ou perdus.
-
Le logiciel de clustering examine souvent les interfaces d'instance de machine virtuelle et les adresses IP et enregistre les informations avec d'autres noeuds du cluster logiciel.
-
Les instances de machine virtuelle connaissent uniquement leur adresse IP privée et ne disposent pas d'un moyen de partager l'adresse IP publique qui leur est affectée.
-
Les noeuds Oracle Roving Edge Infrastructure distants hébergeant d'autres membres de cluster ne peuvent pas non plus traduire l'adresse IP privée d'une instance de machine virtuelle non hébergée vers leur adresse IP publique respective.
-
Lors de la mise en cluster d'instances de machine virtuelle hébergées sur différents noeuds Oracle Roving Edge Infrastructure, l'établissement de liaison sur leur adresse IP publique peut contenir uniquement leurs adresses IP privées.
- Si ces instances de machine virtuelle tentent de communiquer via des adresses IP privées sur les noeuds Oracle Roving Edge Infrastructure, le trafic est propagé vers le réseau externe et risque d'être supprimé ou acheminé de manière incorrecte par le réseau externe.
Voici un exemple de ce problème avec Open MPI :
Open MPI en cours d'exécution sur les instances de machine virtuelle tentera de déterminer le meilleur chemin réseau à utiliser pour atteindre les autres membres de l'instance de machine virtuelle. Le logiciel peut examiner les interfaces locales et les adresses IP et les enregistrer avec d'autres noeuds du cluster.
-
Malheureusement, ni le noeud source ni les noeuds de destination ne connaissent la conversion d'adresse réseau requise pour la connectivité.
-
Si
vm-node-1
dispose d'une adresse IP privée de10.0.100.2
(avec une adresse IP publique de10.123.123.9
) et quevm-node-2
dispose d'une adresse IP privée de10.0.200.12
(avec une adresse IP publique de10.123.123.99
), nous pouvons initialement obtenirvm-node-1
etvm-node-2
pour qu'ils transfèrent leurs adresses IP publiques (10.123.123.x
).-
La configuration qu'ils repèrent et échangent contient des adresses IP
10.0.x.x
(leurs adresses IP privées). -
Par conséquent, si
vm-node-1
devait essayer d'utiliser l'adresse IP privée devm-node-2
(10.0.200.12
) pour communiquer, qui est une destination non locale, le trafic sera propagé vers le réseau externe. -
Le réseau externe ne sait pas quoi faire avec
10.0.200.12
ou il peut être acheminé vers un autre emplacement plutôt que vers l'instance de machine virtuelle de destination prévue hébergée sur l'autre noeud Oracle Roving Edge Infrastructure. C'est ainsi que les paquets de communication Open MPI sont perdus. -
N'oubliez pas que
10.0.200.12
est privé sur une adresse IP d'instance virtuelle hébergée sur un noeud Oracle Roving Edge Infrastructure. Le réseau externe ne sait pas comment mettre en correspondance l'adresse IP privée avec l'instance de machine virtuelle. -
Le réseau externe connaît uniquement
10.123.123.99
(adresse IP publique deVM-node-2
) qui serait dirigé vers le noeud Oracle Roving Edge Infrastructure de destination, qui traduira ensuite l'adresse et enverra le trafic vers l'instance de machine virtuelle appropriée.
-
Implémenter Open MPI dans Oracle Roving Edge Infrastructure
Pour traiter la nature non partagée du réseau interne d'Oracle Roving Edge Infrastructure, le logiciel Netfilter sur les instances de machine virtuelle Linux est utilisé pour réécrire les paquets réseau provenant des machines virtuelles hébergées sur d'autres noeuds Oracle Roving Edge Infrastructure et destinés à ces dernières.
Remarques concernant la conception
Dans ce tutoriel, trois noeuds Oracle Roving Edge Infrastructure Roving Edge Devices (RED) sont utilisés pour créer un cluster Open MPI. Tous les RED sont connectés à un réseau externe partagé. Chaque noeud a été configuré avec son propre pool d'adresses IP externes pour l'allocation à des instances de machine virtuelle.
-
Le réseau externe du RED est toujours un réseau privé dans RFC1918.
-
Chaque RED est configuré avec un VCN. Dans ce cas d'utilisation, le VCN utilise le CIDR de
10.0.0.0/16
. -
Chaque ROUGE aura un CIDR différent pour le sous-réseau qu'il utilisera. L'utilisation d'un autre CIDR de sous-réseau simplifie la configuration et garantit que les conflits d'adresses IP entre les machines virtuelles sur différents RED ne se produiront pas.
Table CIDR de sous-réseau et de VCN
Nom RED | CIDR VCN | CIDR de sous-réseau |
---|---|---|
RED1 | 10/16 | 10/24 |
RED2 | 10/16 | 10/24 |
RED3 | 10/16 | 10/24 |
Cet exemple est illustré dans l'image suivante, deux configurations réseau de deux RED différents.
Public visé
Administrateurs, développeurs et utilisateurs Oracle Roving Edge Infrastructure.
Objectifs
-
Implémentez Open MPI sur Oracle Roving Edge Infrastructure.
-
Tenez compte des remarques lorsque vous utilisez Open MPI avec plusieurs noeuds Oracle Roving Edge Infrastructure.
-
Utilisez Open MPI pour démontrer le traitement parallèle sur plusieurs noeuds Oracle Roving Edge Infrastructure.
Prérequis
-
Accès à des noeuds Oracle Roving Edge Infrastructure webUI. L'exemple de ce tutoriel utilise 3 appareils Oracle Roving Edge Infrastructure (RED).
-
Droits d'accès utilisateur sur Oracle Roving Edge Infrastructure pour créer et lancer des instances. Pour plus d'informations, reportez-vous à Droits d'accès de calcul pour Roving Edge Infrastructure.
-
Configurez le réseau cloud virtuel (VCN) sur chaque noeud Oracle Roving Edge Infrastructure. Pour plus d'informations, reportez-vous à Création d'un VCN pour un appareil Roving Edge Infrastructure.
-
Configurez des sous-réseaux sur chaque noeud Oracle Roving Edge Infrastructure avec des adresses IP publiques. Pour plus d'informations, reportez-vous à Création d'un sous-réseau pour un appareil Roving Edge Infrastructure.
-
Découvrez comment importer une image de calcul personnalisée vers Oracle Roving Edge Infrastructure. Pour plus d'informations, reportez-vous à Gestion des images personnalisées dans OCI Compute et à Import d'une image personnalisée à partir d'un bucket vers un appareil Roving Edge Infrastructure.
-
Configurez des instances en cours d'exécution sur les noeuds Oracle Roving Edge Infrastructure et accédez à ces noeuds via SSH. Reportez-vous à Création d'une instance pour un appareil Roving Edge Infrastructure.
-
Connaissance de base d'Oracle Linux pour la connexion à une instance via SSH, l'utilisation de tables IP, de services, la modification de fichiers, l'exécution de scripts shell, la modification de répertoires, l'installation de logiciels, l'utilisation de référentiels de packages et l'utilisation de serveurs proxy.
Tâche 1 : créer des instances de machine virtuelle
Créez une instance de machine virtuelle dans chaque sous-réseau sur chaque RED.
Exemples d'attribution d'adresses IP :
Nom RED | Nom de machine virtuelle | HEURES SUPPLÉMENTAIRES | Adresse IP privée de machine virtuelle | Adresse IP publique de machine virtuelle |
---|---|---|---|---|
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 |
Remarque : les instances de machine virtuelle de cette tâche sont créées à l'aide d'une image exportée à partir d'Oracle Cloud Infrastructure (OCI) à l'aide d'OCI Ubuntu
22.04
LTS. Toute distribution Linux avec des packages Open MPI appropriés peut être utilisée, par exemple, Oracle Linux 8 ou 9, Fedora, etc.
-
Sur chaque RED, accédez à Compute, Instance et cliquez sur Créer une instance.
-
Dans Créer une instance de calcul, entrez le nom, sélectionnez l'image personnalisée importée, la forme, la configuration du réseau, les clés SSH et cliquez sur Créer.
Tâche 2 : installation d'un package MPI ouvert sur chaque instance de machine virtuelle
Une fois que toutes les instances de machine virtuelle ont été créées, connectez-vous à chaque instance de machine virtuelle via SSH avec la clé fournie lors du provisionnement. Les commandes suivantes conviennent à Ubuntu 22.04
. Vous devrez peut-être adapter ces instructions ou inclure des référentiels de packages supplémentaires si vous utilisez une distribution Linux différente.
-
Exécutez la commande suivante pour mettre à jour le système et réinitialiser.
sudo apt update && sudo apt upgrade -y
Cette opération peut prendre un certain temps. Une fois cette opération terminée, redémarrez l'instance.
sudo shutdown -r now
-
Connectez-vous à l'instance et installez les packages Open MPI.
Remarque :
-
Cela entraînera un certain nombre de dépendances.
-
Le package
libopenmpi-dev
est uniquement requis pour compiler ultérieurement un exemple de programme à tester. Si vous n'allez pas compiler les fonctionnalités Open MPI dans des programmes, ce package n'est pas nécessaire.
sudo apt install openmpi-bin libopenmpi-dev -y
-
Tâche 3 : configurer la traduction d'adresse réseau de destination (DNAT) et la traduction d'adresse réseau source (SNAT)
-
Affichez les détails de chaque instance de machine virtuelle lancée et notez les adresses IP publiques privées et affectées de manière aléatoire. Accédez à Compute, Instance et cliquez sur le nom de l'instance pour en visualiser les détails.
-
Créez les SNAT.
-
Si nous mappons les règles SNAT pour chaque machine virtuelle d'une table, elles doivent ressembler à ce qui suit :
SNAT En provenance de RED1 En provenance de RED2 En provenance de RED3 Sur redvm1
S/O Entrée src 10.123.123.67 SNAT to src 10.0.2.2
Entrée src 10.123.123.101 SNAT to src 10.0.3.2
Sur redvm2
Entrée src 10.123.123.32 SNAT to src 10.0.1.2
S/O Entrée src 10.123.123.101 SNAT to src 10.0.3.2
Sur redvm3
Entrée src 10.123.123.32 SNAT to src 10.0.1.2
Entrée src 10.123.123.67 SNAT to src 10.0.2.2
S/O -
Utilisez les commandes
iptables
pour chaque machine virtuelle.-
Sur
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
-
Sur
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
-
Sur
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
Remarque : ajout de la première règle (
sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT
) pour autoriser l'accès à partir du sous-réseau utilisé par les RED pour leurs adresses IP publiques. Sans cela (ou une règle similaire), le trafic entrant de RED vers RED est susceptible d'être abandonné par le RED récepteur. Sur ces machines virtuelles, les nouvelles règles sont conservées avecsudo netfilter-persistent save
. Cependant, cette commande sera probablement autre chose si vous utilisez une distribution Linux différente. -
-
-
Créez les DNAT.
-
De même, si nous mappons les règles DNAT pour chaque machine virtuelle d'une table, elles doivent ressembler à ce qui suit :
DNAT Accès à RED1 Accès à RED2 Accès à RED3 Sur redvm1
S/O Sortie dst 10.0.2.2 DNAT to dst 10.123.123.67
Sortie dst 10.0.3.2 DNAT to dst 10.123.123.101
Sur redvm2
Sortie dst 10.0.1.2 DNAT to dst 10.123.123.32
S/O Sortie dst 10.0.3.2 DNAT to dst 10.123.123.101
Sur redvm3
Sortie dst 10.0.1.2 DNAT to dst 10.123.123.32
Sortie dst 10.0.2.2 DNAT to dst 10.123.123.67
S/O -
Utilisez les commandes
iptables
pour chaque machine virtuelle.-
Sur
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
-
Sur
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
-
Sur
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
Remarque : sur les instances de machine virtuelle, les nouvelles règles sont conservées avec
sudo netfilter-persistent save
. -
-
Tâche 4 : configurer MPI en cours
Open MPI utilise SSH pour communiquer entre les membres du cluster. Il faut donc prendre quelques précautions avant de pouvoir exécuter des travaux.
-
Open MPI utilisera les adresses IP privées de chacune des machines virtuelles, créera des entrées
/etc/hosts
pour chaque instance de machine virtuelle et leur adresse IP privée sur chaque instance de machine virtuelle Open MPI.Par exemple, l'utilisation de la configuration au-dessus de l'entrée
/etc/hosts
surredvm1
contiendra les entrées suivantes :127.0.0.1 localhost 127.0.1.1 redvm1 redvm1 10.0.2.2 redvm2 10.0.3.2 redvm3
Sur
redvm2
,/etc/hosts
contient les entrées suivantes :127.0.0.1 localhost 127.0.1.1 redvm2 redvm2 10.0.1.2 redvm1 10.0.3.2 redvm3
Sur
redvm3
,/etc/hosts
contient les entrées suivantes :127.0.0.1 localhost 127.0.1.1 redvm3 redvm3 10.0.1.2 redvm1 10.0.2.2 redvm2
-
Nous devons également nous assurer que l'équivalence SSH existe entre chaque machine virtuelle pour qu'Open MPI puisse l'utiliser.
Remarque : l'hypothèse ici est qu'il s'agit de nouvelles machines virtuelles qui ne contiennent pas de clés SSH existantes pour l'utilisateur Ubuntu. Si vous utilisez d'anciennes machines virtuelles pour lesquelles des clés SSH ont déjà été créées, vous devrez adapter ces instructions. Elles pourraient écraser les clés existantes et vous empêcher de les utiliser.
-
Sur
redvm1
, créez une paire de clés publique ou privée (si aucune clé n'a déjà été créée). Utilisez la commandessh-keygen
commessh-keygen -b 4096 -t rsa
(acceptez les valeurs par défaut, ne définissez pas de mot de passe pour les nouvelles clés). Cette opération génère~/.ssh/id_rsa
et~/.ssh/id_rsa.pub
. -
Ajoutez la nouvelle clé publique au fichier
authorized_keys
en exécutantcat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ou en la copiant manuellement via un éditeur de texte. -
Copiez
id_rsa
etid_rsa.pub
dans le répertoire~/.ssh
de l'utilisateurubuntu
surredvm2
etredvm3
. Veillez à ajouterid_rsa.pub
àauthorized_keys
, exécutezcat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
surredvm2
etredvm3
. -
Une fois cela fait, à partir de chaque machine virtuelle, connectez-vous à toutes les autres machines virtuelles, y compris la machine virtuelle elle-même pour vous assurer que la connectivité fonctionne et que SSH fait confiance aux autres hôtes.
-
Connexion SSH sur
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
-
-
Répétez les étapes ci-dessus pour
redvm2
se connectant àredvm2
,redvm1
etredvm3
etredvm3
se connectant àredvm3
,redvm1
etredvm2
.
-
-
Créez un emplacement de stockage commun pour chaque membre du cluster.
Remarque : dans l'idéal, toutes les instances de machine virtuelle utilisant Open MPI disposeront d'un emplacement de stockage partagé. Cela peut prendre la forme de NFS, GlusterFS, OCFS2 ou d'un certain nombre d'autres solutions de système de fichiers partagés. Cela est particulièrement important si un répertoire de travail ou un jeu de données commun est nécessaire pour la charge globale.
Un système de fichiers partagé n'est pas nécessaire pour cet exemple, mais uniquement un emplacement avec un nom commun pour nos fichiers binaires de test. Sur chaque machine virtuelle, créez l'emplacement de nom commun
/mpitest
.sudo mkdir /mpitest && sudo chown ubuntu:ubuntu /mpitest
Si nous utilisons un système de fichiers partagé, le système de fichiers partagé est monté à cet emplacement sur toutes les instances de machine virtuelle.
-
Créez un élément
hostfile
à utiliser avecmpirun
. Pour plus d'informations, reportez-vous à la section How do I use the -hostfile option to mpirun ?.-
Nous allons créer deux
hostfiles
pour le test. Surredvm1
, en utilisant notre emplacement de nom commun/mpitest
créé ci-dessus, créez un fichier/mpitest/mpihosts.txt
avec le contenu suivant :redvm1 redvm2 redvm3
-
Créez un fichier
/mpitest/mpihosts_slots.txt
avec le contenu suivant :redvm1 slots=1 redvm2 slots=1 redvm3 slots=1
-
Remarque : dans ce tutoriel, les tests seront exécutés uniquement à partir de
redvm1
. Il n'est donc pas nécessaire de copier ces fichiers versredvm2
etredvm3
. Si vous souhaitez également exécuter des travaux à partir d'autres machines virtuelles, vous devrez copier ces fichiers vers les autres instances de machine virtuelle ou utiliser un système de fichiers partagé approprié tel que NFS.
Tâche 5 : tester l'instance de machine virtuelle
-
Un simple test des commandes distribuées.
-
Un test simple consiste simplement à appeler une commande telle que
hostname
sur tous les membres du cluster. Voici la sortie attendue exécutée sur trois noeuds avec le fichierslots=1
(mpihosts_slots.txt
). La directiveslots
informempirun
du nombre de processus pouvant être alloués à ce noeud plutôt quempirun
pour déterminer le nombre de processus.Remarque : la spécification de
slots
peut être nécessaire si vous utilisez des ressources limitées autres que l'UC (par exemple, les GPU) pour lesquelles vous souhaitez limiter les processus au nombre de l'autre ressource. Si vous ne le faites pas, les processus risquent d'échouer car les autres ressources ne peuvent pas être allouées.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
-
Exécutez le même test, mais sans spécifier le fichier
slots
(mpihosts.txt
),mpirun
détermine les UC disponibles et exécute le nombre de commandeshostname
d'UC sur chaque noeud. Ces trois machines virtuelles ont 16 CPU, nous devrions donc obtenir 3 x 16 réponses (16 de chaque nom d'hôte).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
-
-
Créez un binaire de test MPI ouvert.
Pour un test approprié avec un programme qui utilise Open MPI, nous utilisons un exemple de calculateur de nombres premiers de John Burkardt. Celui-ci devra être téléchargé et compilé sur
redvm1
. Pour plus d'informations, voir Calculateur de nombres premiers par 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
Etant donné qu'un système de fichiers partagé n'est pas configuré pour le test, le binaire
prime_mpi
doit être copié versredvm2
etredvm3
au même emplacement que surredvm1
. Exécutez la commande suivante .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
-
Pour comparer une ligne de base, exécutez un fichier binaire Open MPI autonome. Exécutez
prime_mpi
sans Open MPI pour une ligne de base ou une comparaison.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
Remarque : le nombre de processus est de 1 et l'exécution prend environ 10 secondes.
-
Exécution distribuée à l'aide d'Open MPI. Exécutez
prime_mpi
avec Open MPI sur toutes les UC disponibles sur les trois instances de machine virtuelle à l'aide du fichiermpihosts.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
48 processus sont utilisés et leur exécution prend environ 1 seconde.
Explorez Open MPI en exécutant le même exemple, mais avec le fichier
mpihosts_slots.txt
. Vous devriez voir une amélioration par rapport à l'exécution deprime_mpi
autonome, mais il n'utilisera que 1 processeur sur chaque noeud (3 au total) plutôt que le complément complet sur tous les noeuds. En modifiant le nombre d'emplacements sur chaque instance de machine virtuelle, vous pouvez contrôler la distribution du travail.
Liens connexes
Remerciements
- Auteurs - James George (architecte cloud principal maître), Melinda Centeno (chef de produit principal senior)
Ressources de formation supplémentaires
Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Use Open MPI on Oracle Roving Edge Infrastructure
F96270-01
April 2024