올바른 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 라이브러리 아키텍처를 비교합니다.
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 |
각 프로세스에서 사용하는 호스트 채널 어댑터에 대한 디버그 정보를 가져올지 여부를 지정합니다. |