すべてのプロダクト
Search
ドキュメントセンター

Elastic High Performance Computing:Intel oneAPI を使用した LAMMPS のコンパイルと実行

最終更新日:Jan 11, 2025

エラスティックハイパフォーマンスコンピューティング(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 をコンパイルおよび実行すると、アプリケーションを迅速に構築し、アプリケーションのパフォーマンスを向上させることができます。

準備

  1. 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 スケジューラをデプロイします。

  2. クラスターユーザーを作成します。詳細については、「ユーザーを管理する」をご参照ください。

    ユーザーは、クラスターへのログオン、LAMMPS のコンパイル、およびジョブの送信に使用されます。[sudo 権限] をユーザーに付与します。

  3. 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 クライアントの環境をデプロイする」をご参照ください。

    1. E-HPC クライアントを起動してログオンします。

    2. 左側のナビゲーションペインで、[セッション管理] をクリックします。

    3. [セッション管理] ページの右上隅にある [ターミナル] をクリックして、ターミナルウィンドウを開きます。

  • E-HPC コンソールを使用してクラスターにログオンする

    1. E-HPC コンソール にログオンします。

    2. 上部ナビゲーションバーの左上隅で、リージョンを選択します。

    3. 左側のナビゲーションペインで、[クラスター] をクリックします。

    4. [クラスター] ページで、クラスターを見つけて [接続] をクリックします。

    5. [接続] パネルで、ユーザー名とパスワードを入力し、[SSH 経由で接続] をクリックします。

手順 2:LAMMPS をコンパイルする

  1. 最新の LAMMPS ソースコードをダウンロードします。

    1. 次のコマンドを実行して、GitHub から LAMMPS ソースコードをダウンロードします。

      説明

      クラスターに git がインストールされていない場合は、sudo yum install -y git コマンドを実行して git をインストールします。

      git clone -b release https://github.com/lammps/lammps.git mylammps
    2. 次のコマンドを実行して、LAMMPS ソースコードのファイルを表示します。

      ls -al

      次のコマンド出力が返されます。

      ...
      drwxr-xr-x 15 test users 4096 May 31 16:39 mylammps
      ...
  2. oneAPI モジュールを読み込みます。

    1. 次のコマンドを実行して、環境変数を $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
      // 環境変数を設定します
    2. 次のコマンドを実行して、$HOME/.bashrc ファイルを更新します。

      source $HOME/.bashrc
  3. LAMMPS をコンパイルします。

    1. 次のコマンドを実行して、コンパイルに 2 つのプロセスを使用します。

      cd $HOME/mylammps/src
      make -j 2 intel_cpu_intelmpi
    2. 次のコマンドを実行して、現在のファイルパスに生成された LAMMPS 実行可能ファイルを表示します。

      ll lmp_intel_cpu_intelmpi

      次のコマンド出力に類似したレスポンスが返されます。

      -rwxr-xr-x 1 test users 9041824 May 31 16:48 lmp_intel_cpu_intelmpi
  4. LAMMPS 実行可能ファイルを共有コマンドとして構成します。

    mkdir -p $HOME/bin
    mv $HOME/mylammps/src/lmp_intel_cpu_intelmpi  $HOME/bin

手順 3:LAMMPS を実行する

  1. 次のコマンドを実行して、lmp_intel_cpu_intelmpi ファイルがある bin ディレクトリに移動します。

    cd $HOME/bin
  2. 次のコマンドを実行して、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
  3. 次のコマンドを実行して、test.pbs という名前のテストスクリプトを作成します。

    vim test.pbs

    テストスクリプト:

    #!/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
    // LAMMPS を実行します
  4. 次のコマンドを実行して、ジョブを送信します。

    qsub test.pbs

    次のコマンド出力が返されます。これは、生成されたジョブ ID が 0.scheduler であることを示しています。

    0.scheduler

手順 4:ジョブの結果を表示する

  1. 次のコマンドを実行して、ジョブのステータスを表示します。

    qstat -x 0.scheduler

    次のコマンド出力が返されます。S の値が F の場合、ジョブは完了です。

    Job id            Name             User              Time Use S Queue
    ----------------  ---------------- ----------------  -------- - -----
    0.scheduler       test.pbs         test              00:00:00 F workq
  2. 次のコマンドを実行して、ジョブのログをクエリします。

    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 // 総経過時間