全部產品
Search
文件中心

Elastic High Performance Computing:使用Intel oneAPI編譯運行LAMMPS

更新時間:Jul 06, 2024

E-HPC叢集整合了Intel oneAPI工具包,該工具包結合HPC軟體使用,可以加快構建跨架構應用程式。本文以LAMMPS軟體為例,為您示範如何在E-HPC叢集下使用Intel oneAPI編譯並運行LAMMPS。

背景資訊

Intel oneAPI是一種開放的、標準的統一編程模型。Intel oneAPI工具包為Intel CPU和FPGA等異構平台提供構建部署應用程式和解決方案所需的工具,包括用於高效能異構計算的最佳化編譯器、庫、架構和分析工具,可以簡化編程,協助開發人員提高生產力。

LAMMPS是一款經典分子動力學軟體,用於類比液態、固態或氣態的粒子集合。在類比原子、分子計算中並行效率高,廣泛應用於材料、物理、化學等類比情境。

使用Intel oneAPI編譯運行LAMMPS,可以加快構建應用程式,提升應用效能。

準備工作

  1. 建立E-HPC叢集。具體操作,請參見使用嚮導建立叢集

    配置叢集時,本文使用的軟硬體參數配置樣本如下:

    參數

    說明

    硬體參數

    部署方式為標準,包含2個管控節點,1個計算節點和1個登入節點,均採用ecs.c7.large執行個體規格,配置為2 vCPU,4 GiB記憶體,Ice Lake處理器,2.7 GHz。

    軟體參數

    鏡像選擇CentOS 7.6公用鏡像,調度器選擇pbs。

  2. 建立叢集使用者。具體操作,請參見系統管理使用者

    叢集使用者用於登入叢集,進行編譯軟體、提交作業等操作,配置使用者權限時,許可權組請選擇sudo許可權組

  3. 安裝oneAPI工具包。具體操作,請參見安裝與卸載軟體

    需安裝的軟體如下:

    • intel-oneapi-mkl,版本為2022.1.2。

    • intel-oneapi-mpi,版本為2022.1.2。

    • intel-oneapi-hpckit,版本為2022.1.2。

步驟一:串連叢集

選擇以下一種方式串連叢集:

  • 通過用戶端

    該方式僅支援使用PBS調度器的叢集。操作前,請確保您已下載安裝E-HPC用戶端,且已配置用戶端所需環境。具體操作,請參見配置用戶端所需環境

    1. 開啟並登入E-HPC用戶端。

    2. 在用戶端左側導覽列,單擊會話管理

    3. 會話管理頁面的右上方,單擊terminal,開啟Terminal視窗。

  • 通過控制台

    1. 登入彈性高效能運算控制台

    2. 在頂部功能表列左上方處,選擇地區。

    3. 在左側導覽列,單擊叢集

    4. 叢集頁面,找到目的地組群,單擊遠端連線

    5. 遠端連線頁面,輸入集群使用者名稱、登入密碼和連接埠,單擊ssh串連

步驟二:編譯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

步驟三:運行LAMMPS

  1. 切換到lmp_intel_cpu_intelmpi所在bin目錄。

    cd $HOME/bin
  2. 執行以下命令建立算例檔案,算例檔案命名為in.intel.lj。

    vim in.intel.lj

    內容樣本如下:

    # 3d Lennard-Jones melt
    
    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個計算節點,每個計算節點使用兩個進程運行該作業 
    export I_MPI_HYDRA_BOOTSTRAP=ssh
    cd $PBS_O_WORKDIR 
    mpirun ./lmp_intel_cpu_intelmpi -in ./in.intel.lj
  4. 執行以下命令,提交作業。

    qsub test.pbs

    預期返回如下,表示產生的作業ID為0.scheduler。

    0.scheduler

步驟四:查看結果

  1. 執行以下命令,查看作業狀態。

    qstat -x 0.scheduler

    預期返回如下,當返回資訊中SF時,表示作業已經運行結束。

    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
       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
    
    Performance: 39770.920 tau/day, 92.062 timesteps/s
    97.0% CPU use with 2 MPI tasks x 2 OpenMP threads
    
    MPI task timing breakdown:
    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