MPI
システムHでは、以下のMPIが利用可能です。アプリケーションの特性や利用目的に応じて使い分けてください。
-
NVIDIA GPU に最適化されたMPIです。GPU間通信性能が高く、GPUを活用するHPCアプリケーションに適しています(深層学習、分子動力学など)。
-
Intel製CPUクラスタ向けに最適化されたMPIです。高性能なメッセージパッシングと広範なインタコネクト対応による効率的な通信を提供し、CPUベースの数値計算アプリケーションに適しています(気象モデル、有限要素解析など)。
-
オープンソースのMPI実装で、広範な互換性と柔軟性を持ち、汎用的なMPIアプリケーションの開発に適しています。
利用するためには事前にmodule
コマンドを用いて利用環境を設定する必要があります。
インタラクティブノードでmodule
コマンドを用いると、コンパイル用環境変数(ヘッダファイルおよびライブラリのサーチパス)が自動で設定されます。
計算ノードでmodule
コマンドを用いると、コンパイル用環境変数に加え、実行用環境変数も自動で設定されます。
[username@qes01 ~]$ module load hpc_sdk/24.9 nvhpc-hpcx-cuda12/24.9
または
[username@qes01 ~]$ module load hpc_sdk/25.5 nvhpc-hpcx-cuda12/25.5
[username@qes01 ~]$ module load intel-mpi/2021.13
[username@qes01 ~]$ module load openmpi/4.1.7
以下では、システムHに導入されているMPIのバージョン一覧を示します。
NVIDIA HPC-X (HPC SDK)
Module Version | Open MPI Version | Interactive Node | Compute Node |
---|---|---|---|
24.9 (hpcx 2.20) | 4.1.7a1 | Yes | Yes |
25.5 (hpcx 2.22.1) | 4.1.7rc1 | Yes | Yes |
使用方法
ここでは、NVIDIA HPC-X (HPC SDK)モジュールの使用方法を説明します。
前述のとおりmoduleコマンドでHPC-X利用環境を設定後、module availコマンドを実行することでHPC-Xモジュールを確認できます。
[username@qes01 ~]$ module avail hpcx
-------------------- /apps/hpc_sdk/24.9/Linux_x86_64/24.9/comm_libs/12.6/hpcx/latest/modulefiles --------------------
hpcx hpcx-debug hpcx-debug-ompi hpcx-mt hpcx-mt-ompi hpcx-ompi hpcx-prof hpcx-prof-ompi hpcx-stack
Key:
modulepath auto-loaded
[username@qes01 ~]$
システムHで提供しているHPC-Xモジュールには以下の種類があります。用途に応じてモジュールを読み込んでください。
モジュール名 | 説明 |
---|---|
hpcx | 標準 |
hpcx-mt, hpcx-mt-ompi | マルチスレッド対応 |
hpcx-debug, hpcx-debug-ompi | デバッグ用 |
hpcx-prof, hpcx-prof-ompi | プロファイリング用 |
hpcx-stack | 上記モジュールすべてをロード |
hpcx-mtを利用する場合の例
[username@qes01 ~]$ module load hpcx-mt
[username@qes01 ~]$ module list
Currently Loaded Modulefiles:
1) hpc_sdk/24.9 2) hpcx 3) nvhpc-hpcx-cuda12/24.9 4) hpcx-mt
Key:
auto-loaded
[username@qes01 ~]$
また、ジョブ内でmpirun
、mpiexec
コマンドを実行する際には-hostfile
オプションにホストファイルを指定します。
ホストファイルはPBS_NODEFILE
環境変数に設定されています。
[username@qes01 ~]$ qsub -I -W group_list=grpname -l rt_QF=2,walltime=01:00:0
[username@qh001 ~]$ module load hpc_sdk/24.9 nvhpc-hpcx-cuda12/24.9
[username@qh001 ~]$ mpirun -np 2 -map-by ppr:1:node -hostfile $PBS_NODEFILE ./hello_c
Hello, world, I am 0 of 2, (Open MPI v4.1.7a1, package: Open MPI qa@sky4 Distribution, ident: 4.1.7a1, repo rev: v4.1.5-115-g41ba5192d2, Unreleased developer copy, 135)
Hello, world, I am 1 of 2, (Open MPI v4.1.7a1, package: Open MPI qa@sky4 Distribution, ident: 4.1.7a1, repo rev: v4.1.5-115-g41ba5192d2, Unreleased developer copy, 135)
NVIDIA HPC-XではNCCL-SHARPプラグインを提供しています。 プラグインはHPC-Xのバージョンごとに対応するNCCLのバージョンが異なります。HPC-XとNCCLの対応は以下の表を参照してください。
HPC-Xバージョン | NCCL バージョン |
---|---|
2.20 | 2.18.5 |
2.22.1 | 2.26.5 |
各コンポーネントのバージョンについてはリリースノートを参照してください。
NVIDIA HPC-X (HPC SDK)について、より詳しい情報は公式ドキュメントを参照してください。
Intel MPI
intel-mpi/ | Interactive Node | Compute Node |
---|---|---|
2021.13 | Yes | Yes |
OpenMPI
システムHで提供しているOpenMPIのモジュールは以下示します。
openmpi/ | Interactive Node | Compute Node |
---|---|---|
4.1.7 | Yes | Yes |
独自のOpenMPIの利用
システムHが提供するバージョン以外のOpenMPIが必要な場合、自身でOpenMPIをビルドしユーザ領域にインストールしてください。
以下はOpenMPI 4.1.7 (for GCC 11.4.1) x CUDA 12.6.2 をインストールする場合の例です。
ビルド方法
ビルドのためのサンプルスクリプト
#!/bin/bash
module load cuda/12.6/12.6.2 gcc/11.4.1
wget https://download.open-mpi.org/release/open-mpi/v4.1/openmpi-4.1.7.tar.gz
tar zxf openmpi-4.1.7.tar.gz
cd openmpi-4.1.7
PREFIX="${HOME}/openmpi/4.1.7/gcc11.4.1"
mkdir -p $PREFIX
time ./configure \
--prefix=${PREFIX} \
--enable-orterun-prefix-by-default \
--with-cuda=${CUDA_HOME} \
--with-ucx="/usr" \
--with-verbs \
--enable-mca-no-build=btl-uct \
--with-tm="/opt/pbs" \
2>&1 | tee configure.log
make -j8 2>&1 | tee make.log
make install 2>&1 | tee make.install.log
echo "btl_openib_warn_default_gid_prefix = 0" >> ${PREFIX}/etc/openmpi-mca-params.conf
echo "pml = ucx" >> ${PREFIX}/etc/openmpi-mca-params.conf
echo "btl = ^openib" >> ${PREFIX}/etc/openmpi-mca-params.conf
Warning
- ビルドおよびインストールは計算ノードで実施してください。
- ビルド後、
${PREFIX}/etc/openmpi-mca-params.conf
に以下を設定してくださいbtl = ^openib
btl_openib_warn_default_gid_prefix = 0
pml = ucx
- PBS連携のためには、以下を実施してください
- ビルドの際、
--with-tm="/opt/pbs"
オプションを指定してください - プログラムのコンパイル及びジョブ実行の際、環境変数
LD_LIBRARY_PATH
に/opt/pbs/lib
を追加してください
- ビルドの際、
コンパイル方法
インストールしたOpenMPIを使ってプログラムをコンパイルするサンプルスクリプト
#!/bin/bash
export PATH=~/openmpi/4.1.7/gcc11.4.1/bin:$PATH
export LD_LIBRARY_PATH=~/openmpi/4.1.7/gcc11.4.1/lib:/opt/pbs/lib:$LD_LIBRARY_PATH
which mpicc
mpicc test.c -o test.o
ジョブ実行方法
4ノードに1プロセスずつ(4x1p)実行する場合のサンプルジョブスクリプト
#!/bin/bash
#PBS -l rt_QF=4:mpiprocs=1
#PBS -l walltime=00:05:00
#PBS -l place=scatter
#PBS -W group_list=qgxg50001
#PBS -j oe
cd $PBS_O_WORKDIR
export PATH=~/openmpi/4.1.7/gcc11.4.1/bin:$PATH
export LD_LIBRARY_PATH=~/openmpi/4.1.7/gcc11.4.1/lib:/opt/pbs/lib:$LD_LIBRARY_PATH
echo "nodes:"
cat $PBS_NODEFILE
echo -e "\nrun:"
mpirun ./test.o
2ノードに2プロセスずつ(2x2p)実行する場合のサンプルジョブスクリプト
#!/bin/bash
#PBS -l rt_QF=2:mpiprocs=2
#PBS -l walltime=00:05:00
#PBS -l place=scatter
#PBS -W group_list=qgxg50001
#PBS -j oe
cd $PBS_O_WORKDIR
export PATH=~/openmpi/4.1.7/gcc11.4.1/bin:$PATH
export LD_LIBRARY_PATH=~/openmpi/4.1.7/gcc11.4.1/lib:/opt/pbs/lib:$LD_LIBRARY_PATH
echo "nodes:"
cat $PBS_NODEFILE
echo -e "\nrun:"
mpirun ./test.o