본문으로 건너뛰기

OpenMPI

OpenMPI Architecture

loading...

OpenMPI Architecture

  • Frameworks
    • OpenMPI / Internal frameworks
    • pml: Potin-to-point Management Layer
      • MPI_Send, MPI_Recv 등의 처리를 담당합니다.
      • ob1
        • 다양한 btl 백엔드를 조합하여 사용 가능합니다.
      • cm
        • mtl을 사용합니다.
        • Matching Network, iWARP에서 주로 사용됩니다.
      • ucx
        • UCX를 사용합니다.
        • IB, RoCE 네트워크에서 주로 사용됩니다.
    • btl: point-to-point Byte Transfer Layer
      • tcp
      • openib
      • vader
    • mtl: Matching Transport Layer
    • coll: COLLective algorithms
      • MPI_Bcast, MPI_Allreduce 등의 처리를 담당합니다.
    • osc: One-Sided Communication
      • MPI_Put, MPI_Get 등의 처리를 담당합니다.

설치

tar xf openmpi-5.0.7.tar.bz2
cd openmpi-5.0.7
mkdir build && cd build \
&& ../configure --prefix=/usr \
<flags>
  • --with-ucx=<ucxInstallPrefix>
    • UCX
    • btl_uct 관련 컴파일 에러가 발생하면 --enable-mca-no-build=btl-uct를 추가하고 mpirun 사용시 --mca btl ^uct를 추가합니다.
    • 추가 오버헤드가 있다면 --mca btl ^vader,tcp,openib,uct 옵션으로 기본 btl을 제외시켜볼 수 있습니다.
  • --with-platform=contrib/platform/mellanox/optimized
  • --with-knem=<knemInstallPrefix>
make -j $(nproc) all
make install
ldconfig

mpirun/mpiexec

mpirun <flags> <program> [<args>]
  • Launch 설정
    • -n <num>
      • 실행할 program의 수를 지정합니다.
    • -H|--host <host>[:<slot>],[<host>[:<slot>],...]
    • --hostfile <path>
    • --mca <key> [^]<value>[,<value>,...]
      • ^는 제외를 의미합니다.
      • OMPI_MCA_<key>=<value> 형식의 환경변수로 설정할 수 있습니다.
    • -x <env>[=<value>]
      • 환경변수를 설정합니다.
      • <env>만 설정하면 현재 환경변수의 값을 사용합니다.
      • foo*을 설정하면 현재 환경변수 중 foo로 시작하는 모든 환경변수를 설정합니다.
  • Mapping, ranking, binding 설정
    • --map-by <mapping>
      • slot: 각 프로세스를 각 노드의 slot에 매핑합니다.(한 노드의 slot을 모두 사용하면 다음 노드로 넘어갑니다.)
    • --bind-to <bound>
      • none: 프로세스를 바인딩하지 않습니다.
      • numa: 각 프로세스를 NUMA 영역에 있는 모든 CPU에 바인딩합니다.
  • Specific 설정
    • --allow-run-as-root
      • root 권한으로 실행합니다.
      • 권장되지 않습니다.
  • 용어
    • Resource Manager(RM)
      • slurm 등
    • slot
      • 프로세스를 실행할 수 있는 할당가능한 단위입니다.
      • 설정하지 않으면 CPU 수 또는 RM이 결정합니다.