올바른 MPI 라이브러리 선택

완료됨

HB120_v2, HB60, HC44 SKU는 InfiniBand 네트워크 상호 연결망을 지원합니다. PCI Express는 SR-IOV(단일 루트 입출력 가상화)를 통해 가상화되기 때문에 널리 사용되는 모든 MPI 라이브러리(HPCX, OpenMPI, Intel MPI, MVAPICH, MPICH)를 해당 HPC VM에서 사용할 수 있습니다.

InfiniBand를 통해 통신할 수 있는 HPC 클러스터에 대한 현재 제한은 300개 VM입니다. 다음 표에는 InfiniBand를 통해 통신하는 밀결합된 MPI 애플리케이션에서 지원되는 최대 병렬 프로세스 수가 나와 있습니다.

SKU 최대 병렬 프로세스 수
HB120_v2 36,000개 프로세스
HC44 13,200개 프로세스
HB60 18,000개 프로세스

참고

이러한 한도는 나중에 변경될 수 있습니다. 밀결합된 MPI 작업의 한도가 더 높아야 하는 경우에는 지원 요청을 제출하세요. 상황에 맞게 한도를 높여 줄 수도 있습니다.

HPC 애플리케이션이 특정 MPI 라이브러리를 권장하는 경우 먼저 해당 버전을 사용해 보세요. MPI를 유연하게 선택할 수 있고 최상의 성능을 원할 경우 HPCX를 사용해 보세요. 전반적으로 HPCX MPI는 InfiniBand 인터페이스에 UCX 프레임워크를 사용하여 최고의 성능을 제공하고 모든 Mellanox InfiniBand 하드웨어 및 소프트웨어 기능을 활용합니다.

다음 그림에서는 인기 있는 MPI 라이브러리 아키텍처를 비교합니다.

인기 있는 MPI 아키텍처 다이어그램

HPCX 및 OpenMPI는 ABI 호환되므로 OpenMPI로 빌드된 HPCX를 사용하여 HPC 애플리케이션을 동적으로 실행할 수 있습니다. 마찬가지로 Intel MPI, MVAPICH, MPICH는 ABI 호환됩니다.

하위 수준의 하드웨어 액세스를 통한 보안 취약성을 방지하기 위해 큐 쌍 0은 게스트 VM에 액세스할 수 없습니다. 최종 사용자 HPC 애플리케이션에는 영향을 주지 않아야 하지만 일부 하위 수준의 도구가 제대로 작동하지 않을 수 있습니다.

HPCX 및 OpenMPI mpirun 인수

다음 명령은 HPCX 및 OpenMPI에 대한 몇 가지 권장 mpirun 인수를 보여 줍니다.

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

해당 명령에서:

매개 변수 Description
$NPROCS MPI 프로세스의 수를 지정합니다. 예: -n 16
$HOSTFILE 호스트 이름 또는 IP 주소를 포함하는 파일을 지정하여 MPI 프로세스가 실행되는 위치를 나타냅니다. 예: --hostfile hosts
$NUMBER_PROCESSES_PER_NUMA 각 NUMA 도메인에서 실행되는 MPI 프로세스 수를 지정합니다. 예를 들어 NUMA당 4개의 MPI 프로세스를 지정하려면 --map-by ppr:4:numa:pe=1을 사용합니다.
$NUMBER_THREADS_PER_PROCESS MPI 프로세스당 스레드 수를 지정합니다. 예를 들어 NUMA당 1개의 MPI 프로세스와 4개의 스레드를 지정하려면 --map-by ppr:1:numa:pe=4를 사용합니다.
-report-bindings MPI 프로세스와 코어 간 매핑을 인쇄합니다. 이는 MPI 프로세스 고정이 올바른지 확인하는 데 유용합니다.
$MPI_EXECUTABLE MPI 라이브러리의 MPI 실행 파일 연결을 지정합니다. MPI 컴파일러 래퍼는 이를 자동으로 수행합니다. 예를 들어 mpicc 또는 mpif90입니다.

밀결합된 MPI 애플리케이션이 과도하게 집단 통신을 하는 것으로 의심되는 경우 HCOLL(계층적 집단)을 사용하도록 설정할 수 있습니다. 이러한 기능을 사용하려면 다음 매개 변수를 사용합니다.

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

Intel MPI mpirun 인수

Intel MPI 2019 릴리스는 OFA(Open Fabrics Alliance) 프레임워크에서 OFI(Open Fabrics Interfaces) 프레임워크로 전환되었으며 현재는 이를 지원합니다. InfiniBand 지원 공급자로는 mlx 및 verbs 두 가지가 있습니다. mlx 공급자는 HB 및 HC VM의 기본 공급자입니다.

다음은 Intel MPI 2019 업데이트 5 이상에 권장되는 몇 가지 mpirun 인수입니다.

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

mpirun -n $NPROCS -f $HOSTFILE $MPI_EXECUTABLE

해당 인수에서:

매개 변수 설명
FI_PROVIDER 어떤 libfabric 공급자를 사용할지 지정합니다. 이는 API, 프로토콜 및 사용되는 네트워크에 영향을 미칩니다. verbs는 다른 옵션이지만 일반적으로 더 나은 성능을 제공하는 것은 mlx입니다.
I_MPI_DEBUG 프로세스를 고정하는 위치 및 사용되는 프로토콜 및 네트워크에 대한 세부 정보를 제공할 수 있는 추가 디버그 출력의 수준을 지정합니다.
I_MPI_PIN_DOMAIN 프로세스 고정 방식을 지정합니다. 예를 들어 코어나 소켓 또는 NUMA 도메인에 고정할 수 있습니다. 본 예제에서는 이 환경 변수를 numa로 설정합니다. 즉, 프로세스가 NUMA 노드 도메인에 고정됩니다.

특히 집합적 작업이 상당한 시간을 소비하는 경우 시도할 수 있는 몇 가지 다른 옵션이 있습니다. Intel MPI 2019 업데이트 5 이상은 mlx 공급자를 지원하고 InfiniBand와 통신하는 데 UCX 프레임워크를 사용합니다. HCOLL도 지원합니다.

export FI_PROVIDER=mlx
export I_MPI_COLL_EXTERNAL=1

MVAPICH mpirun 인수

다음 목록에는 몇 가지 권장 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

해당 인수에서:

매개 변수 Description
MV2_CPU_BINDING_POLICY 사용할 바인딩 정책을 지정합니다. 이 정책은 프로세스를 코어 ID에 고정하는 방법에 영향을 줍니다. 이 경우 scatter를 지정하므로 프로세스는 NUMA 도메인 간에 균등하게 분산됩니다.
MV2_CPU_BINDING_LEVEL 프로세스를 고정할 위치를 지정합니다. 이 경우 numanode로 설정하므로 프로세스는 NUMA 도메인 단위에 고정됩니다.
MV2_SHOW_CPU_BINDING 프로세스를 고정하는 위치에 대한 디버그 정보를 가져올지 여부를 지정합니다.
MV2_SHOW_HCA_BINDING 각 프로세스에서 사용하는 호스트 채널 어댑터에 대한 디버그 정보를 가져올지 여부를 지정합니다.