Selecione a biblioteca MPI certa

Concluído

As SKUs HB120_v2, HB60 e HC44 suportam interconexões de rede InfiniBand. Como o PCI express é virtualizado por meio da virtualização de entrada/saída de raiz única (SR-IOV), todas as bibliotecas MPI populares (HPCX, OpenMPI, Intel MPI, MVAPICH e MPICH) estão disponíveis nessas VMs HPC.

A limitação atual para um cluster HPC que pode se comunicar por InfiniBand é de 300 VMs. A tabela a seguir lista o número máximo de processos paralelos suportados em aplicativos MPI fortemente acoplados que estão se comunicando por InfiniBand.

SKU Máximo de processos paralelos
HB120_v2 36.000 processos
HC44 13.200 processos
HB60 18.000 processos

Nota

Estes limites podem mudar no futuro. Se você tiver um trabalho MPI firmemente acoplado que exija um limite maior, envie uma solicitação de suporte. Pode ser possível aumentar os limites para a sua situação.

Se um aplicativo HPC recomendar uma biblioteca MPI específica, tente essa versão primeiro. Se você tiver flexibilidade em relação a qual MPI você pode escolher e quiser o melhor desempenho, experimente o HPCX. No geral, o HPCX MPI tem o melhor desempenho usando a estrutura UCX para a interface InfiniBand e aproveita todos os recursos de hardware e software Mellanox InfiniBand.

A ilustração a seguir compara as arquiteturas populares da biblioteca MPI.

Diagrama de arquiteturas MPI populares.

HPCX e OpenMPI são compatíveis com ABI, portanto, você pode executar dinamicamente um aplicativo HPC com HPCX que foi construído com OpenMPI. Da mesma forma, Intel MPI, MVAPICH e MPICH são compatíveis com ABI.

O par de filas 0 não está acessível à VM convidada, para evitar qualquer vulnerabilidade de segurança através do acesso de hardware de baixo nível. Isto não deve ter qualquer efeito nas aplicações HPC do utilizador final, mas pode impedir que algumas ferramentas de baixo nível funcionem corretamente.

Argumentos mpirun HPCX e OpenMPI

O comando a seguir ilustra alguns argumentos recomendados mpirun para HPCX e OpenMPI:

mpirun -n $NPROCS --hostfile $HOSTFILE --map-by ppr:$NUMBER_PROCESSES_PER_NUMA:numa:pe=$NUMBER_THREADS_PER_PROCESS -report-bindings $MPI_EXECUTABLE

Nesse comando:

Parâmetro Description
$NPROCS Especifica o número de processos MPI. Por exemplo: -n 16.
$HOSTFILE Especifica um arquivo contendo o nome do host ou endereço IP, para indicar o local onde os processos MPI são executados. Por exemplo: --hostfile hosts.
$NUMBER_PROCESSES_PER_NUMA Especifica o número de processos MPI executados em cada domínio NUMA. Por exemplo, para especificar quatro processos MPI por NUMA, use --map-by ppr:4:numa:pe=1.
$NUMBER_THREADS_PER_PROCESS Especifica o número de threads por processo MPI. Por exemplo, para especificar um processo MPI e quatro threads por NUMA, use --map-by ppr:1:numa:pe=4.
-report-bindings Imprime o mapeamento de processos MPI para núcleos, o que é útil para verificar se a fixação do processo MPI está correta.
$MPI_EXECUTABLE Especifica o executável MPI criado vinculando em bibliotecas MPI. Os wrappers do compilador MPI fazem isso automaticamente. Por exemplo: mpicc ou mpif90.

Se suspeitar que a sua aplicação MPI fortemente acoplada está a fazer uma quantidade excessiva de comunicação coletiva, pode tentar ativar coletivos hierárquicos (HCOLL). Para habilitar esses recursos, use os seguintes parâmetros:

-mca coll_hcoll_enable 1 -x HCOLL_MAIN_IB=<MLX device>:<Port>

Argumentos Intel MPI mpirun

A versão Intel MPI 2019 mudou da estrutura Open Fabrics Alliance (OFA) para a estrutura Open Fabrics Interfaces (OFI) e atualmente suporta libfabric. Existem dois provedores para suporte InfiniBand: mlx e verbos. O provedor mlx é o provedor preferencial em VMs HB e HC.

Aqui estão alguns argumentos sugeridos mpirun para a atualização 5+ do Intel MPI 2019:

export FI_PROVIDER=mlx
export I_MPI_DEBUG=5
export I_MPI_PIN_DOMAIN=numa

mpirun -n $NPROCS -f $HOSTFILE $MPI_EXECUTABLE

Nesses argumentos:

Parâmetros Description
FI_PROVIDER Especifica qual provedor libfabric usar, o que afeta a API, o protocolo e a rede usados. verbs é outra opção, mas geralmente mlx dá-lhe melhor desempenho.
I_MPI_DEBUG Especifica o nível de saída de depuração extra, que pode fornecer detalhes sobre onde os processos são fixados e qual protocolo e rede são usados.
I_MPI_PIN_DOMAIN Especifica como você deseja fixar seus processos. Por exemplo, você pode fixar núcleos, soquetes ou domínios NUMA. Neste exemplo, você define essa variável ambiental como , o numaque significa que os processos são fixados em domínios de nó NUMA.

Existem algumas outras opções que você pode tentar, especialmente se as operações coletivas estão consumindo uma quantidade significativa de tempo. A atualização 5+ do Intel MPI 2019 suporta o fornecer mlx e usa a estrutura UCX para se comunicar com o InfiniBand. Também suporta HCOLL.

export FI_PROVIDER=mlx
export I_MPI_COLL_EXTERNAL=1

MVAPICH mpirun argumentos

A lista a seguir contém vários argumentos recomendados mpirun :

export MV2_CPU_BINDING_POLICY=scatter
export MV2_CPU_BINDING_LEVEL=numanode
export MV2_SHOW_CPU_BINDING=1
export MV2_SHOW_HCA_BINDING=1

mpirun -n $NPROCS -f $HOSTFILE $MPI_EXECUTABLE

Nesses argumentos:

Parâmetros Description
MV2_CPU_BINDING_POLICY Especifica qual política de vinculação usar, o que afetará como os processos são fixados às IDs principais. Nesse caso, você especifica scatter, para que os processos sejam distribuídos uniformemente entre os domínios NUMA.
MV2_CPU_BINDING_LEVEL Especifica onde fixar processos. Nesse caso, você o define como , o numanodeque significa que os processos são fixados em unidades de domínios NUMA.
MV2_SHOW_CPU_BINDING Especifica se você deseja obter informações de depuração sobre onde os processos são fixados.
MV2_SHOW_HCA_BINDING Especifica se você deseja obter informações de depuração sobre qual adaptador de canal de host cada processo está usando.