Conceitos básicos do EFA e MPI para workloads de HPC no Amazon EC2
Este tutorial ajuda a executar um cluster de instância habilitado para MPI e EFA para workloads de HPC.
Tarefas
- Etapa 1: Preparar um grupo de segurança habilitado para EFA
- Etapa 2: Iniciar uma instância temporária
- Etapa 3: Instalar o software EFA
- Etapa 4: (opcional) habilitar o Open MPI 5
- Etapa 5: (opcional) instalar o Intel MPI
- Etapa 6: desabilitar a proteção ptrace
- Etapa 7. Confirmar instalação
- Etapa 8: instalar a aplicação de HPC
- Etapa 9: criar uma AMI habilitada para EFA
- Etapa 10: executar instâncias habilitadas para EFA em um grupo de posicionamento de cluster
- Etapa 11: Encerrar a instância temporária
- Etapa 12: habilitar SSH sem senha
Etapa 1: Preparar um grupo de segurança habilitado para EFA
Um EFA requer um grupo de segurança que permita todo o tráfego de entrada e saída do grupo de segurança e para ele próprio. O procedimento a seguir cria um grupo de segurança que permite todo o tráfego de entrada e saída de e para si mesmo e que permite tráfego SSH de entrada de qualquer endereço IPv4 para conectividade SSH.
Importante
Esse grupo de segurança deve ser usado apenas para fins de teste. Para seus ambientes de produção, recomendamos que você crie uma regra SSH de entrada que permita o tráfego somente do endereço IP do qual você está se conectando, como o endereço IP do seu computador ou uma variedade de endereços IP na sua rede local.
Para outros cenários, consulte Regras de grupo de segurança para diferentes casos de uso.
Para criar um grupo de segurança habilitado para EFA
Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/
. -
No painel de navegação, escolha Security Groups (Grupos de segurança) e, em seguida, Create Security Group (Criar grupo de segurança).
-
Na janela Security group (Grupo de segurança), faça o seguinte:
-
Em Security group name (Nome do grupo de segurança), insira um nome descritivo para o grupo de segurança, como
EFA-enabled security group
. -
(Opcional) Em Description (Descrição), insira uma breve descrição do grupo de segurança.
-
Em VPC, selecione a VPC na qual você pretende executar suas instâncias habilitadas para EFA.
-
Escolha Create security group (Criar grupo de segurança).
-
-
Selecione o grupo de segurança que você criou e, na guia Details (Detalhes), copie o Security group (Grupo de segurança).
-
Com o grupo de segurança ainda selecionado, escolha Actions (Ações), Edit inbound rules (Editar regras de entrada), e faça o seguinte:
-
Escolha Adicionar regra.
-
Para Tipo, escolha Todo o tráfego.
-
Para Source type (Tipo de origem), escolha Custom (Personalizado) e cole o ID do grupo de segurança que você copiou no campo.
-
Escolha Adicionar regra.
-
Para Tipo, escolha SSH.
-
Para Source type (Tipo de origem), escolha Anywhere-IPv4 (IPv4 em qualquer lugar).
-
Escolha Salvar regras.
-
-
Na lista, selecione o grupo de segurança e escolha Actions (Ações), Edit outbound rules (Editar regras de saída), e faça o seguinte:
-
Escolha Adicionar regra.
-
Para Tipo, escolha Todo o tráfego.
-
Para Destination (Destino), escolha Custom (Personalizado) e cole o ID do grupo de segurança que você copiou no campo.
-
Escolha Salvar regras.
-
Etapa 2: Iniciar uma instância temporária
Execute uma instância temporária que é possível usar para instalar e configurar os componentes do software EFA. Você usa essa instância para criar um AMI habilitado para EFA a partir do qual é possível executar suas instâncias habilitadas para EFA.
Para executar uma instância temporária
Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/
. -
No painel de navegação, selecione Instances (Instâncias) e, depois, escolha Launch Instances (Iniciar instâncias) para abrir o novo assistente de inicialização de instância.
-
(Opcional) Na seção Name and tags (Nome e etiquetas), forneça um nome para a instância, como
EFA-instance
. O nome é atribuído à instância como uma etiqueta de recurso (Name=
).EFA-instance
-
Na seção Application and OS Images (Imagens de aplicação e sistema operacional), selecione uma AMI para um dos sistemas operacionais compatíveis.
-
Na seção Instance type (Tipo de instância), selecione um tipo de instância compatível.
-
Na seção Key pair (Par de chaves), selecione o par de chaves a ser usado na instância.
-
Na seção Network settings (Configurações da rede), escolha Edit (Editar) e faça o seguinte:
-
Em Subnet (Sub-rede), escolha a sub-rede na qual deseja iniciar a instância. Se você não selecionar uma sub-rede, não será possível habilitar a instância para o EFA.
-
Para Firewall (security groups) (Firewall/grupos de segurança), escolha Select existing security group (Selecione grupo de segurança existente) e, em seguida, selecione o grupo de segurança que você criou na etapa anterior.
-
Expanda a seção Configuração avançada de rede.
Para Interface de rede 1, selecione Índice da placa de rede = 0, Índice do dispositivo = 0 e Tipo de interface = EFA com ENA.
(Opcional) Caso esteja usando um tipo de instância com várias placas, como
p4d.24xlarge
oup5.48xlarge
, para cada interface de rede adicional necessária, selecione Adicionar interface de rede, em Índice da placa de rede selecione o próximo índice não utilizado e, em seguida, selecione Índice do dispositivo = 1 e Tipo de interface = EFA com ENA ou exclusivamente EFA.
-
-
Na seção Storage (Armazenamento), configure os volumes conforme necessário.
-
No painel Summary (Resumo) painel, escolha Launch instance (Iniciar instância).
nota
Considere exigir o uso do IMDSv2 para a instância temporária, bem como para a AMI que você criará na Etapa 9, a menos que já tenha definido o IMDSv2 como padrão para a conta. Para obter mais informações sobre as etapas da configuração do IMDSv2, consulte Configurar opções de metadados da instância para novas instâncias.
Etapa 3: Instalar o software EFA
Instale o kernel habilitado para EFA, drivers EFA, Libfabric e pilha Open MPI que é necessário para oferecer compatibilidade com EFA em sua instância temporária.
As etapas diferem dependendo de como você planeja usar o EFA com Open MPI, com Intel MPI ou com Open MPI e Intel MPI.
Como instalar o software EFA
-
Conecte à instância que você iniciou. Para ter mais informações, consulte Conectar-se à instância do Linux usando SSH.
-
Para garantir que todos os pacotes de software estejam atualizados, execute uma atualização rápida de software em sua instância. esse processo pode demorar alguns minutos.
-
Amazon Linux 2.023, Amazon Linux 2, RHEL 8/9, Rocky Linux 8/9
$
sudo yum update -y -
Ubuntu e Debian
$
sudo apt-get update && sudo apt-get upgrade -y -
SUSE Linux Enterprise
$
sudo zypper update -y
-
-
Reinicialize a instância e reconecte-se a ela.
-
Faça download dos arquivos de instalação do software do EFA. Os arquivos de instalação do software são empacotados em um arquivo compactado tarball (
.tar.gz
). Para fazer download da última versão estável, use o seguinte comando:$
curl -O https://efa-installer.amazonaws.com/aws-efa-installer-1.35.0.tar.gzTambém é possível obter a versão mais recente substituindo o número da versão por
latest
no comando acima. (Opcional) Verifique a autenticidade e a integridade do arquivo do EFA tarball (
.tar.gz
).Recomendamos que você faça isso para verificar a identidade do fornecedor do software e para verificar se a aplicação não foi alterada ou corrompida desde que foi publicada. Se você não deseja verificar o arquivo tarball, ignore esta etapa.
nota
Como alternativa, se você preferir verificar o arquivo tarball usando uma soma de verificação MD5 ou SHA256, consulte Verificar o instalador EFA usando uma soma de verificação.
-
Faça download da chave GPG pública e importe-a para seu pen-drive.
$
wget https://efa-installer.amazonaws.com/aws-efa-installer.key && gpg --import aws-efa-installer.keyO comando deve retornar um valor de chave. Anote o valor da chave, pois ele será necessário na próxima etapa.
-
Verifique a impressão digital da chave GPG. Execute o seguinte comando e especifique o valor de chave da etapa anterior.
$
gpg --fingerprintkey_value
O comando deve retornar uma impressão digital idêntica a
4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC
. Se a impressão digital não corresponder, não execute o script de instalação do EFA e entre em contato com o AWS Support. -
Faça download do arquivo de assinatura e verifique a assinatura do arquivo tarball EFA.
$
wget https://efa-installer.amazonaws.com/aws-efa-installer-1.35.0.tar.gz.sig && gpg --verify ./aws-efa-installer-1.35.0.tar.gz.sigVeja a seguir um exemplo de saída.
gpg: Signature made Wed 29 Jul 2020 12:50:13 AM UTC using RSA key ID DD2D3CCC gpg: Good signature from "Amazon EC2 EFA <ec2-efa-maintainers@amazon.com>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: 4E90 91BC BB97 A96B 26B1 5E59 A054 80B1 DD2D 3CCC
Se o resultado incluir
Good signature
e a impressão digital corresponder à impressão digital retornada na etapa anterior, passe para a próxima etapa. Caso contrário, não execute o script de instalação do EFA e entre em contato com o AWS Support.
-
-
Extraia os arquivos do arquivo compactado
.tar.gz
e navegue para o diretório extraído.$
tar -xf aws-efa-installer-1.35.0.tar.gz && cd aws-efa-installer -
Instale o software EFA. Dependendo de seu caso de uso, faça o seguinte.
nota
O EFA não oferece suporte ao NVIDIA GPUDirect com o SUSE Linux. Caso esteja usando SUSE Linux, você deverá especificar também a opção
--skip-kmod
para impedir a instalação do kmod. Por padrão, o SUSE Linux não permite módulos fora da árvore do kernel. -
Se o instalador do EFA solicitar que você reinicialize a instância, faça-o e, em seguida, reconecte-se à instância. Caso contrário, faça logout da instância e faça login novamente para concluir a instalação.
Etapa 4: (opcional) habilitar o Open MPI 5
nota
Execute esta etapa somente se planeja usar o Open MPI 5.
A partir do EFA 1.30.0, tanto o Open MPI 4 quanto o Open MPI 5 são instalados por padrão. Como alternativa, você pode optar por instalar somente o Open MPI 4 ou o Open MPI 5.
Se você optou por instalar o Open MPI 5 na Etapa 3: instalar o software EFA e pretende usá-lo, execute as etapas a seguir para habilitá-lo.
Para habilitar o Open MPI 5
-
Adicione o Open MPI 5 à variável de ambiente PATH.
$
module load openmpi5 -
Verifique se o Open MPI 5 está habilitado para uso.
$
which mpiccO comando deve retornar o diretório de instalação do Open MPI 5:
/opt/amazon/openmpi5
. -
(Opcional) Para garantir que o Open MPI 5 seja adicionado à variável de ambiente PATH sempre que a instância for iniciada, faça o seguinte:
Se você precisar remover o Open MPI 5 da variável de ambiente PATH, execute o comando a seguir e remova o comando dos scripts de inicialização do shell.
$
module unload openmpi5
Etapa 5: (opcional) instalar o Intel MPI
Importante
Execute esta etapa se planejar usar a Intel MPI. Se você planejar usa apenas Open MPI, ignore esta etapa.
A Intel MPI exige uma instalação adicional e a configuração de uma variável de ambiente.
Pré-requisito
Verifique se o usuário que executa as etapas a seguir tem permissões de sudo.
Para instalar a Intel MPI
-
Para baixar o script de instalação do Intel MPI, faça o seguinte
-
Visite o site da Intel
. -
Na seção da página da Web Intel MPI Library (Biblioteca Intel MPI), escolha o link para o instalador Intel MPI Library for Linux (Biblioteca MPI Intel para Linux) Offline.
-
-
Execute o script de instalação que você baixou na etapa anterior.
$
sudo bashinstallation_script_name
.sh -
No instalador, escolha Accept & install (Aceitar e instalar).
-
Leia o Intel Improvement Program (Programa de melhoria da Intel), escolha a opção apropriada e, em seguida, escolha Begin Installation (Começar a instalação).
-
Quando a instalação terminar, escolha Close.
-
Por padrão, o Intel MPI usa o Libfabric integrado (interno). É possível configurar o Intel MPI para usar o Libfabric que acompanha o instalador do EFA. Normalmente, o instalador do EFA acompanha uma versão mais recente do Libfabric que o Intel MPI. Em alguns casos, o Libfabric que acompanha o instalador do EFA tem mais performance do que o Intel MPI. Para configurar o Intel MPI para usar o Libfabric que acompanha o instalador do EFA, siga um destes procedimentos, conforme o shell.
-
Adicione o comando source a seguir ao script shell para obter o script
vars.sh
do diretório de instalação para configurar o ambiente do compilador sempre que a instância for iniciada. Dependendo de seu shell, faça o seguinte. -
Por padrão, se o EFA não estiver disponível devido a uma configuração incorreta, o Intel MPI assumirá como padrão a pilha de rede TCP/IP, podendo resultar em uma performance mais lenta da aplicação. Você pode evitar isso definindo
I_MPI_OFI_PROVIDER
comoefa
. Isso fará com que o Intel MPI apresente o seguinte erro, se o EFA não estiver disponível:Abort (XXXXXX) on node 0 (rank 0 in comm 0): Fatal error in PMPI_Init: OtherMPI error, MPIR_Init_thread (XXX)........: MPID_Init (XXXX)..............: MPIDI_OFI_mpi_init_hook (XXXX): open_fabric (XXXX)............: find_provider (XXXX)..........: OFI fi_getinfo() failed (ofi_init.c:2684:find_provider:
Dependendo de seu shell, faça o seguinte.
-
Por padrão, o Intel MPI não imprime informações de depuração. É possível especificar diferentes níveis de detalhamento para controlar as informações de depuração. Os valores possíveis (organizados em ordem pela quantidade de detalhes que fornecem) são:
0
(padrão),1
,2
,3
,4
,5
. O nível1
e superiores imprimemlibfabric version
elibfabric provider
. Uselibfabric version
para verificar se o Intel MPI está usando o Libfabric interno ou o Libfabric que acompanha o instalador do EFA. Se estiver usando o Libfabric interno, a versão terá o sufixoimpi
. Uselibfabric provider
para verificar se o Intel MPI está usando o EFA ou a rede TCP/IP. Se estiver usando o EFA, o valor seráefa
. Se estiver usando TCP/IP, o valor serátcp;ofi_rxm
.Para habilitar as informações de depuração, siga um destes procedimentos, conforme seu shell.
-
Por padrão, o Intel MPI usa a memória compartilhada do sistema operacional (
shm
) para comunicação intranós e usa Libfabric (ofi
) somente para comunicação entre nós. Em geral, essa configuração fornece a melhor performance. Porém, em alguns casos, a malha Intel MPI shm pode fazer com que certas aplicações travem por tempo indeterminado.Para resolver esse problema, você pode forçar o Intel MPI a usar o Libfabric para comunicação intranós e entre nós. Para isso, faça o seguinte, de acordo com seu shell.
nota
O provedor de Libfabric do EFA usa a memória compartilhada do sistema operacional para comunicação intranós. Isso significa que a configuração
I_MPI_FABRICS
emofi
fornece uma performance semelhante à configuraçãoshm:ofi
. -
Saia da instância e faça login novamente.
Se você não usar mais a Intel MPI, remova as variáveis de ambiente dos scripts shell de startup.
Etapa 6: desabilitar a proteção ptrace
Para melhorar a performance da aplicação HPC, o Libfabric usa a memória local da instância para comunicações entre processos quando os processos estão sendo executados na mesma instância.
O recurso de memória compartilhada usa CMA (Cross Memory Attach), que não é compatível com a proteção ptrace. Se estiver usando uma distribuição Linux que tenha a proteção ptrace habilitada por padrão, como o Ubuntu, desabilite-a. Se a sua distribuição Linux não tiver a proteção ptrace habilitada por padrão, ignore esta etapa.
Como desabilitar a proteção ptrace
Execute um destes procedimentos:
-
Para desabilitar temporariamente a proteção ptrace para fins de teste, execute o seguinte comando.
$
sudo sysctl -w kernel.yama.ptrace_scope=0 -
Para desabilitar permanentemente a proteção ptrace, adicione
kernel.yama.ptrace_scope = 0
a/etc/sysctl.d/10-ptrace.conf
e reinicialize a instância.
Etapa 7. Confirmar instalação
Confirmar uma instalação bem-sucedida
-
Para confirmar se a Intel MPI foi instalada com êxito, execute o seguinte comando:
$
which mpicc-
Para Open MPI, o caminho retornado deve incluir
/opt/amazon/
. -
Para Intel MPI, o caminho retornado deve incluir
/opt/intel/
. Se o resultado esperado não for exibido, verifique se o scriptvars.sh
da Intel MPI foi usado como origem.
-
-
Para confirmar se os componentes de software EFA e o Libfabric foram instalados com êxito, execute o comando a seguir.
$
fi_info -p efa -t FI_EP_RDMO comando deve retornar informações sobre as interfaces EFA Libfabric. O exemplo a seguir mostra a saída do comando.
provider: efa fabric: EFA-fe80::94:3dff:fe89:1b70 domain: efa_0-rdm version: 2.0 type: FI_EP_RDM protocol: FI_PROTO_EFA
Etapa 8: instalar a aplicação de HPC
Instale a aplicação HPC na instância temporária. O procedimento de instalação varia dependendo da aplicação HPC específica. Para obter mais informações, consulte Manage software on your AL2 instance no Amazon Linux 2 User Guide.
nota
Pode ser necessário consultar a documentação da aplicação de HPC para obter instruções de instalação.
Etapa 9: criar uma AMI habilitada para EFA
Depois de instalar os componentes de software necessários, crie uma AMI que possa ser reutilizada para executar suas instâncias habilitadas para o EFA.
Para criar uma AMI a partir de sua instância temporária
Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/
. -
No painel de navegação, escolha Instances (Instâncias).
-
Selecione a instância, escolha Actions (Ações), Image (Imagem), Create image (Criar imagem).
-
Em Create image (Criar imagem), faça o seguinte:
-
Em Image name (Nome da imagem), insira um nome descritivo para a AMI.
-
(Opcional) Em Image description (Descrição da imagem), informe a descrição do propósito da AMI.
-
Escolha Create Image (Criar imagem).
-
-
No painel de navegação, selecione AMIs.
-
Encontre a AMI que você criou na lista. Aguarde até que o status mude de
pending
paraavailable
antes de continuar para a próxima etapa.
Etapa 10: executar instâncias habilitadas para EFA em um grupo de posicionamento de cluster
Execute as instâncias habilitadas para EFA em um grupo de posicionamento de cluster usando a AMI habilitada para EFA criada na Etapa 7 e o grupo de segurança habilitado para EFA criado na Etapa 1.
nota
-
Não é um requisito absoluto iniciar suas instâncias habilitadas para EFA em um grupo de posicionamento de cluster. No entanto, recomendamos a execução de suas instâncias habilitadas para EFA em um grupo de posicionamento de cluster ao executar as instâncias em um grupo de baixa latência em uma única zona de disponibilidade.
-
Para garantir que a capacidade esteja disponível à medida que escala as instâncias do cluster, é possível criar uma reserva de capacidade para o grupo de posicionamento de cluster. Para ter mais informações, consulte Criar reservas de capacidade em grupos de posicionamento de cluster.
Como iniciar uma instância
Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/
. -
No painel de navegação, selecione Instances (Instâncias) e, depois, escolha Launch Instances (Iniciar instâncias) para abrir o novo assistente de inicialização de instância.
-
(Opcional) Na seção Name and tags (Nome e etiquetas), forneça um nome para a instância, como
EFA-instance
. O nome é atribuído à instância como uma etiqueta de recurso (Name=
).EFA-instance
-
Na seção Application and OS Images (Imagens de aplicações e SO), selecione My AMIs (Minhas AMIs) e, em seguida, selecione a AMI que você criou na etapa anterior.
-
Na seção Instance type (Tipo de instância), selecione um tipo de instância compatível.
-
Na seção Key pair (Par de chaves), selecione o par de chaves a ser usado na instância.
-
Na seção Network settings (Configurações da rede), escolha Edit (Editar) e faça o seguinte:
-
Em Subnet (Sub-rede), escolha a sub-rede na qual deseja iniciar a instância. Se você não selecionar uma sub-rede, não será possível habilitar a instância para o EFA.
-
Para Firewall (security groups) (Firewall/grupos de segurança), escolha Select existing security group (Selecione grupo de segurança existente) e, em seguida, selecione o grupo de segurança que você criou na etapa anterior.
-
Expanda a seção Configuração de rede avançada.
Para Interface de rede 1, selecione Índice da placa de rede = 0, Índice do dispositivo = 0 e Tipo de interface = EFA com ENA.
(Opcional) Caso esteja usando um tipo de instância com várias placas, como
p4d.24xlarge
oup5.48xlarge
, para cada interface de rede adicional necessária, selecione Adicionar interface de rede, em Índice da placa de rede, selecione o próximo índice não utilizado e, em seguida, selecione Índice do dispositivo = 1 e Tipo de interface =EFA com ENA ou exclusivamente EFA.
-
-
(Opcional) Na seção Storage (Armazenamento), configure os volumes conforme necessário.
-
Na seção Advanced details (Detalhes avançados), para Placement group name (Nome do grupo de posicionamento), selecione o grupo de posicionamento de cluster no qual iniciar as instâncias. Caso precise criar um novo grupo de posicionamento de cluster, escolha Create new placement group (Criar novo grupo de posicionamento).
-
No painel Summary (Resumo) à direita, em Number of instances (Número de instâncias), insira o número de instâncias habilitadas para EFA que você deseja iniciar e escolha Launch instance (Iniciar instância).
Etapa 11: Encerrar a instância temporária
Neste ponto, você não precisa mais da instância que iniciou na Etapa 2. É possível encerrar a instância para não incorrer mais em cobranças desnecessárias.
Para encerrar a instância temporária
Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/
. -
No painel de navegação, escolha Instances (Instâncias).
-
Selecione a instância temporária, escolha Ações, selecione Estado da instância, Encerrar (excluir) instância.
-
Quando a confirmação for solicitada, escolha Encerrar (excluir).
Etapa 12: habilitar SSH sem senha
Para permitir que suas aplicações sejam executadas em todas as instâncias do cluster, é necessário habilitar o acesso SSH sem senha do nó líder para os nós membros. O nó líder é a instância a partir da qual você executa suas aplicações. As instâncias restantes no cluster são os nós membros.
Para habilitar SSH sem senha entre as instâncias no cluster
-
Selecione uma instância no cluster como o nó líder e conecte-se a ela.
-
Desabilite
strictHostKeyChecking
e habiliteForwardAgent
no nó líder. Abra o~/.ssh/config
usando o editor de texto de sua preferência e adicione o seguinte.Host * ForwardAgent yes Host * StrictHostKeyChecking no
-
Gere um par de chaves RSA.
$
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsaO par de chaves é criado no diretório do
$HOME/.ssh/
. -
Altere as permissões da chave privada no nó líder.
$
chmod 600 ~/.ssh/id_rsa chmod 600 ~/.ssh/config -
Abra
~/.ssh/id_rsa.pub
usando seu editor de texto preferido e copie a chave. -
Para cada nó de membro no cluster, faça o seguinte:
-
Conecte-se à instância.
-
Abra
~/.ssh/authorized_keys
usando o editor de texto de sua preferência e adicione a chave pública que você copiou anteriormente.
-
-
Para testar se o SSH sem senha está funcionando como esperado, conecte-se ao seu nó líder e execute o comando a seguir.
$
sshmember_node_private_ip
É necessário se conectar ao nó membro sem receber uma solicitação para inserir uma chave ou senha.