Intel oneAPIをインストールしてIntel MPIを使う

IntelのMPIはFreeのOpenMPIなどに比べて高性能と言われてきました。しかし少し前まではIntel MPIは有償でそれなりに高額なので、OpenMPIとの性能差を気軽に確かめることはできませんでした。現在は無償でダウンローと可能なintel oneAPIの中にIntel...

Share

ベンチ検証を“壊さずに”回す:検収RunbookとBaselineoneAPIの導入やベンチ実行は環境差で詰まりがちです。
「壊しても戻れるBaseline」+「検収Runbook」で安全に試せるようにしています。検収Runbookを見る(相談/伴走) Rescue-Ready Baselineを見る

IntelのMPIはFreeのOpenMPIなどに比べて高性能と言われてきました。しかし少し前まではIntel MPIは有償でそれなりに高額なので、OpenMPIとの性能差を気軽に確かめることはできませんでした。現在は無償でダウンローと可能なintel oneAPIの中にIntel MPIが含まれており、その性能を気軽に確かめることができます。このBlogではIntel oneAPIをインストールして、姫野ベンチのMPI版を使い、OpenMPIとの性能差を確認します。

使用するマシンは手元にある

hpc@workbench:~$ head /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 79
model name : Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
stepping : 1
microcode : 0xb000040
cpu MHz : 1900.000
cache size : 30720 KB
physical id : 0
c@workbench:~$ nproc
24
hpc@workbench:~$ free -m
total used free shared buff/cache available
Mem: 515840 1421 513318 31 1099 511716
Swap: 0 0 0
hpc@workbench:~$ uname -a
Linux workbench 5.15.0-73-generic #80~20.04.1-Ubuntu SMP Wed May 17 14:58:14 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
hpc@workbench:~$

になります。

Intel oneAPIをインストールするには、

# download the key to system keyring
wget --no-check-certificate -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB \
| gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null

# add signed entry to apt sources and configure the APT client to use Intel repository:
echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" |\
sudo tee /etc/apt/sources.list.d/oneAPI.list

を実行して、

sudo apt update
sudo apt install intel-basekit intel-hpckit

を実行するだけです。時間は結構かかります。

その後~/.bashrcの最後に

source /opt/intel/oneapi/setvars.sh

を加えてください(shellがbashの場合)。

次に理化学研究所の姫野ベンチサイトから姫野ベンチのF90 MPI版をダウンロードします。unzipするとf90_xp_mpi.lzhというファイルができますが、それをこちらの説明にあるlhaというアプリをインストールするとさらに解凍できて、himenoBMTxpr.f90 というファイルができます。下記を実行すると、姫野ベンチをダウンロードして2回解凍してhimenoBMTxpr.f90が得られます。

mkdir ~/himeno
cd himeno
wget --no-check-certificate https://i.riken.jp/wp-content/uploads/2015/07/f90_xp_mpi.zip
unzip f90_xp_mpi.zip
sudo apt install jlha-utils -y
lha x f90_xp_mpi.lzh

 次にこれをコンパイルして実行して性能評価するのですが、最初にOpenMPIで試してみましょう。ubuntu標準パッケージのOpenMPIがありますのでそれをダウンロードして姫野ベンチをコンパイルします。

sudo apt install openmpi-bin -y
mpif90 -Ofast himenoBMTxpr.f90 -o himeno

実行するには

mpirun -np 24 ./himeno <<.
xl
1 24 1
.

を入力します。姫野ベンチのMPI版を24コアで、配列のサイズは一番大きいXL、配列の分割はとりあえず1 24 1にして実行するコマンドです。実行結果は、

For example:
Grid-size=
XS (64x32x32)
S (128x64x64)
M (256x128x128)
L (512x256x256)
XL (1024x512x512)
Grid-size =

For example:
DDM pattern=
1 1 2
i-direction partitioning : 1
j-direction partitioning : 1
k-direction partitioning : 2
DDM pattern =

Sequential version array size
mimax= 1025 mjmax= 513 mkmax= 513
Parallel version array size
mimax= 1025 mjmax= 24 mkmax= 513
imax= 1024 jmax= 23 kmax= 512
I-decomp= 1 J-decomp= 24 K-decomp= 1

Start rehearsal measurement process.
Measure the performance in 3 times.
MFLOPS: 41461.028864353313 time(s): 0.65396026000000007 4.39602009E-04
Now, start the actual measurement process.
The loop will be excuted in 275 times.
This will take about one minute.
Wait for a while.
Loop executed for 275 times
Gosa : 4.02103731E-04
MFLOPS: 45088.813867705132 time(s): 55.123154317000001
Score based on Pentium III 600MHz : 544.287964

になりました。約45GFLOPSの結果です。

次にIntel MPIでっ同様に試してみます。

source /opt/intel/oneapi/setvars.sh
mpif90 -Ofast himenoBMTxpr.f90 -o himeno
mpirun -np 24 ./himeno <<.
xl
1 24 1
.

実行結果は、

For example:
Grid-size=
XS (64x32x32)
S (128x64x64)
M (256x128x128)
L (512x256x256)
XL (1024x512x512)
Grid-size =

For example:
DDM pattern=
1 1 2
i-direction partitioning : 1
j-direction partitioning : 1
k-direction partitioning : 2
DDM pattern =

Sequential version array size
mimax= 1025 mjmax= 513 mkmax= 513
Parallel version array size
mimax= 1025 mjmax= 24 mkmax= 513
imax= 1024 jmax= 23 kmax= 512
I-decomp= 1 J-decomp= 24 K-decomp= 1

Start rehearsal measurement process.
Measure the performance in 3 times.
MFLOPS: 43863.173483990795 time(s): 0.61814645549748093 4.39602038E-04
Now, start the actual measurement process.
The loop will be excuted in 291 times.
This will take about one minute.
Wait for a while.
Loop executed for 291 times
Gosa : 4.00876364E-04
MFLOPS: 47163.663748036117 time(s): 55.764220099663362
Score based on Pentium III 600MHz : 569.334473

となり、OpenMPIの47163/45088=1.046倍の速度でした。

Read more

ローカルLLMはAllegro/NeQUIPの学習設定YAMLを作れるのか:Nemotronでmetadata-only preflightを検証

ローカルLLMはAllegro/NeQUIPの学習設定YAMLを作れるのか:Nemotronでmetadata-only preflightを検証 これは性能ベンチマークではありません。A100x4上のローカルLLMで、Allegro / NeQUIPの学習設定YAMLをどこまで安全に作り、実行前に確認できるかを調べた機能検証です。 結論から言うと、NemotronはAllegro / NeQUIPのtraining YAML候補を生成できました。既存SIF内で torch / nequip / allegro のimport、A100x4のCUDA可視

By Kenetsu Hanabusa

ローカルLLMはHPC入力ファイルを作り、エラーを直せるのか:NemotronでQuantum ESPRESSOとLAMMPSを検証

ローカルLLMはHPC入力ファイルを作り、エラーを直せるのか:NemotronでQuantum ESPRESSOとLAMMPSを検証 この記事の位置づけ これは性能ベンチマークではなく、 ローカルLLMがHPC入力ファイルの生成、実行ログを使った修正、再実行まで支援できるか を確認した機能検証です。 H200 NVLやRTX PRO 6000 Blackwellへの一般化はせず、次回以降の別フェーズとして扱います。 結論 A100 80GB x4上で NVIDIA-Nemotron-3-Nano-30B-A3B-BF16 をローカル配信し、Quantum

By Kenetsu Hanabusa