Observação:
- Este tutorial requer acesso ao Oracle Cloud. Para se cadastrar em uma conta gratuita, consulte Conceitos básicos do Oracle Cloud Infrastructure Free Tier.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Usar MPI Aberto no Oracle Roving Edge Infrastructure
Introdução
A Oracle Roving Edge Infrastructure é uma plataforma robusta de computação em nuvem e armazenamento adequada para implantação na borda da rede ou em locais com conectividade limitada ou sem conectividade externa. À medida que cargas de trabalho maiores, mais complexas e exigentes se movem em direção à borda da rede, isso pode apresentar desafios para uma infraestrutura de borda.
Open MPI é uma implementação do padrão MPI (Message Passing Interface) usado para desenvolver aplicativos paralelos em HPC (High Performance Computing). O MPI aberto pode ser usado para implementar Computação de Alto Desempenho e cargas de trabalho altamente paralelas em partes relativamente menores de infraestrutura que, em seguida, operam como um conjunto maior e agregado de recursos. Essa abordagem pode ser usada para distribuir uma carga de trabalho para a CPU e outros recursos de computação, como GPU, que permite a implantação de tarefas maiores e computacionalmente intensivas na borda da rede, como modelagem preditiva ou outras tarefas de Inteligência Artificial/Aprendizado de Máquina (AI/ML).
O MPI aberto pode ser usado para implantar cargas de trabalho paralelas utilizando recursos nos nós do Oracle Roving Edge Infrastructure. O Netfilter fornece a DNAT (Destination Network Address Translation) e a SNAT (Source Network Address Translation) necessárias para instâncias de VM usando o software de clusterização hospedado nos nós do Oracle Roving Edge Infrastructure. Este tutorial implementa o Open MPI usando o Netfilter no Oracle Roving Edge Infrastructure executando uma calculadora de números primos para demonstrar melhor desempenho ao usar recursos paralelos.
Informações Básicas
O MPI aberto pode ser executado em várias instâncias de Máquina Virtual (VM) em um único nó do Oracle Roving Edge Infrastructure ou em vários nós do Oracle Roving Edge Infrastructure. A execução em um único nó do Oracle Roving Edge Infrastructure é perfeita e não apresenta problemas. Ao executar em vários nós do Oracle Roving Edge Infrastructure, é importante entender a rede nas instâncias de VM do Oracle Roving Edge Infrastructure e como o Open MPI roteia o tráfego para evitar possíveis problemas.
Rede em Instâncias de Máquina Virtual da Oracle Roving Edge Infrastructure
As instâncias de Máquina Virtual em execução no Oracle Roving Edge Infrastructure usam endereços IP privados para comunicação com outras instâncias de VM na mesma sub-rede hospedada no mesmo nó. É possível designar endereços IP públicos a instâncias de VM hospedadas no Oracle Roving Edge Infrastructure para permitir que as instâncias se comuniquem com outras sub-redes e recursos em execução fora do nó do Oracle Roving Edge Infrastructure em que estão hospedadas.
Observação: Os endereços IP públicos são designados a VNICs da instância da VM por meio de um pool de endereços IP públicos. Embora os endereços sejam chamados de IPs Públicos, eles são, na verdade, endereços IP na mesma rede local em que o nó do Oracle Roving Edge Infrastructure está conectado por meio de sua porta RJ-45. Esses endereços podem ser um endereço IPv4 acessível pela internet ou são endereços em uma sub-rede privada na rede local. Esses endereços também são chamados de endereços IP externos, pois podem ser conectados a recursos externos ao nó em que a instância da VM está hospedada.
É importante entender quando uma instância de VM em execução em um nó do Oracle Roving Edge Infrastructure tenta acessar recursos fora do nó, o tráfego passa pelo endereço IP externo que é roteado dentro do nó e para a conexão de rede externa.
-
O endereço IP privado que a VM está usando é traduzido pelo nó de hospedagem do Oracle Roving Edge Infrastructure em um endereço IP público (externo) designado do pool de endereços IP públicos.
-
O tráfego de rede transita da instância da VM no nó do Oracle Roving Edge Infrastructure para a rede externa. Trata-se efetivamente de uma NAT (Network Address Translation) 1:1.
-
A instância da VM tem um endereço IP público (externo), mas a própria instância da VM nunca vê esse endereço IP.
-
Por outro lado, o tráfego externo da instância de VM usando seu endereço IP público (externo) designado vai para o nó do Oracle Roving Edge Infrastructure de hospedagem, que traduz o endereço IP público (externo) para o endereço IP privado associado da instância de VM de destino.
Um exemplo de instância de VM no nó do Oracle Roving Edge Infrastructure é mostrado na imagem a seguir. Observe os endereços IP públicos e privados designados.
Desafios para Executar o MPI Aberto em Vários Nós do Oracle Roving Edge Infrastructure
O uso de endereços IP privados da instância de VM é problemático para software de cluster, como Open MPI, quando é implementado em vários nós do Oracle Roving Edge Infrastructure. Cada nó não tem conhecimento de mapeamentos de endereços IP privados para públicos e da conversão dos mapeamentos para instâncias de VM hospedadas em outros nós. Como os mapeamentos não são compartilhados, os pacotes que usam endereços IP privados são roteados incorretamente ou perdidos.
-
O software de clusterização geralmente examina interfaces de instância de VM e endereços IP e registra as informações com outros nós no cluster de software.
-
As instâncias de VM só sabem seu endereço IP privado e não têm uma maneira de compartilhar seu endereço IP público designado.
-
Os nós remotos do Oracle Roving Edge Infrastructure que hospedam outros membros do cluster também não têm como converter o endereço IP privado da instância de VM não hospedada em seu respectivo endereço IP público.
-
Ao clusterizar instâncias de VM hospedadas em diferentes nós do Oracle Roving Edge Infrastructure por meio de handshake sobre seu endereço IP público, sua troca de configuração pode conter apenas seus endereços IP privados.
- Se essas instâncias de VM tentarem se comunicar por meio de endereços IP privados nos nós do Oracle Roving Edge Infrastructure, o tráfego será enviado para a rede externa e provavelmente será eliminado ou roteado incorretamente pela rede externa.
Um exemplo de como esse problema pode aparecer usando Abrir MPI:
O MPI aberto em execução em instâncias de VM tentará determinar o melhor caminho de rede a ser usado para acessar outros membros da instância de VM. O software pode examinar as interfaces locais e os endereços IP e registrá-los em outros nós do cluster.
-
Infelizmente, nem o nó de origem nem os nós de destino estão cientes da tradução do endereço de rede necessária para que a conectividade ocorra.
-
Se
vm-node-1
tiver um IP privado de10.0.100.2
(com um IP público de10.123.123.9
) evm-node-2
tiver um IP privado de10.0.200.12
(com um IP público de10.123.123.99
), poderemos inicialmente obtervm-node-1
evm-node-2
para handshake sobre seus IPs públicos (10.123.123.x
).-
A configuração que eles descobrem e trocam contém IPs
10.0.x.x
(seus endereços IP privados). -
Assim, se
vm-node-1
tentar usar o IP privado devm-node-2
(10.0.200.12
) para se comunicar, que é um destino não local, o tráfego será enviado para a rede externa. -
A rede externa não saberá o que fazer com
10.0.200.12
ou poderá ser roteada em outro lugar totalmente em vez da instância de VM de destino pretendida hospedada no outro nó do Oracle Roving Edge Infrastructure. É assim que os pacotes de comunicação Open MPI são perdidos. -
Lembre-se de que
10.0.200.12
é privado em um IP de instância virtual hospedado em um nó do Oracle Roving Edge Infrastructure. A rede externa não sabe como mapear o endereço IP privado de volta para a instância da VM. -
A rede externa só sabe sobre
10.123.123.99
(o IP público devm-node-2
) que seria direcionado para o nó do Oracle Roving Edge Infrastructure de destino, que traduzirá o endereço e enviará o tráfego para a instância de VM correta.
-
Implementar MPI Aberto na Oracle Roving Edge Infrastructure
Para tratar da natureza não compartilhada de uma rede interna do Oracle Roving Edge Infrastructure, o software Netfilter nas instâncias de VM do Linux é usado para reescrever pacotes de rede provenientes e destinados a VMs hospedadas em outros nós do Oracle Roving Edge Infrastructure.
Considerações sobre Projeto
Neste tutorial, três nós do Oracle Roving Edge Infrastructure Roving Edge Devices (RED) são usados para criar um cluster Open MPI. Todos os REDs estão conectados a uma rede externa compartilhada. Cada nó foi configurado com seu próprio pool de IPs externos para alocação a instâncias de VM.
-
A rede externa do RED ainda é uma rede privada em RFC1918.
-
Cada RED é configurado com uma VCN. Nesse caso de uso, a VCN está usando o CIDR de
10.0.0.0/16
. -
Cada RED terá um CIDR diferente para a sub-rede que usará. O uso de outro CIDR de sub-rede simplifica a configuração e garante que conflitos de IP entre VMs em diferentes REDs não ocorrerão.
Tabela CIDR da VCN e da Sub-rede
Nome RED | CIDR da VCN | CIDR da Sub-rede |
---|---|---|
RED1 | 10/16 | 10/24 |
RED2 | 10/16 | 10/24 |
RED3 | 10/16 | 10/24 |
Este exemplo é mostrado na imagem a seguir, duas configurações de rede de dois REDs diferentes.
Público-alvo
Administradores, desenvolvedores e usuários do Oracle Roving Edge Infrastructure.
Objetivos
-
Implementar o MPI Aberto no Oracle Roving Edge Infrastructure.
-
Entenda as advertências ao usar o Open MPI com vários nós do Oracle Roving Edge Infrastructure.
-
Use o Open MPI para demonstrar processamento paralelo em vários nós do Oracle Roving Edge Infrastructure.
Pré-requisitos
-
Acesso a um ou mais nós do Oracle Roving Edge Infrastructure webUI; o exemplo neste tutorial usa 3 REDs (Dispositivos do Oracle Roving Edge Infrastructure).
-
Permissões do usuário no Oracle Roving Edge Infrastructure para criar e iniciar instâncias. Para obter mais informações, consulte Permissões do Serviço Compute para o Roving Edge Infrastructure.
-
Configure a Rede Virtual na Nuvem (VCN) em cada nó do Oracle Roving Edge Infrastructure. Para obter mais informações, consulte Criando uma VCN para um Dispositivo Roving Edge Infrastructure.
-
Configure sub-redes em cada nó do Oracle Roving Edge Infrastructure com endereços IP públicos. Para obter mais informações, consulte Criando uma Sub-rede para um Dispositivo Roving Edge Infrastructure.
-
Saiba como importar uma imagem de computação personalizada para o Oracle Roving Edge Infrastructure. Para obter mais informações, consulte Gerenciando Imagens Personalizadas no OCI Compute e Importando uma Imagem Personalizada de um Bucket para um Dispositivo Roving Edge Infrastructure.
-
Configure instâncias em execução nos nós do Oracle Roving Edge Infrastructure e acesse esses nós via SSH. Consulte Criando uma Instância para um Dispositivo do Roving Edge Infrastructure.
-
Compreensão básica do Oracle Linux para estabelecer conexão com uma instância via SSH, trabalhar com tabelas IP, serviços, edição de arquivos, execução de scripts shell, alteração de diretórios, instalação de software, trabalhar com repositórios de pacotes e usar servidores proxy.
Tarefa 1: Criar Instâncias de Máquina Virtual
Crie uma instância de VM em cada sub-rede em cada RED.
Exemplo de designações de endereço IP:
Nome RED | Nome da VM | VM O/S | IP Privado da VM | IP Público da 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 |
Observação: As instâncias de VM nesta tarefa são criadas usando uma imagem exportada do OCI (Oracle Cloud Infrastructure) usando o LTS
22.04
do OCI Ubuntu. Qualquer distribuição Linux com pacotes Open MPI adequados pode ser usada, por exemplo, Oracle Linux 8 ou 9, Fedora e assim por diante.
-
Em cada RED, navegue até Compute, Instance e clique em Create Instance.
-
Em Criar Instância do Serviço Compute, digite Nome, selecione a Imagem personalizada importada, Forma, Configurar rede, chaves SSH e clique em Criar.
Tarefa 2: Instalar Pacote de MPI Aberto em Cada Instância de VM
Depois que todas as instâncias de VM tiverem sido criadas, faça log-in em cada instância de VM via SSH com a chave fornecida durante o provisionamento. Os comandos a seguir são adequados para o Ubuntu 22.04
. Talvez você precise adaptar essas instruções ou incluir repositórios de pacotes adicionais se estiver usando outra distribuição do Linux.
-
Execute o comando a seguir para atualizar o sistema e reinicializar.
sudo apt update && sudo apt upgrade -y
Isso pode levar um tempo para ser concluído. Quando isso estiver concluído, reinicialize a instância.
sudo shutdown -r now
-
Faça login na instância e instale os pacotes Open MPI.
Observação:
-
Isso trará algumas dependências.
-
O pacote
libopenmpi-dev
só é necessário para compilar posteriormente um programa de amostra com o qual testar. Se você não estiver compilando recursos do Open MPI em programas, este pacote não será necessário.
sudo apt install openmpi-bin libopenmpi-dev -y
-
Tarefa 3: Configurar DNAT (Destination Network Address Translation) e SNAT (Source Network Address Translation)
-
Exiba os detalhes de cada instância de VM iniciada e anote os endereços IP públicos privados e designados aleatoriamente. Navegue até Compute, Instance e clique no nome da instância para exibir os detalhes.
-
Crie os SNATs.
-
Se mapearmos as regras SNAT para cada VM em uma tabela, ela deverá ter esta aparência:
SNAT Vindo de RED1 Vindo de RED2 Vindo de RED3 Em 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
Em 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
Em 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 -
Use os comandos
iptables
para cada VM.-
Em
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
-
Em
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
-
Em
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
Observação: A adição da primeira regra (
sudo iptables -I INPUT --src 10.123.123.0/24 -j ACCEPT
) para permitir o acesso da sub-rede que os REDs estão usando para seus IPs públicos. Sem isso (ou uma regra semelhante), o tráfego de entrada de RED para RED provavelmente será descartado pelo RED receptor. Nessas VMs, as novas regras persistem comsudo netfilter-persistent save
; no entanto, esse comando provavelmente será outra coisa se você estiver usando outra distribuição do Linux. -
-
-
Crie os DNATs.
-
Da mesma forma, se mapearmos as regras DNAT para cada VM em uma tabela, ela deverá ter esta aparência:
DNAT Indo Para RED1 Indo Para RED2 Indo Para RED3 Em redvm1
N/A Saída dst 10.0.2.2 DNAT to dst 10.123.123.67
Saída dst 10.0.3.2 DNAT to dst 10.123.123.101
Em redvm2
Saída dst 10.0.1.2 DNAT to dst 10.123.123.32
N/A Saída dst 10.0.3.2 DNAT to dst 10.123.123.101
Em redvm3
Saída dst 10.0.1.2 DNAT to dst 10.123.123.32
Saída dst 10.0.2.2 DNAT to dst 10.123.123.67
N/A -
Use os comandos
iptables
para cada VM.-
Em
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
-
Em
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
-
Em
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
Observação: Nas instâncias de VM, as novas regras persistem com
sudo netfilter-persistent save
. -
-
Tarefa 4: Configurar MPI aberto
O MPI aberto usa o SSH para se comunicar entre membros do cluster, portanto, há algumas coisas que precisam ser tratadas para que possamos executar jobs.
-
O MPI aberto usará os endereços IP privados de cada uma das VMs, criará entradas
/etc/hosts
para cada instância de VM e seu endereço IP privado em cada instância de VM Open MPI.Por exemplo, o uso da configuração acima da entrada
/etc/hosts
emredvm1
conterá as seguintes entradas:127.0.0.1 localhost 127.0.1.1 redvm1 redvm1 10.0.2.2 redvm2 10.0.3.2 redvm3
Em
redvm2
, o/etc/hosts
conterá as seguintes entradas:127.0.0.1 localhost 127.0.1.1 redvm2 redvm2 10.0.1.2 redvm1 10.0.3.2 redvm3
Em
redvm3
, o/etc/hosts
conterá as seguintes entradas:127.0.0.1 localhost 127.0.1.1 redvm3 redvm3 10.0.1.2 redvm1 10.0.2.2 redvm2
-
Também precisamos garantir que a equivalência SSH exista entre cada VM para uso de MPI Aberto.
Observação: O pressuposto aqui é que essas são novas VMs que não contêm chaves SSH existentes para o usuário do Ubuntu. Se você estiver usando VMs mais antigas que já tiveram chaves SSH criadas, precisará adaptar essas instruções, essas instruções poderão substituir as chaves existentes e bloqueá-lo de suas VMs.
-
Em
redvm1
, crie um novo par de chaves públicas ou privadas (se você ainda não tiver chaves criadas). Use o comandossh-keygen
semelhante assh-keygen -b 4096 -t rsa
(aceite os padrões, não defina uma senha para as novas chaves). Isso gerará~/.ssh/id_rsa
e~/.ssh/id_rsa.pub
. -
Adicione a nova chave pública ao arquivo
authorized_keys
executandocat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ou copiando-a manualmente por meio de um editor de texto. -
Copie
id_rsa
eid_rsa.pub
para o diretório~/.ssh
do usuárioubuntu
emredvm2
eredvm3
. Certifique-se de adicionarid_rsa.pub
aauthorized_keys
, executecat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
emredvm2
eredvm3
. -
Uma vez feito isso, de cada VM, conecte-se a todas as outras VMs, incluindo a própria VM, para garantir que a conectividade funcione e que o SSH confie nos outros hosts.
-
Conexão SSH em
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 as etapas acima para
redvm2
estabelecer conexão comredvm2
,redvm1
eredvm3
eredvm3
estabelecendo conexão comredvm3
,redvm1
eredvm2
.
-
-
Crie um local de armazenamento comum para cada membro do cluster.
Observação: O ideal é que todas as instâncias de VM que usam o Open MPI tenham um local de armazenamento compartilhado. Isso pode assumir a forma de NFS, GlusterFS, OCFS2 ou qualquer número de outras soluções de sistema de arquivos compartilhados. Isso é particularmente importante se um diretório de trabalho ou conjunto de dados comum for necessário para a carga de trabalho.
Um sistema de arquivos compartilhado não é necessário para este exemplo, apenas um local com um nome comum para nossos binários de teste. Em cada VM, crie o local do nome comum
/mpitest
.sudo mkdir /mpitest && sudo chown ubuntu:ubuntu /mpitest
Se usarmos um sistema de arquivos compartilhado, o sistema de arquivos compartilhado será montado neste local em todas as instâncias de VM.
-
Crie um
hostfile
para uso commpirun
. Para obter mais informações, consulte Como eu uso a opção -hostfile para mpirun?.-
Criaremos dois
hostfiles
para teste. Emredvm1
, usando nosso local de nome comum/mpitest
criado acima, crie um arquivo/mpitest/mpihosts.txt
com o seguinte conteúdo:redvm1 redvm2 redvm3
-
Crie um arquivo
/mpitest/mpihosts_slots.txt
com o seguinte conteúdo:redvm1 slots=1 redvm2 slots=1 redvm3 slots=1
-
Observação: Neste tutorial, os testes só serão executados em
redvm1
; portanto, não precisamos copiar esses arquivos pararedvm2
eredvm3
. Se você também quiser executar jobs de outras VMs, precisará copiar esses arquivos para as outras instâncias de VM ou usar um sistema de arquivos compartilhado adequado, como NFS.
Tarefa 5: Testar a Instância da VM
-
Um simples teste de comandos distribuídos.
-
Um teste simples é apenas chamar um comando, como
hostname
, em todos os membros do cluster. Aqui está a saída esperada em execução em três nós com o arquivoslots=1
(mpihosts_slots.txt
). A diretivaslots
informampirun
quantos processos podem ser alocados para esse nó em vez dempirun
determinar o número de processos.Observação: Especificar
slots
pode ser necessário se você estiver usando recursos limitados que não sejam CPU (por exemplo, GPUs), em que deseja limitar os processos ao número do outro recurso. Não fazer isso pode resultar em falha nos processos devido a não conseguir alocar os outros 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
-
Execute o mesmo teste, mas sem especificar o arquivo
slots
(mpihosts.txt
),mpirun
determinará as CPUs disponíveis e executará o número de comandoshostname
de CPUs em cada nó. Essas três VMs têm 16 CPUs, portanto, devemos obter 3 x 16 respostas (16 de cada nome 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
-
-
Crie um binário de teste Open MPI.
Para um teste adequado com um programa que usa Open MPI, usamos um exemplo de calculadora de números primos de John Burkardt. Isso precisará ser baixado e compilado em
redvm1
. Para obter mais informações, consulte Prime Number Calculator by 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
Como um sistema de arquivos compartilhado não está configurado para teste, o binário
prime_mpi
precisa ser copiado pararedvm2
eredvm3
no mesmo local em que está emredvm1
. Execute o seguinte 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 uma linha de base, execute um binário MPI aberto independente. Execute
prime_mpi
sem Abrir MPI para uma linha de base ou comparação.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
Observação: o número de processos é 1 e leva cerca de 10 segundos para ser concluído.
-
Uma execução distribuída usando Open MPI. Execute
prime_mpi
com Open MPI em todas as CPUs disponíveis nas três instâncias de VM usando o arquivompihosts.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 processos são usados e leva cerca de 1 segundo para ser executado.
Explore o Open MPI executando o mesmo exemplo, mas com o arquivo
mpihosts_slots.txt
. Você deve ver uma melhoria em comparação com a execução doprime_mpi
standalone, mas ele só usará 1 processador em cada nó (total de 3) em vez do complemento completo em todos os nós. Alterando o número de slots em cada instância de VM, você pode controlar a distribuição do job.
Links Relacionados
-
Perguntas mais Frequentes sobre o Oracle Roving Edge Infrastructure
-
prime_mpi de John Burkardt, um ponto de partida para investigações sobre paralelização
Confirmação
- Autores - James George (Master Principal Cloud Architect), Melinda Centeno (Gerente Sênior de Produtos)
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal Oracle Learning YouTube. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Use Open MPI on Oracle Roving Edge Infrastructure
F96274-01
April 2024