在LAMMPS中使用CHGNet

0.前言

CHGNet是一种基于图神经网络的机器学习原子势,近期发表于Nature Machine Intelligence volume 5, pages1031–1041 (2023)。笔者注意到近期有开发者已经完成了CHGNet的LAMMPS接口(https://github.com/CederGroupHub/chgnet/issues/57)。但目前网络上还没有相关的使用教程,因此在此记录一下笔者编译以及测试的过程。

此教程也可用于M3GNet和MatGL接口的使用。

1.安装并配置Anaconda

由于CHGNet使用Python实现,因此需要先确保服务器配置了Python环境,如果没有安装推荐安装Anaconda(官方文档:https://docs.anaconda.com/free/anaconda/install/linux/)来配置Python环境。并需要确保已经安装了chgnet,可以使用下面的命令进行安装。

pip install chgnet

2.获取源代码

实现了CHGNet接口的LAMMPS程序源码可以在Github上获取到(https://github.com/advancesoftcorp/lammps)。提供了2Aug2023和2Aug2023两个版本可供选择,下载源码并解压。Lammps提供了基于CMake和make的两种编译方式,本文使用make进行编译。

3.修改Makefile

进入下载好的源代码的./src/MAKE目录,找到Makefile文件。由于CHGNet接口仅支持调用GPU和OpenMP,而不支持MPI并行,因此本文以编译串行(Serial)版本为例,也就是修改Makefile.serial。共有三处需要修改。

(1)修改CCFLAGS和LINKFLAGS(如果需要使用OpenMP)

根据官网文档(https://docs.lammps.org/Build_extras.html#openmp),使用OpenMP需要修改compiler/linker settings部分的下面两行,加入-fopenmp参数。

CCFLAGS = -g -O3 -std=c++11 -fopenmp
LINKFLAGS = -g -O -std=c++11 -fopenmp

如果使用Intel编译器,则需要将CCFLAGS替换成-qopenmp -restrict,LINKFLAGS替换成-qopenmp。

(2)加入Python相关的includes和library变量

在Makefile的build rules and dependencies之前的位置加入下列内容,your_path/anaconda3需要替换成本地实际的Python路径,python3.x需要替换成实际的python版本号,如python3.11,如果不确定可以通过find命令进行查找。这里需要注意如果服务器上有多个Python环境,务必使用安装了chgnet的环境的路径进行添加

# Python library and includes (for conda)
PYTHON_INC = -I/your_path/anaconda3/include/python3.x
PYTHON_LIB = -L/your_path/anaconda3/lib -lpython3.x

(3)修改EXTRA_INC和EXTRA_LIB,加入Python的相关变量

这两行位于build rules and dependencies部分,分别加入$(PYTHON_INC)和$(PYTHON_LIB)。

EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PYTHON_INC) $(PKG_SYSINC)
EXTRA_LIB = $(PKG_LIB) $(MPI_LIB) $(FFT_LIB) $(JPG_LIB) $(PYTHON_LIB) $(PKG_SYSLIB) $(DYN_LIB)

修改好Makefile后,我们就可以回到./src目录,开始正式的编译安装了。

4.编译安装

LAMMPS在编译时,如果需要编译额外的可选包,需要使用如下的命令,name需要替换成实际的包名(https://docs.lammps.org/Build_extras.html):

make yes-name

同理也可以使用make no-name删除某个可选包。

在这里,我们需要加入CHGNet和OpenMP(可选),即

make yes-OPENMP
make yes-ML-CHGNET

之后进行正式编译,将-jN中的N替换为编译实际使用的核数。

make serial -jN

这里特别提醒,如果之前编译过其他版本,需要使用下面的命令进行清理再重新进行编译。

make clean-all

完成编译后,如果没有报错,src目录下应该出现了名为lmp_serial的二进制文件,即为我们编译的LAMMPS程序了。可以复制到其他目录,配置环境变量,以方便使用。

5.运行测试

在./examples/CHGNET,我们可以看到开发者提供的输入样例inp.lammps,其中pair_style和pair_coeff格式如下:

pair_style chgnet ../../potentials/CHGNET 
#pair_style chgnet/d3 ../../potentials/CHGNET 
#pair_style chgnet/gpu ../../potentials/CHGNET 
#pair_style chgnet/d3/gpu ../../potentials/CHGNET
# 使用MPtrj预训练模型
pair_coeff    * *  MPtrj-efsm  Zr O
# 使用自己的pt模型
pair_coeff    * *  path ./users_model.pt  Zr O

使用命令env OMP_NUM_THREADS=N lmp_serial -sf omp -in inp.lammps,我们可以使用N个OpenMP threads来执行任务。OpenMP的使用细节可以参考官方文档:https://docs.lammps.org/Speed_omp.html。

此外,需要注意的是,如果要在集群的作业系统上提交,我们还需要在作业脚本中加入LD_LIBRARY_PATH环境变量,与Makefile中的修改类似,将/your_path/anaconda3改成实际的Python目录:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your_path/anaconda3/lib

6.常见问题

(1)LAMMPS运行时警告:WARNING: OpenMp support not enabled during compilation: using 1 thread only.

检查Makefile是否有加入-fopenmp,以及是否有启用make yes-OPENMP。

(2)LAMMPS运行时报错:ERROR: Cannot initialize python for pair_coeff of CHGNet

说明CHGNet的Python环境未正确配置,需要调整Python环境。

“在LAMMPS中使用CHGNet”的6个回复

  1. LAMMPS运行时报错:ERROR: Cannot initialize python for pair_coeff of CHGNet
    您好,我正好在尝试用这个包,遇到了这个报错,不知道该如何调整环境呢?在计算化学公社也看到了您的经验贴留言了,我刚入门且对代码一知半解,望您不吝赐教

    1. 你好,可能是本地python环境的问题。你本地的Python环境是否已经安装了CHGNet这个库,可以先试试直接跑官方的Python示例?以及如果你本地有多个Python环境的话,可能需要检查下是否Lammps正确调用了这个环境。

      1. 我本地确实有多个python环境,但不知道如何清理删除,pycharm因此也经常出问题,您能给出个解决方案吗?以及如何检查lammps调用的是哪个环境呢?我尝试过把chgnet包放在lammps运行文件夹下,但仍然不行。盼复,谢!

        1. 我建议考虑使用Anaconda来管理和配置环境,并且开发和运行程序都尽量只使用Anaconda中的Python环境。在PyCharm中也可以直接配置Anaconda的环境作为项目的Python解释器,这样既方便又能保证开发环境的一致性。

          Lammps调用的Python环境跟你所修改的Makefile有关。如果使用的是Linux系统,在使用pip安装CHGNET之前,可以使用which pip和which python命令来确认当前活跃的Python环境路径。在修改LAMMPS的Makefile时,也请确保PYTHON_INC和PYTHON_LIB所指向的路径与which python命令确定的Python环境路径一致。把CHGNet放在Lammps目录下是没有作用的,因为它是通过chgnet_driver.py直接import的CHGNet,所以只要跟你编译时指定的环境有关。编译好的Lammps二进制文件也可以通过Linux系统的ldd命令检查所链接到的Python。

          以及可以先试试跑一下CHGNet官方的NoteBook(https://github.com/CederGroupHub/chgnet/blob/main/examples/basics.ipynb),确保CHGNet正确安装并且可以使用。

          1. 感谢回复!昨日我已经将多个系统卸载并重新安装了anaconda,另外我的是windows系统,可以按照您此篇教程去编译lammps和配置环境吗?

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据