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