前段时间,甲骨文云(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 平台还需要很长的时间来发展。