エラスティックハイパフォーマンスコンピューティング(E-HPC)クラスターは、Intel oneAPI ツールキットを統合しています。ツールキットは、ハイパフォーマンスコンピューティング(HPC)ソフトウェアと組み合わせて使用することで、さまざまなアーキテクチャで使用されるアプリケーションを迅速に構築できます。このトピックでは、oneAPI を使用して E-HPC クラスターで Large-scale Atomic/Molecular Massively Parallel Simulator(LAMMPS)をコンパイルおよび実行する方法について説明します。
背景情報
oneAPI は、オープンで標準化された統合プログラミングモデルです。 oneAPI ツールキットは、CPU およびフィールドプログラマブルゲートアレイ(FPGA)アーキテクチャ全体にアプリケーションとソリューションを展開するための統合ツールセットを提供します。ツールキットには、高性能ヘテロジニアスコンピューティングに使用される最適化されたコンパイラ、ライブラリ、フレームワーク、および分析ツールが含まれています。ツールキットは、開発者がプログラミングを簡素化し、生産性を向上させるのに役立ちます。
LAMMPS は、液体、固体、または気体状態の粒子の集合体をモデル化する古典的な分子動力学(MD)プログラムです。 LAMMPS は、原子と分子を高効率で同時にモデル化できます。材料科学、物理学、化学の分野で広く使用されています。
oneAPI を使用して LAMMPS をコンパイルおよび実行すると、アプリケーションを迅速に構築し、アプリケーションのパフォーマンスを向上させることができます。
準備
E-HPC クラスターを作成します。詳細については、「ウィザードを使用してクラスターを作成する」をご参照ください。
この例では、次のパラメーター構成が使用されています。
パラメーター
説明
ハードウェア設定
2 つの管理ノード、1 つの計算ノード、および 1 つのログオンノードで構成される標準クラスターをデプロイします。すべてのノードは、ecs.c7.large エラスティックコンピューティングサービス(ECS)インスタンスである必要があります。各インスタンスには、2 つの vCPU、4 GiB のメモリ、および 1 つの 2.7 GHz 第 3 世代 Intel Xeon スケーラブル(Ice Lake)プロセッサが必要です。
ソフトウェア設定
CentOS 7.6 パブリックイメージと PBS スケジューラをデプロイします。
クラスターユーザーを作成します。詳細については、「ユーザーを管理する」をご参照ください。
ユーザーは、クラスターへのログオン、LAMMPS のコンパイル、およびジョブの送信に使用されます。[sudo 権限] をユーザーに付与します。
oneAPI ツールキットをインストールします。詳細については、「ソフトウェアをインストールおよびアンインストールする」をご参照ください。
次のソフトウェアをインストールします。
intel-oneapi-mkl(バージョン:2022.1.2)
intel-oneapi-mpi(バージョン:2022.1.2)
intel-oneapi-hpckit(バージョン:2022.1.2)
手順 1:クラスターに接続する
次のいずれかの方法を使用して、クラスターに接続します。
E-HPC クライアントを使用してクラスターにログオンする
クラスターのスケジューラは PBS である必要があります。 E-HPC クライアントをダウンロードしてインストールし、クライアントに必要な環境をデプロイしていることを確認してください。詳細については、「E-HPC クライアントの環境をデプロイする」をご参照ください。
E-HPC クライアントを起動してログオンします。
左側のナビゲーションペインで、[セッション管理] をクリックします。
[セッション管理] ページの右上隅にある [ターミナル] をクリックして、ターミナルウィンドウを開きます。
E-HPC コンソールを使用してクラスターにログオンする
E-HPC コンソール にログオンします。
上部ナビゲーションバーの左上隅で、リージョンを選択します。
左側のナビゲーションペインで、[クラスター] をクリックします。
[クラスター] ページで、クラスターを見つけて [接続] をクリックします。
[接続] パネルで、ユーザー名とパスワードを入力し、[SSH 経由で接続] をクリックします。
手順 2:LAMMPS をコンパイルする
最新の LAMMPS ソースコードをダウンロードします。
次のコマンドを実行して、GitHub から LAMMPS ソースコードをダウンロードします。
説明クラスターに git がインストールされていない場合は、
sudo yum install -y git
コマンドを実行して git をインストールします。git clone -b release https://github.com/lammps/lammps.git mylammps
次のコマンドを実行して、LAMMPS ソースコードのファイルを表示します。
ls -al
次のコマンド出力が返されます。
... drwxr-xr-x 15 test users 4096 May 31 16:39 mylammps ...
oneAPI モジュールを読み込みます。
次のコマンドを実行して、環境変数を
$HOME/.bashrc
ファイルに書き込みます。vim $HOME/.bashrc
次の情報を追加します。
// 環境変数を設定しますsource /opt/intel-oneapi-mpi/oneapi/setvars.sh --force source /opt/intel-oneapi-mkl/oneapi/setvars.sh --force source /opt/intel-hpckit/oneapi/setvars.sh --force
次のコマンドを実行して、
$HOME/.bashrc
ファイルを更新します。source $HOME/.bashrc
LAMMPS をコンパイルします。
次のコマンドを実行して、コンパイルに 2 つのプロセスを使用します。
cd $HOME/mylammps/src make -j 2 intel_cpu_intelmpi
次のコマンドを実行して、現在のファイルパスに生成された LAMMPS 実行可能ファイルを表示します。
ll lmp_intel_cpu_intelmpi
次のコマンド出力に類似したレスポンスが返されます。
-rwxr-xr-x 1 test users 9041824 May 31 16:48 lmp_intel_cpu_intelmpi
LAMMPS 実行可能ファイルを共有コマンドとして構成します。
mkdir -p $HOME/bin mv $HOME/mylammps/src/lmp_intel_cpu_intelmpi $HOME/bin
手順 3:LAMMPS を実行する
次のコマンドを実行して、lmp_intel_cpu_intelmpi ファイルがある bin ディレクトリに移動します。
cd $HOME/bin
次のコマンドを実行して、in.intel.lj という名前のサンプルファイルを作成します。
vim in.intel.lj
例:
# 3d Lennard-Jones melt // 3 次元レナードジョーンズ・メルト variable x index 1 variable y index 1 variable z index 1 variable xx equal 20*$x variable yy equal 20*$y variable zz equal 20*$z units lj atom_style atomic lattice fcc 0.8442 region box block 0 ${xx} 0 ${yy} 0 ${zz} create_box 1 box create_atoms 1 box mass 1 1.0 velocity all create 1.44 87287 loop geom pair_style lj/cut 2.5 pair_coeff 1 1 1.0 1.0 2.5 neighbor 0.3 bin neigh_modify delay 0 every 20 check no fix 1 all nve dump 1 all xyz 100 sample.xyz run 10000
次のコマンドを実行して、test.pbs という名前のテストスクリプトを作成します。
vim test.pbs
テストスクリプト:
// LAMMPS を実行します#!/bin/bash # PBS -N testLmp # ジョブの名前を入力します。 # PBS -l nodes=2:ppn=2 # スケジューラから 2 つの計算ノードを申請します。各計算ノードは 2 つのプロセスを使用してジョブを実行します。 export I_MPI_HYDRA_BOOTSTRAP=ssh cd $PBS_O_WORKDIR mpirun ./lmp_intel_cpu_intelmpi -in ./in.intel.lj
次のコマンドを実行して、ジョブを送信します。
qsub test.pbs
次のコマンド出力が返されます。これは、生成されたジョブ ID が 0.scheduler であることを示しています。
0.scheduler
手順 4:ジョブの結果を表示する
次のコマンドを実行して、ジョブのステータスを表示します。
qstat -x 0.scheduler
次のコマンド出力が返されます。
S
の値がF
の場合、ジョブは完了です。Job id Name User Time Use S Queue ---------------- ---------------- ---------------- -------- - ----- 0.scheduler test.pbs test 00:00:00 F workq
次のコマンドを実行して、ジョブのログをクエリします。
cat log.lammps
次のコマンド出力に類似したレスポンスが返されます。
... Per MPI rank memory allocation (min/avg/max) = 11.75 | 11.75 | 11.75 Mbytes // MPI ランクごとのメモリ割り当て(最小/平均/最大) Step Temp E_pair E_mol TotEng Press // ステップ、温度、ペアエネルギー、分子エネルギー、総エネルギー、圧力 0 1.44 -6.7733681 0 -4.6134356 -5.0197073 10000 0.69579461 -5.6648333 0 -4.621174 0.7601771 Loop time of 108.622 on 4 procs for 10000 steps with 32000 atoms // 4 つのプロセスで 32000 原子に対して 10000 ステップのループ時間 Performance: 39770.920 tau/day, 92.062 timesteps/s // パフォーマンス:1 日あたり 39770.920 タウ、1 秒あたり 92.062 タイムステップ 97.0% CPU use with 2 MPI tasks x 2 OpenMP threads // 2 つの MPI タスク x 2 つの OpenMP スレッドで 97.0% の CPU 使用率 MPI task timing breakdown: // MPI タスクタイミングの内訳 Section | min time | avg time | max time |%varavg| %total // セクション、最小時間、平均時間、最大時間、平均分散、合計 --------------------------------------------------------------- Pair | 85.42 | 85.632 | 85.844 | 2.3 | 78.83 // ペア Neigh | 13.523 | 13.564 | 13.604 | 1.1 | 12.49 // 近傍 Comm | 4.4182 | 4.5452 | 4.6722 | 6.0 | 4.18 // 通信 Output | 2.1572 | 2.1683 | 2.1793 | 0.7 | 2.00 // 出力 Modify | 2.1047 | 2.1398 | 2.175 | 2.4 | 1.97 // 変更 Other | | 0.5734 | | | 0.53 // その他 Nlocal: 16000 ave 16007 max 15993 min // ローカル Histogram: 1 0 0 0 0 0 0 0 0 1 Nghost: 13030 ave 13047 max 13013 min // ゴースト Histogram: 1 0 0 0 0 0 0 0 0 1 Neighs: 600054 ave 604542 max 595567 min // 近傍 Histogram: 1 0 0 0 0 0 0 0 0 1 Total # of neighbors = 1200109 // 近傍の総数 Ave neighs/atom = 37.503406 // 原子あたりの平均近傍数 Neighbor list builds = 500 // 近傍リストの構築 Dangerous builds not checked // 危険なビルドはチェックされませんでした。 Total wall time: 0:01:48 // 総経過時間