E-HPC集群集成了Intel oneAPI工具包,该工具包结合HPC软件使用,可以加快构建跨架构应用程序。本文以LAMMPS软件为例,为您演示如何在E-HPC集群下使用Intel oneAPI编译并运行LAMMPS。
背景信息
Intel oneAPI是一种开放的、标准的统一编程模型。Intel oneAPI工具包为Intel CPU和FPGA等异构平台提供构建部署应用程序和解决方案所需的工具,包括用于高性能异构计算的优化编译器、库、框架和分析工具,可以简化编程,帮助开发者提高生产力。
LAMMPS是一款经典分子动力学软件,用于模拟液态、固态或气态的粒子集合。在模拟原子、分子计算中并行效率高,广泛应用于材料、物理、化学等模拟场景。
使用Intel oneAPI编译运行LAMMPS,可以加快构建应用程序,提升应用性能。
准备工作
创建E-HPC集群。具体操作,请参见使用向导创建集群。
配置集群时,本文使用的软硬件参数配置示例如下:
参数
说明
硬件参数
部署方式为标准,包含2个管控节点,1个计算节点和1个登录节点,均采用ecs.c7.large实例规格,配置为2 vCPU,4 GiB内存,Ice Lake处理器,2.7 GHz。
软件参数
镜像选择CentOS 7.6公共镜像,调度器选择pbs。
创建集群用户。具体操作,请参见创建用户。
集群用户用于登录集群,进行编译软件、提交作业等操作,配置用户权限时,权限组请选择sudo权限组。
安装oneAPI工具包。具体操作,请参见安装软件。
需安装的软件如下:
intel-oneapi-mkl,版本为2022.1.2。
intel-oneapi-mpi,版本为2022.1.2。
intel-oneapi-hpckit,版本为2022.1.2。
步骤一:连接集群
选择以下一种方式连接集群:
通过客户端
该方式仅支持使用PBS调度器的集群。操作前,请确保您已下载安装E-HPC客户端,且已配置客户端所需环境。具体操作,请参见配置客户端所需环境。
打开并登录E-HPC客户端。
在客户端左侧导航栏,单击会话管理。
在会话管理页面的右上角,单击terminal,打开Terminal窗口。
通过控制台
登录弹性高性能计算控制台。
在顶部菜单栏左上角处,选择地域。
在左侧导航栏,单击集群。
在集群页面,找到目标集群,单击远程连接。
在远程连接页面,输入集群用户名、登录密码和端口,单击ssh连接。
步骤二:编译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
步骤三:运行LAMMPS
切换到lmp_intel_cpu_intelmpi所在bin目录。
cd $HOME/bin
执行以下命令创建算例文件,算例文件命名为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
执行以下命令编写测试脚本,脚本命名为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
执行以下命令,提交作业。
qsub test.pbs
预期返回如下,表示生成的作业ID为0.scheduler。
0.scheduler
步骤四:查看结果
执行以下命令,查看作业状态。
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 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