サブロウ丸

Sabrou-mal サブロウ丸

主にプログラミングと数学

OpenMPIのコンパイル

本項ではOpenMPIの依存関係を含めて自前でのビルドを行います。

Versions

https://github.com/open-mpi/ompi

library version
ompi v5.0.3
hwloc v2.7.1
libevent v.2.1.12
openpmix v5.0.2
prrte v3.0.5
ucx v1.16.0
ucc v1.3.0

OpenMPI v.5.0.3 におけるフォルダ構成

.
├── 3rd-party
│   ├── hwloc-2.7.1
│   ├── libevent-2.1.12-stable
│   ├── openpmix
│   ├── prrte
│   ├── romio341
│   └── treematch
├── autom4te.cache
├── build
├── config
├── contrib
├── docs
├── examples
├── ompi
├── opal
├── oshmem
└── test

OpenMPIの依存関係のグラフ

図は 4.8. Required support libraries — Open MPI main documentation から引用。下の方、つまり依存関係が少ないライブラリからビルドする。

事前設定

export OMPI_PATH=/XXX/ompi  # cloneしたompiディレクトリのパス
export PREFIX=/YYY # どこか

依存関係のビルド

libevent

高性能な非同期イベント駆動型プログラムを構築するためのCライブラリ。主にネットワークプログラミングや非同期I/Oに関連するタスクで使用される。

cd $OMPI_PATH/3rd-party/libevent-2.1.12-stable
./configure --prefix=$PREFIX && make -j && make install

hwloc

hwloc(Hardware Locality)は、システムのハードウェアトポロジーを管理および可視化するためのライブラリ

cd $OMPI_PATH/3rd-party/hwloc-2.7.1
./configure --prefix=$PREFIX && make -j && make install

OpenPMIX

並列計算(特に高性能コンピューティング:HPC)環境におけるプロセス管理と情報共有のためのフレームワーク

  • プロセス管理の標準化: 並列アプリケーションのプロセス起動、終了、同期などを効率的に管理
  • ランタイム環境間の相互運用性: OpenMPI、SLURM、PBSなど異なるHPCランタイム環境の連携を実現
  • プロセス間情報共有: プロセスやリソースの状態、メタデータを効率的に交換
  • リソース管理との統合: リソースマネージャと連携し、ジョブのスケジューリングやリソース割り当てを管理
  • 非同期通信のサポート: 動的なプロセス間通信やデータ共有を効率化
  • ジョブレジリエンスの提供: 障害発生時のジョブ維持や動的再構成をサポート
  • データの公開と検索: プロセス間でデータを公開・取得できる機能を提供
  • ジョブの同期とバリア操作: 並列プロセス間の同期を簡潔に実現
cd $OMPI_PATH/3rd-party/openpmix/
./autogen.pl
./configure \
--prefix=$PREFIX \
--with-libevent=$PREFIX \
--with-hwloc=$PREFIX
make -j && make install

PRRTE

Open MPIの実行時環境を管理するためのソフトウェア。

PRRTEは以下の機能を提供

  • プロセスの起動と管理:リモートプロセスの起動、監視、終了、および収集を担当
  • リソースの発見と割り当て:利用可能な計算リソースを検出し、適切に割り当てる
  • 入出力のリダイレクト:リモートプロセスの標準出力やエラー出力を適切に処理

PRRTEは、その名の通りPMIxのリファレンス実装として開発。PMIxは、さまざまな実行時環境との通信を統一的なAPIで提供し、Open MPIが特定の実行時環境の詳細を意識せずに動作できるようにする。PRRTEは、特にスケジューラが存在しない環境や、リモートプロセスの管理機能が不足している環境で、これらの機能を補完。 

Open MPIのバージョン5.0.x以降では、PRRTEがデフォルトの実行時環境管理システムとして採用。これは、以前のORTEからの進化であり、PRRTEは独立したプロジェクトとして、ネイティブな実行時環境(例えばSlurm, PBS/Torque, LSF)を持たない環境に対して、実行時環境のインフラストラクチャを提供。 

MPI (Message Passing Interface) PRRTE(PMIx Reference RunTime Environment) PMIx(Process Management Interface for Exascale) ORTE(Open Run-Time Environment)

cd $OMPI_PATH/3rd-party/prrte/
./autogen.pl
./configure \
--prefix=$PREFIX \
--with-libevent=$PREFIX \
--with-hwloc=$PREFIX \
--with-pmix=$PREFIX 
make -j && make install

OpenMPI のビルド

cd $OMPI_PATH
./autogen.pl
./configure \
--prefix=$PREFIX \
--with-ucx=$PREFIX \
--with-ucc=$PREFIX \
--with-libevent=$PREFIX \
--with-hwloc=$PREFIX \
--with-pmix=$PREFIX \
--with-prrte=$PREFIX

事後処理

最後にLD_LIBRARY_PATHとPATHを更新すればok

export LD_LIBRARY_PATH=$PREFIX/lib:$LD_LIBRARY_PATH
export PATH=$PREFIX/bin:$PATH

参考