OpenMPI
OpenMPI Architecture
loading...
- Frameworks
- OpenMPI / Internal frameworks
pml
: Potin-to-point Management LayerMPI_Send
,MPI_Recv
등의 처리를 담당합니다.ob1
- 다양한
btl
백엔드를 조합하여 사용 가능합니다.
- 다양한
cm
mtl
을 사용합니다.- Matching Network, iWARP에서 주로 사용됩니다.
ucx
- UCX를 사용합니다.
- IB, RoCE 네트워크에서 주로 사용됩니다.
btl
: point-to-point Byte Transfer Layertcp
openib
vader
mtl
: Matching Transport Layercoll
: COLLective algorithmsMPI_Bcast
,MPI_Allreduce
등의 처리를 담당합니다.
osc
: One-Sided CommunicationMPI_Put
,MPI_Get
등의 처리를 담당합니다.
설치
Reference
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
Reference
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이 결정합니다.