计算化学公社

 找回密码 Forget password
 注册 Register
Views: 2098|回复 Reply: 1
打印 Print 上一主题 Last thread 下一主题 Next thread

[Lammps] 在LAMMPS中使用CHGNet

[复制链接 Copy URL]

5

帖子

1

威望

493

eV
积分
518

Level 4 (黑子)

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 kotori 于 2023-10-17 22:13 编辑

本人水平有限,最近刚刚相关领域,如有任何疏漏,烦请各位老师批评指正!

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,可以使用下面的命令进行安装。
  1. 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参数。

  1. CCFLAGS = -g -O3 -std=c++11 -fopenmp
  2. 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的环境的路径进行添加
  1. # Python library and includes (for conda)
  2. PYTHON_INC = -I/your_path/anaconda3/include/python3.x
  3. PYTHON_LIB = -L/your_path/anaconda3/lib -lpython3.x
复制代码
(3)修改EXTRA_INC和EXTRA_LIB,加入Python的相关变量

这两行位于build rules and dependencies部分,分别加入$(PYTHON_INC)和$(PYTHON_LIB)。
  1. EXTRA_INC = $(LMP_INC) $(PKG_INC) $(MPI_INC) $(FFT_INC) $(JPG_INC) $(PYTHON_INC) $(PKG_SYSINC)
  2. 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):
  1. make yes-name
复制代码
同理也可以使用make no-name删除某个可选包。
在这里,我们需要加入CHGNet和OpenMP(可选),即
  1. make yes-OPENMP
  2. make yes-ML-CHGNET
复制代码
之后进行正式编译,将-jN中的N替换为编译实际使用的核数。
  1. make serial -jN
复制代码
这里特别提醒,如果之前编译过其他版本,需要使用下面的命令进行清理再重新进行编译。
  1. make clean-all
复制代码
完成编译后,如果没有报错,src目录下应该出现了名为lmp_serial的二进制文件,即为我们编译的LAMMPS程序了。可以复制到其他目录,配置环境变量,以方便使用。

5.运行测试
在./examples/CHGNET,我们可以看到开发者提供的输入样例inp.lammps,其中pair_style和pair_coeff格式如下:
  1. pair_style chgnet ../../potentials/CHGNET
  2. #pair_style chgnet/d3 ../../potentials/CHGNET
  3. #pair_style chgnet/gpu ../../potentials/CHGNET
  4. #pair_style chgnet/d3/gpu ../../potentials/CHGNET
复制代码
  1. # 使用MPtrj预训练模型
  2. pair_coeff    * *  MPtrj-efsm  Zr O
  3. # 使用自己的pt模型
  4. 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目录:
  1. 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环境。

评分 Rate

参与人数
Participants 2
威望 +1 eV +3 收起 理由
Reason
iota + 3 对问题能否展开一下呢?
sobereva + 1

查看全部评分 View all ratings

1

帖子

0

威望

33

eV
积分
34

Level 2 能力者

2#
发表于 Post on 2023-11-1 19:37:52 | 只看该作者 Only view this author
老师好,我发现如果要使用预训练模型,pair_coeff 不能写MPtrj-efsm,要写成0.2.0或0.3.0,不然会报错

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-24 03:51 , Processed in 0.199764 second(s), 28 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list