Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a la capa gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al completar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Uso de MPI abierto en Oracle Roving Edge Infrastructure
Introducción
Oracle Roving Edge Infrastructure es una plataforma de almacenamiento y computación en la nube reforzada adecuada para el despliegue en el borde de la red o en ubicaciones con conectividad externa limitada o nula. A medida que las cargas de trabajo más grandes, más complejas y exigentes avanzan hacia el borde de la red, esto puede presentar desafíos para una infraestructura perimetral.
Open MPI es una implementación del estándar Message Passing Interface (MPI) que se utiliza para desarrollar aplicaciones paralelas en recursos informáticos de alto rendimiento (HPC). El MPI abierto se puede utilizar para desplegar recursos informáticos de alto rendimiento y cargas de trabajo muy paralelas en infraestructuras relativamente más pequeñas que, a continuación, funcionan como un conjunto de recursos agregado y más grande. Este enfoque se puede utilizar para distribuir una carga de trabajo a la CPU y otros recursos informáticos, como la GPU, lo que permite el despliegue de tareas más grandes e intensivas en computación en el borde de la red, como el modelado predictivo u otras tareas de inteligencia artificial/aprendizaje automático (IA/AA).
El MPI abierto se puede utilizar para desplegar cargas de trabajo paralelas con recursos en los nodos de Oracle Roving Edge Infrastructure. Netfilter proporciona la traducción de direcciones de red de destino (DNAT) y la traducción de direcciones de red de origen (SNAT) necesarias para las instancias de VM mediante el software de agrupación en clusters alojado en los nodos de Oracle Roving Edge Infrastructure. En este tutorial se implanta Open MPI mediante Netfilter en Oracle Roving Edge Infrastructure que ejecuta una calculadora de número primo para demostrar un rendimiento mejorado al utilizar recursos paralelos.
Antecedentes
El MPI abierto se puede ejecutar en varias instancias de máquina virtual (VM) en un único nodo de Oracle Roving Edge Infrastructure o en varios nodos de Oracle Roving Edge Infrastructure. La ejecución en un único nodo de Oracle Roving Edge Infrastructure es perfecta y no plantea ningún problema. Al ejecutar en varios nodos de Oracle Roving Edge Infrastructure, es importante comprender las redes en las instancias de máquina virtual de Oracle Roving Edge Infrastructure y cómo Open MPI enruta el tráfico para evitar posibles problemas.
Redes en instancias de máquina virtual de Oracle Roving Edge Infrastructure
Las instancias de máquina virtual que se ejecutan en Oracle Roving Edge Infrastructure utilizan direcciones IP privadas para comunicarse con otras instancias de máquina virtual de la misma subred alojada en el mismo nodo. Las direcciones IP públicas se pueden asignar a instancias de máquina virtual alojadas en Oracle Roving Edge Infrastructure para permitir que las instancias se comuniquen con otras subredes y recursos que se ejecuten fuera del nodo de Oracle Roving Edge Infrastructure donde se aloja.
Nota: Las direcciones IP públicas se asignan a las VNIC de instancias de VM desde un pool de direcciones IP públicas. Aunque las direcciones se denominan IP públicas, en realidad son direcciones IP de la misma red local en la que el nodo de Oracle Roving Edge Infrastructure está conectado mediante su puerto RJ-45. Estas direcciones pueden ser una dirección IPv4 a la que se pueda acceder desde Internet o son direcciones de una subred privada en la red local. Estas direcciones también se denominan direcciones IP externas, ya que se pueden conectar a recursos externos al nodo donde se aloja la instancia de VM.
Es importante comprender que cuando una instancia de máquina virtual que se ejecuta en un nodo de Oracle Roving Edge Infrastructure intenta acceder a recursos fuera del nodo, el tráfico pasa por la dirección IP externa que se enruta dentro del nodo y hacia fuera a la conexión de red externa.
-
La dirección IP privada que utiliza la máquina virtual se convierte mediante el nodo de alojamiento de Oracle Roving Edge Infrastructure en una dirección IP pública (externa) asignada desde el pool de direcciones IP públicas.
-
El tráfico de red pasa de la instancia de máquina virtual en el nodo de alojamiento de Oracle Roving Edge Infrastructure a la red externa. Se trata de una traducción de direcciones de red (NAT) 1:1.
-
La instancia de VM tiene una dirección IP pública (externa), pero la propia instancia de VM nunca ve esa dirección IP.
-
Por otro lado, el tráfico externo de la instancia de VM mediante su dirección IP pública (externa) asignada va al nodo de alojamiento de Oracle Roving Edge Infrastructure, que convierte la dirección IP pública (externa) en la dirección IP privada asociada de la instancia de VM de destino.
En la siguiente imagen se muestra una instancia de VM de ejemplo en el nodo de Oracle Roving Edge Infrastructure. Observe las direcciones IP públicas y privadas asignadas.
Desafíos para ejecutar MPI abierto en varios nodos de Oracle Roving Edge Infrastructure
El uso de direcciones IP privadas de instancias de VM es problemático para el software de agrupación en clusters, como Open MPI, cuando se implanta en varios nodos de Oracle Roving Edge Infrastructure. Cada nodo desconoce las asignaciones de direcciones IP privadas a públicas y la traducción de las asignaciones de instancias de máquina virtual alojadas en otros nodos. Dado que las asignaciones no se comparten, los paquetes que utilizan direcciones IP privadas se enrutan incorrectamente o se pierden.
-
El software de agrupación en clusters suele examinar las interfaces de instancias de VM y las direcciones IP, y registra la información con otros nodos del cluster de software.
-
Las instancias de máquina virtual solo conocen su dirección IP privada y no tienen una forma de compartir la dirección IP pública asignada.
-
Los nodos remotos de Oracle Roving Edge Infrastructure que alojan otros miembros del cluster tampoco tienen forma de traducir la dirección IP privada de la instancia de VM no alojada a su respectiva dirección IP pública.
-
Al agrupar instancias de VM alojadas en distintos nodos de Oracle Roving Edge Infrastructure mediante el establecimiento de comunicación a través de su dirección IP pública, su intercambio de configuración puede contener solo sus direcciones IP privadas.
- Si estas instancias de máquina virtual intentan comunicarse a través de direcciones IP privadas entre los nodos de Oracle Roving Edge Infrastructure, el tráfico se transferirá a la red externa y es probable que la red externa borre o enrute incorrectamente.
Un ejemplo de cómo podría verse este problema usando MPI abierto:
Si se abre MPI en instancias de VM, se intentará determinar la mejor ruta de red para acceder a otros miembros de instancias de VM. El software puede examinar las interfaces locales y las direcciones IP y registrarlas con otros nodos del cluster.
-
Lamentablemente, ni el nodo de origen ni los nodos de destino son conscientes de la traducción de direcciones de red necesaria para que se produzca la conectividad.
-
Si
vm-node-1
tiene una IP privada de10.0.100.2
(con una IP pública de10.123.123.9
) yvm-node-2
tiene una IP privada10.0.200.12
(con una IP pública de10.123.123.99
), inicialmente podemos obtenervm-node-1
yvm-node-2
para establecer un enlace con sus IP públicas (10.123.123.x
).-
La configuración que detectan e intercambian contiene IP
10.0.x.x
(sus direcciones IP privadas). -
Por lo tanto, si
vm-node-1
intentara utilizar la IP privada devm-node-2
(10.0.200.12
) para comunicarse, que es un destino no local, el tráfico se transferirá a la red externa. -
La red externa no sabrá qué hacer con
10.0.200.12
o podría enrutarse en otro lugar totalmente distinto a la instancia de máquina virtual de destino alojada en el otro nodo de Oracle Roving Edge Infrastructure. Así es como se pierden los paquetes de comunicación MPI abiertos. -
Recuerde que
10.0.200.12
es privado en una IP de instancia virtual alojada en un nodo de Oracle Roving Edge Infrastructure. La red externa no sabe cómo asignar la dirección IP privada a la instancia de VM. -
La red externa solo conoce
10.123.123.99
(IP pública devm-node-2
) que se dirigiría al nodo de Oracle Roving Edge Infrastructure de destino, que, a continuación, traducirá la dirección y enviará el tráfico a la instancia de VM correcta.
-
Implementación de MPI abierto en Oracle Roving Edge Infrastructure
Para abordar la naturaleza no compartida de la red interna de Oracle Roving Edge Infrastructure, el software de Netfilter en las instancias de máquina virtual de Linux se utiliza para reescribir los paquetes de red que provienen de máquinas virtuales alojadas en otros nodos de Oracle Roving Edge Infrastructure y que están destinados a ellas.
Consideraciones de designación
En este tutorial, se utilizan tres nodos de Oracle Roving Edge Infrastructure Roving Edge Devices (RED) para crear un cluster de MPI abierto. Todos los RED están conectados a una red externa compartida. Cada nodo se ha configurado con su propio pool de IP externa para la asignación a instancias de VM.
-
La red externa de RED sigue siendo una red privada en RFC1918.
-
Cada RED se configura con una VCN. En este caso de uso, la VCN utiliza el CIDR de
10.0.0.0/16
. -
Cada RED tendrá un CIDR diferente para la subred que utilizará. El uso de un CIDR de subred diferente simplifica la configuración y garantiza que no se produzcan conflictos de IP entre máquinas virtuales en distintos RED.
Tabla CIDR de VCN y subred
Nombre de RED | CIDR de VCN | CIDR de subred |
---|---|---|
RED1 | 10/16 | 10/24 |
RED2 | 10/16 | 10/24 |
RED3 | 10/16 | 10/24 |
Este ejemplo se muestra en la siguiente imagen, dos configuraciones de red de dos RED diferentes.
Público Objetivo
Administradores, desarrolladores y usuarios de Oracle Roving Edge Infrastructure.
Objetivos
-
Implante el MPI abierto en Oracle Roving Edge Infrastructure.
-
Comprenda las advertencias al utilizar MPI abierto con varios nodos de Oracle Roving Edge Infrastructure.
-
Utilice Open MPI para demostrar el procesamiento paralelo en varios nodos de Oracle Roving Edge Infrastructure.
Requisitos
-
Acceso a uno o más nodos de Oracle Roving Edge Infrastructure webUI, en el ejemplo de este tutorial se utilizan 3 dispositivos de Oracle Roving Edge Infrastructure (RED).
-
Permisos de usuario de Oracle Roving Edge Infrastructure para crear e iniciar instancias. Para obtener más información, consulte Permisos de computación para Roving Edge Infrastructure.
-
Configurar la red virtual en la nube (VCN) en cada nodo de Oracle Roving Edge Infrastructure. Para obtener más información, consulte Creación de una VCN para un dispositivo de Roving Edge Infrastructure.
-
Configure subredes en cada nodo de Oracle Roving Edge Infrastructure con direcciones IP públicas. Para obtener más información, consulte Creación de una subred para un dispositivo de Roving Edge Infrastructure.
-
Sepa cómo importar una imagen informática personalizada a Oracle Roving Edge Infrastructure. Para obtener más información, consulte Gestión de imágenes personalizadas en OCI Compute e Importación de una imagen personalizada de un cubo a un dispositivo de Roving Edge Infrastructure.
-
Configure instancias que se ejecutan en nodos de Oracle Roving Edge Infrastructure y acceda a esos nodos mediante SSH. Consulte Creación de una instancia para un dispositivo de Roving Edge Infrastructure.
-
Conocimientos básicos de Oracle Linux para conectarse a una instancia mediante SSH, trabajar con tablas IP, servicios, editar archivos, ejecutar scripts de shell, cambiar directorios, instalar software, trabajar con repositorios de paquetes y utilizar servidores proxy.
Tarea 1: Creación de instancias de máquina virtual
Cree una instancia de VM en cada subred de cada RED.
Ejemplo de asignaciones de direcciones IP:
Nombre de RED | Nombre de VM | VM O/S | IP Privada de VM | IP pública de 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: Las instancias de VM de esta tarea se crean mediante una imagen exportada desde Oracle Cloud Infrastructure (OCI) mediante OCI Ubuntu
22.04
LTS. Se puede utilizar cualquier distribución de Linux con paquetes MPI abiertos adecuados, por ejemplo, Oracle Linux 8 o 9, Fedora, etc.
-
En cada RED, vaya a Recursos informáticos, Instancia y haga clic en Crear instancia.
-
En Crear instancia informática, introduzca Nombre, seleccione la imagen personalizada importada, Unidad, Configurar red, Claves SSH y haga clic en Crear.
Tarea 2: Instalación del paquete MPI abierto en cada instancia de VM
Una vez que se hayan creado todas las instancias de VM, conéctese a cada instancia de VM a través de SSH con la clave proporcionada durante el aprovisionamiento. Los siguientes comandos son adecuados para Ubuntu 22.04
, puede que necesite adaptar estas instrucciones o incluir repositorios de paquetes adicionales si utiliza una distribución de Linux diferente.
-
Ejecute el siguiente comando para actualizar el sistema y reiniciar.
sudo apt update && sudo apt upgrade -y
Esto puede tardar. Cuando esto termine, reinicie la instancia.
sudo shutdown -r now
-
Inicie sesión en la instancia e instale los paquetes MPI abiertos.
Nota:
-
Esto extraerá bastantes dependencias.
-
El paquete
libopenmpi-dev
solo es necesario para compilar posteriormente un programa de ejemplo con el que realizar la prueba. Si no va a compilar funciones de Open MPI en programas, este paquete no es necesario.
sudo apt install openmpi-bin libopenmpi-dev -y
-
Tarea 3: Configuración de la traducción de direcciones de red de destino (DNAT) y la traducción de direcciones de red de origen (SNAT)
-
Vea los detalles de cada instancia de máquina virtual iniciada y anote las direcciones IP públicas privadas y asignadas aleatoriamente. Vaya a Recursos informáticos, Instancia y haga clic en el nombre de la instancia para ver los detalles.
-
Cree los SNAT.
-
Si asignamos las reglas SNAT para cada máquina virtual de una tabla, debería tener el siguiente aspecto:
Italiano Procedente de RED1 Procedente de RED2 Procedente de RED3 En redvm1
N/A Entrada src 10.123.123.67 SNAT to src 10.0.2.2
Entrada src 10.123.123.101 SNAT to src 10.0.3.2
En redvm2
Entrada src 10.123.123.32 SNAT to src 10.0.1.2
N/A Entrada src 10.123.123.101 SNAT to src 10.0.3.2
En redvm3
Entrada src 10.123.123.32 SNAT to src 10.0.1.2
Entrada src 10.123.123.67 SNAT to src 10.0.2.2
N/A -
Utilice los comandos
iptables
para cada máquina virtual.-
En
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
-
En
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
-
En
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: La adición de la primera regla (
sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT
) para permitir el acceso desde la subred que los RED utilizan para sus IP públicas. Sin esto (o una regla similar), es probable que el tráfico entrante de RED a RED sea eliminado por el RED receptor. En estas máquinas virtuales, las nuevas reglas se mantienen consudo netfilter-persistent save
; sin embargo, es probable que este comando sea otra cosa si utiliza una distribución de Linux diferente. -
-
-
Cree los DNAT.
-
Del mismo modo, si asignamos las reglas DNAT para cada máquina virtual de una tabla, debería tener el siguiente aspecto:
DNAT Ir a RED1 Ir a RED2 Ir a RED3 En redvm1
N/A Salida dst 10.0.2.2 DNAT to dst 10.123.123.67
Salida dst 10.0.3.2 DNAT to dst 10.123.123.101
En redvm2
Salida dst 10.0.1.2 DNAT to dst 10.123.123.32
N/A Salida dst 10.0.3.2 DNAT to dst 10.123.123.101
En redvm3
Salida dst 10.0.1.2 DNAT to dst 10.123.123.32
Salida dst 10.0.2.2 DNAT to dst 10.123.123.67
N/A -
Utilice los comandos
iptables
para cada máquina virtual.-
En
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
-
En
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
-
En
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: En las instancias de VM, las nuevas reglas se mantienen con
sudo netfilter-persistent save
. -
-
Tarea 4: Configurar MPI abierto
MPI abierto utiliza SSH para comunicarse entre los miembros del cluster, por lo que hay algunas cosas que se deben tener en cuenta para poder ejecutar trabajos.
-
MPI abierto utilizará las direcciones IP privadas de cada una de las máquinas virtuales, realizará las entradas
/etc/hosts
para cada instancia de máquina virtual y su dirección IP privada en cada instancia de máquina virtual de MPI abierta.Por ejemplo, si se utiliza la configuración anterior, la entrada
/etc/hosts
deredvm1
contendrá las siguientes entradas:127.0.0.1 localhost 127.0.1.1 redvm1 redvm1 10.0.2.2 redvm2 10.0.3.2 redvm3
En
redvm2
,/etc/hosts
contendrá las siguientes entradas:127.0.0.1 localhost 127.0.1.1 redvm2 redvm2 10.0.1.2 redvm1 10.0.3.2 redvm3
En
redvm3
,/etc/hosts
contendrá las siguientes entradas:127.0.0.1 localhost 127.0.1.1 redvm3 redvm3 10.0.1.2 redvm1 10.0.2.2 redvm2
-
También debemos asegurarnos de que exista la equivalencia SSH entre cada VM para que la utilice Open MPI.
Nota: Se supone que se trata de máquinas virtuales nuevas que no contienen claves SSH existentes para el usuario de Ubuntu. Si utiliza máquinas virtuales más antiguas que ya han creado claves SSH, deberá adaptar estas instrucciones, estas instrucciones podrían sobrescribir las claves existentes y bloquearlo de las máquinas virtuales.
-
En
redvm1
, cree un nuevo par de claves pública o privada (si aún no tiene claves creadas). Utilice el comandossh-keygen
similar assh-keygen -b 4096 -t rsa
(acepte los valores por defecto, no defina una contraseña para las nuevas claves). Esto generará~/.ssh/id_rsa
y~/.ssh/id_rsa.pub
. -
Agregue la nueva clave pública al archivo
authorized_keys
ejecutandocat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
o copiándolas manualmente mediante un editor de texto. -
Copie
id_rsa
yid_rsa.pub
en el directorio~/.ssh
del usuarioubuntu
enredvm2
yredvm3
. Asegúrese de agregarid_rsa.pub
aauthorized_keys
, ejecutecat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
enredvm2
yredvm3
. -
Una vez hecho esto, desde cada máquina virtual, conéctese a todas las demás máquinas virtuales, incluida la propia máquina virtual, para garantizar que la conectividad funciona y que SSH confía en los otros hosts.
-
Conexión SSH en
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
-
-
Repita los pasos anteriores para
redvm2
conectándose aredvm2
,redvm1
yredvm3
yredvm3
conectándose aredvm3
,redvm1
yredvm2
.
-
-
Cree una ubicación de almacenamiento común para cada miembro del cluster.
Nota: Lo ideal es que todas las instancias de máquina virtual que utilicen MPI abierto tengan una ubicación de almacenamiento compartida. Esto podría tomar la forma de NFS, GlusterFS, OCFS2 o cualquier número de otras soluciones de sistemas de archivos compartidos. Esto es especialmente importante si se necesita un directorio de trabajo o un juego de datos comunes para la carga de trabajo.
No es necesario un sistema de archivos compartido para este ejemplo, solo una ubicación con un nombre común para nuestros binarios de prueba. En cada máquina virtual, cree la ubicación de nombre común
/mpitest
.sudo mkdir /mpitest && sudo chown ubuntu:ubuntu /mpitest
Si usamos un sistema de archivos compartido, el sistema de archivos compartido se montará en esta ubicación en todas las instancias de máquina virtual.
-
Cree un
hostfile
para utilizarlo conmpirun
. Para obtener más información, consulte ¿Cómo puedo utilizar la opción -hostfile para mpirun?.-
Crearemos dos
hostfiles
para las pruebas. Enredvm1
, con nuestra ubicación de nombre común/mpitest
creada anteriormente, cree un archivo/mpitest/mpihosts.txt
con el siguiente contenido:redvm1 redvm2 redvm3
-
Cree un archivo
/mpitest/mpihosts_slots.txt
con el siguiente contenido:redvm1 slots=1 redvm2 slots=1 redvm3 slots=1
-
Nota: En este tutorial, las pruebas solo se ejecutarán desde
redvm1
, por lo que no es necesario copiar estos archivos enredvm2
yredvm3
. Si también desea ejecutar trabajos desde otras máquinas virtuales, deberá copiar estos archivos en otras instancias de máquina virtual o utilizar un sistema de archivos compartido adecuado, como NFS.
Tarea 5: Prueba de la instancia de VM
-
Prueba sencilla de comandos distribuidos.
-
Una prueba simple es llamar a un comando como
hostname
en todos los miembros del cluster. Esta es la salida esperada que se ejecuta en tres nodos con el archivoslots=1
(mpihosts_slots.txt
). La directivaslots
informa ampirun
de cuántos procesos se pueden asignar a este nodo en lugar de ampirun
para determinar el número de procesos.Nota: Puede que sea necesario especificar
slots
si utiliza recursos limitados que no sean CPU (por ejemplo, GPU), donde desea limitar los procesos al número del otro recurso. Si no lo hace, los procesos pueden fallar debido a que no se pueden asignar los otros recursos.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
-
Ejecute la misma prueba, pero sin especificar el archivo
slots
(mpihosts.txt
),mpirun
determinará las CPU disponibles y ejecutará el número de comandoshostname
de CPU en cada nodo. Estas tres máquinas virtuales tienen 16 CPU, por lo que debemos obtener 3 x 16 respuestas (16 de cada nombre de 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
-
-
Cree un binario de prueba de MPI abierto.
Para una prueba adecuada con un programa que utiliza Open MPI, utilizamos un ejemplo de calculadora de números primos de John Burkardt. Esto tendrá que ser descargado y compilado en
redvm1
. Para obtener más información, consulte Calculadora de números primos de 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
Dado que no se configura un sistema de archivos compartido para pruebas, el binario
prime_mpi
se debe copiar enredvm2
yredvm3
en la misma ubicación que enredvm1
. Ejecute el siguiente comando.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
-
Para comparar una línea base, ejecute un binario MPI abierto independiente. Ejecute
prime_mpi
sin MPI abierto para una línea base o comparación.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: El número de procesos es 1 y tarda unos 10 segundos en completarse.
-
Ejecución distribuida mediante MPI abierto. Ejecute
prime_mpi
con MPI abierto en todas las CPU disponibles en las tres instancias de VM mediante el archivompihosts.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
Se utilizan 48 procesos y se tarda aproximadamente 1 segundo en ejecutarse.
Explore Open MPI ejecutando el mismo ejemplo, pero con el archivo
mpihosts_slots.txt
. Debe ver una mejora en comparación con la ejecución deprime_mpi
independiente, pero solo utilizará 1 procesador en cada nodo (total de 3) en lugar del complemento completo en todos los nodos. Al cambiar el número de ranuras en cada instancia de VM, puede controlar la distribución del trabajo.
Enlaces relacionados
-
Preguntas frecuentes sobre Oracle Roving Edge Infrastructure
-
MPI abierto: recursos informáticos de alto rendimiento de código abierto
-
prime_mpi de John Burkardt, un punto de partida para las investigaciones sobre la paralelización
Agradecimientos
- Autoras: James George (arquitecto principal principal de la nube), Melinda Centeno (gerente principal sénior de productos)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Use Open MPI on Oracle Roving Edge Infrastructure
F96268-01
April 2024