文档

使用Intel oneAPI编译运行LAMMPS

更新时间:

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

  • 本页导读 (1)