在甲骨文 ARM 实例上编译安装 GAMESS

前段时间甲骨文云即 Oracle Cloud Infrastructure 推出了 Ampere A1 计算实例,使用的是由甲骨文投资的 Ampere 公司所研发的 Ampere Altra 处理器,本文将介绍如何在甲骨文 ARM 实例上编译安装计算化学软件包 GAMESS。

甲骨文新推出的 Ampere A1 计算实例使用了 Ampere Altra 处理器,该处理器基于台积电 7nm 工艺制造并可以提供 80 个以 3.0GHz 运行的 ARMv8.2+ 核心,每个核心配有独立的 128KB L1 Cache 与 1MB L2 Cache。甲骨文宣称该平台相比传统的 x86-64 平台的主要优势在于较高的性价比,灵活的计算资源搭配,线性的可预测性能。甲骨文也将 Ampere A1 计算实例纳入到了 Always Free 服务中,为所有甲骨文云用户提供每个月总计 3K OCPU-hrs 以及 18K GB-hrs 的免费计算资源,换算过来便是每个月 4 核心 24GB 内存的总计算资源。

在常规类型的任务例如编译中,Ampere A1 计算实例表现出了很高的单核性能水平,所以便想尝试使用该实例运行计算化学软件包。目前市面上支持在 ARM 平台上运行的计算化学软件包只有 GAMESS,全称 General Atomic and Molecular Electronic Structure System,由 Iowa State University 的 Gordon Research Group 维护。本次编译所使用的 GAMESS 源码版本为 2020 R2 Release,操作系统为 Debian 10,Fortran 编译器为 Gfortran,BLAS 数学库为 OpenBLAS。其他平台与环境下的编译安装方式也可以参考本文内容,操作基本大同小异。

由于在创建 Ampere A1 实例时甲骨文仅提供了修改过的系统镜像,所以最好先自己重装一个全新的系统。

执行如下指令将实例重装为 Debian 10:

bash <(wget --no-check-certificate -qO- https://raw.githubusercontent.com/bohanyang/debi/master/debi.sh) --cdn --bbr --timezone Asia/Shanghai --user root --password <password>

请修改 <password> 为你自己的 root 用户登录密码,关于该脚本的更多附加选项可访问脚本项目仓库查看。等待脚本运行完成并且没有报错后接着执行:

shutdown -r now

等待一段时间后重新连接服务器并开始编译安装 GAMESS,在此之前需要先在 GAMESS 官网上填写下载申请,由于我们需要的是用于在 ARM 平台上编译 GAMESS 的源码,所以请在申请表上勾选 “GAMESS version September 30, 2020 R2 for 64 bit ARM under Linux using GNU compilers” 选项。提交之后等待回复邮件,邮件中会给出访问下载页面所需的用户名和密码,用户名均为 source,而密码会每周变动,以编写本文的时间点(2021/6/20)为例,密码为 KDxkHntb,接下来开始正式编译安装 GAMESS。

更新软件列表并安装必要软件包:

apt update

apt install wget curl screen csh build-essential gfortran libopenblas-base libopenblas-dev

下载 GAMESS 源码,请将密码修改为当前时间点的访问密码,当然也可以直接前往邮件中给出的地址下载后手动上传到服务器上:

curl -k -O --user source:KDxkHntb https://www.msg.chem.iastate.edu/GAMESS/download/source/gamess-current.tar.gz

解压并进入目录:

tar -xvf gamess-current.tar.gz

cd gamess

进行编译文件配置:

./config

这一步会出现很多选项让你选择,按照屏幕上的文字提示输入即可,也可以参考以下回答:

please enter your target machine name: linux64

GAMESS directory? /root/gamess

GAMESS build directory? /root/gamess

Version? 00

Please enter your choice of FORTRAN: gfortran

Please enter only the first decimal place, such as 4.9: 8.3

Enter your choice of 'mkl' or 'atlas' or 'acml' or 'libflame' or 'openblas' or 'pgiblas' or 'armpl' or 'none': openblas

enter this full pathname: /usr/lib/aarch64-linux-gnu

communication library ('serial','sockets' or 'mpi' or 'mixed')? sockets

Optional: Build LibXC interface? no

Optional: Build Michigan State University CCT3 & CCSD3A methods? no

Do you want to try LIBCCHEM? no

进入 ddi 目录准备编译 ddi:

cd ddi

修改 compddi 文件,将文件的第 702 行修改为:

set ARCH='-mcpu=native'

开始编译 ddi:

./compddi

等待编译完成后,将编译出来的 ddikick.x 移动到 GAMESS 主目录:

cp ddikick.x ../ddikick.x

进入 GAMESS 主目录并开始编译主体:

cd ..

./compall

这一步会需要一些时间,等待编译完成后将所有编译好的文件链接起来:

./lked gamess 00

到目前为止 GAMESS 的主体编译已经完成,但要运行 GAMESS 还需要配置运行环境。

创建临时目录:

mkdir /root/gamess/scr

修改 GAMESS 程序变量,将 rungms 文件的第 64-66 行修改为:

set SCR=/root/gamess/scr

set USERSCR=/root/gamess/scr

set GMSPATH=/root/gamess

现在便可以运行自带的示例来检查 GAMESS 是否正常运行了:

./runall 00

指令默认使用单线程运行 GAMESS 自带的示例,输出文件位于 GAMESS 主目录下,等待所有示例运行完成后,检查结果是否正确:

./tests/standard/checktst

如果所有示例的检查结果都显示 Passed 则表明 GAMESS 已经可以正常运行。此时便可以删除目录中多余的文件,只需要留下 runall rungms gms-files.csh ddikick.x gamess.00.x 五个文件以及 auxdata tools scr 三个文件夹即可。

到此为止 GAMESS 编译安装完成。

在使用 GAMESS 进行计算的时候,不得不说速度很慢,主要还是由于 OpenBLAS 数学库并没有针对 ARM 平台进行很好的优化,跟 Intel MKL 数学库相比还是有很大的差距,再加上 GAMESS 本身已经算是昔日黄花了,比功能比不过 Gaussian,比计算速度比不上 ORCA,曾经 GAMESS 作为计算化学领域内小有名气的软件包到现在除了一些特殊的任务以外基本没人使用,也算得上是时代的眼泪了。

对于常规任务,甲骨文这次的 Ampere A1 计算实例的性能表现真的很抢眼,用过都说好。这段时间以来,不管是日本的 Fugaku 超级计算机还是苹果的 M1 芯片,都在向世人展现 ARM 架构的实力,虽然很多人依然觉得 ARM 架构在性能上永远落后于 x86-64 架构,但我个人对于 ARM 架构的发展还是充满了信心。目前 ARM 平台最大的缺点是生态圈落后于 x86-64 平台,许多大型软件仍然等待开发者进行适配优化,ARM 平台还需要很长的时间来发展。

上一篇
下一篇