跳到主要内容

DP-GEN init

本教程基于 Bohrium 演示如何进行DP-GEN init。

推荐

Bohrium 帮助文档|DP-GEN init」是 Notebook 版帮助文档,可直接运行,请点击查看。

init有三个子命令,init_bulk,init_surf与init_reaction

  • init_bulk : Generating initial data for bulk systems.
  1. Relax in folder 00.place_ele
  2. Perturb and scale in folder 01.scale_pert
  3. Run a short AIMD in folder 02.md
  4. Collect data in folder 02.md.
  • init_surf : Generating initial data for surface systems.
  1. Build specific surface in folder 00.place_ele
  2. Pertub and scale in folder 01.scale_pert
  • init_reaction : Generating initial data for reactive systems.
  1. Exploring: LAMMPS
  2. Sampling: MDDatasetBuilder
  3. Labeling: Gaussian

介绍与参数说明详见DP-GEN's doc

这里以Li-Si晶体结构为例,详细讲解init_bulk的用法。

步骤1:准备输入文件

输入文件清单

  • INCAR文件: INCAR_md INCAR_rlx
  • POTCAR(每个元素指定一个文件)
  • POSCAR (不一定需要)
  • param.json
  • machine.json

关于INCAR

在init需要两个INCAR文件,分别是INCAR_md, INCAR_rlx,分别对应原子弛豫,分子动力学计算两种任务类型。

本例中INCAR文件如下:

INCAR_rlx
#Parameters
SYSTEM = dpgen_rlx
PREC = A
ISTART = 0
ICHARG = 2
#Electronic Relaxation
ENCUT = 650
NELM = 100
NELMIN = 6
NELMDL = -5
EDIFF = 1e-06
LREAL = .False.
ALGO = Fast # or Normal
#Ionic Relaxation
IBRION = 2
POTIM = 0.2
ISIF = 3
EDIFFG = -0.01
ISYM = 0
NSW = 100
ISMEAR = 0
SIGMA = 0.1
# Write flags
LWAVE = .False.
LCHARG = .False.
KSPACING = 0.16
KGAMMA = .False.
#KPAR = 1
#NPAR = 1
PSTRESS = 0.0
NCORE = 4

INCAR_md

#Parameters
SYSTEM = dpgen_md
PREC = A
ISTART = 0
ICHARG = 2
#Electronic Relaxation
ENCUT = 650
NELM = 100
NELMIN = 6
NELMDL = -5
EDIFF = 1e-06
LREAL = False
ALGO = Fast # or normal
#Ionic relaxation
IBRION = 0
ISIF = 2
#EDIFFG = -0.01 in
ISYM = 0
NSW = 10
ISMEAR = 0
SIGMA = 0.1
# MD related
SMASS = 0
POTIM = 2
TEBEG = 100
TEEND = 100
NBLOCK = 1
KBLOCK = 100
# Write flags
LWAVE = False
LCHARG = False
#parallel related
#KPAR = 4
#NPAR = 1
KSPACING = 0.16
KGAMMA = False
PSTRESS = 0.0
NCORE = 4

关于param.json和machine.json

param.jsonmachine.json是dpgen运行的关键参数文件。param.json是告诉dpgen这个计算任务是什么样的,而machine.json是告诉dpgen你在一个什么样的环境,用着什么机器在计算。

本例param.json

{
"stages" : [1,2,3,4],
"elements": ["Li","Si"],
"cell_type": "diamond",
"latt": 10.0,
"super_cell": [1, 1, 1],
"potcars": ["..../POTCAR_Li","..../POTCAR_Si"],
"relax_incar": "./INCAR_rlx",
"md_incar" : "./INCAR_md",
"skip_relax": false,
"scale": [0.990,1.00,1.01],
"pert_numb": 10,
"pert_box": 0.03,
"pert_atom": 0.01,
"md_nstep" : 10,
"coll_ndata": 5000,
"type_map" : ["Li","Si"],
"_comment": "that's all"
}

说明:

  1. 检查路径 请检查"potcars""relax_incar""md_incar"要改为用户指定的文件的路径(绝对路径或相对路径)。
  2. 指定构象 如果想用POSCAR来做init步骤,需要添加两个参数来指定POSCAR文件
    "from_poscar": true,
    "from_poscar_path": "<your-POSCAR>",

而在本例的参数文件中,用"cell_type""latt"参数说明构象类型,自动生成 diamond类型的LiSi合金。DP-GEN 0.10.6及以上的版本支持的"cell_type""hcp""fcc""diamond""sc""bcc",请根据具体需要或文献中的说明选择构象。

  1. 指定步骤 相比于dpgen run中用record.dpgen记录步骤,init并没有这一文件。指定步骤的方式是在dpgen.log中查看目前哪一步骤,用"stages"参数指定开始到结束步骤。init_bulk有[1, 2, 3, 4]四个步骤,init_surf有[1, 2]两个步骤。比如init_bulk中,成功进行了弛豫,但在第二步做扰动的时候报错了,就可以把"stages"设为[2, 3, 4],从第二步开始跑。

machine.json:

{
"api_version": "1.0",
"deepmd_version": "2.1.0",
"train" :[
{
"command": "dp",
"machine": {
"batch_type": "Lebesgue",
"context_type": "LebesgueContext",
"local_root" : "./",
"remote_profile":{
"email": "",
"password": "",
"program_id": ,
"keep_backup":true,
"input_data":{
"job_type": "indicate",
"log_file": "00*/train.log",
"grouped":true,
"job_name": "dpgen_train_job",
"disk_size": 100,
"scass_type":"c4_m15_1 * NVIDIA T4",
"checkpoint_files":["00*/checkpoint","00*/model.ckpt*"],
"checkpoint_time":30,
"platform": "ali",
"job_type": "container",
"image_name": "registry.dp.tech/dptech/deepmd-kit:2.1.5-cuda11.6" , # 此处填写DeePkit镜像名
"on_demand":0
}
}
},
"resources": {
"number_node": 1,
"cpu_per_node": 4,
"gpu_per_node": 1,
"queue_name": "T4_4_15",
"group_size": 1
}
}
],
"model_devi":
[{
"command": "lmp -i input.lammps -v restart 0",
"machine": {
"batch_type": "Lebesgue",
"context_type": "LebesgueContext",
"local_root" : "./",
"remote_profile":{
"email": "",
"password": "",
"program_id": ,
"keep_backup":true,
"input_data":{
"job_type": "indicate",
"log_file": "*/model_devi.log",
"grouped":true,
"job_name": "dpgen_model_devi_job",
"disk_size": 200,
"scass_type":"c4_m15_1 * NVIDIA T4",
"platform": "ali",
"job_type": "container",
"image_name": "registry.dp.tech/dptech/deepmd-kit:2.1.5-cuda11.6" , # 此处填写Deepkit镜像名,lammps已接入
"on_demand":0
}
}
},
"resources": {
"number_node": 1,
"cpu_per_node": 4,
"gpu_per_node": 1,
"queue_name": "T4_4_15",
"group_size": 50
}
}
],
"fp":
[{
"command": "limit -m unlimited; ulimit -s unlimited; mpirun vasp_std",
"machine": {
"batch_type": "Lebesgue",
"context_type": "LebesgueContext",
"local_root" : "./",
"remote_profile":{
"email": "",
"password": "",
"program_id": ,
"input_data":{
"api_version":2,
"job_type": "indicate",
"log_file": "task*/fp.log",
"grouped":true,
"job_name": "dpgen_fp_job",
"disk_size": 100,
"scass_type":"c16_m32_cpu",
"platform": "ali",
"job_type": "container",
"image_name":"# 此处填写VASP镜像名",
"on_demand":0
}
}
},
"resources": {
"number_node": 1,
"cpu_per_node": 16,
"gpu_per_node": 0,
"queue_name": "CPU",
"group_size": 50,
"source_list": ["/opt/intel/oneapi/setvars.sh"]
}
}
]
}

说明:

  1. 镜像

在本次示例中我们指定了训练部分使用LBG_DeePMD-kit_2.0.1_v1,探索部分使用LBG_DeePMD-kit_2.0.1_v1镜像(该镜像中也包含了与DeePMD-kit结合的LAMMPS程序),标记部分使用了 VASP镜像(如需使用VASP镜像,请提供您的VASP授权凭证至 bohrium@dp.tech 邮箱)。

假如您希望更换计算镜像,可通过machine.json文件中的image_name指定,如希望使用DeePMD-kit 2.1.3版本,只需要将镜像名更改为 LBG_DeePMD-kit_2.1.3_v1 。镜像名可在“镜像中心”页面查看。

  1. 请注意检查fp的"command"部分,以及"resouce"下的"source_list"。如果出现软件调用权限方面的报错,很可能与这两个参数有关。

准备完成,文件夹目录如下

$ ls
INCAR_md INCAR_rlx INCAR_scf POTCAR_Li machine.json param.json POTCAR_Si

步骤 2:DP-GEN init

在放有准备文件的文件夹目录下运行

nohup dpgen init_bulk param.json machine.json 1>log 2>err&

打开 Bohrium-任务管理 你可以看到刚刚成功提交的任务。init_bulk会做两次fp步骤,分别是弛豫与分子动力学模拟。

任务完成后,检查目录:

看目录结构使用tree命令,需要apt install tree安装tree,然后在文件目录下用tree命令即可看到树状图

.
├── dpdispatcher.log
├── dpgen.log
├── err
├── INCAR_md
├── INCAR_rlx
├── INCAR_scf
├── lisi.diamond.01x01x01
│ ├── 00.place_ele
│ │ ├── 备份文件等
│ │ ├── INCAR
│ │ ├── POSCAR
│ │ ├── POSCAR.unit
│ │ ├── POTCAR
│ │ ├── run_1659588706.sh
│ │ ├── run_1659589787.sh
│ │ ├── run_1659590393.sh
│ │ ├── sys-0001-0001
│ │ │ ├── 806905fcd0a0ce5b7a072c7ce7e3c1dcfd497471_task_tag_finished
│ │ │ ├── CHG
│ │ │ ├── CHGCAR
│ │ │ ├── CONTCAR
│ │ │ ├── DOSCAR
│ │ │ ├── EIGENVAL
│ │ │ ├── fp.log
│ │ │ ├── IBZKPT
│ │ │ ├── INCAR -> ../INCAR
│ │ │ ├── OSZICAR
│ │ │ ├── OUTCAR
│ │ │ ├── PCDAT
│ │ │ ├── POSCAR
│ │ │ ├── POTCAR -> ../POTCAR
│ │ │ ├── REPORT
│ │ │ ├── vasprun.xml
│ │ │ ├── WAVECAR
│ │ │ └── XDATCAR
│ │ └── tmp_log
│ ├── 01.scale_pert
│ │ └── sys-0001-0001
│ │ └── scale-1.000
│ │ ├── 000000
│ │ │ └── POSCAR
│ │ ├── 000001
│ │ │ └── POSCAR
│ │ ├── 000002
│ │ │ └── POSCAR
│ │ ├── 000003
│ │ │ └── POSCAR
│ │ ├── 000004
│ │ │ └── POSCAR
│ │ └── POSCAR
│ ├── 02.md
│ │ ├── 备份文件等
│ │ ├── INCAR
│ │ ├── POTCAR
│ │ ├── run_1659604259.sh
│ │ ├── sys-0001-0001
│ │ │ ├── deepmd
│ │ │ │ ├── box.raw
│ │ │ │ ├── coord.raw
│ │ │ │ ├── energy.raw
│ │ │ │ ├── force.raw
│ │ │ │ ├── set.000
│ │ │ │ │ ├── box.npy
│ │ │ │ │ ├── coord.npy
│ │ │ │ │ ├── energy.npy
│ │ │ │ │ ├── force.npy
│ │ │ │ │ └── virial.npy
│ │ │ │ ├── type_map.raw
│ │ │ │ ├── type.raw
│ │ │ │ └── virial.raw
│ │ │ └── scale-1.000
│ │ │ ├── 000000
│ │ │ │ ├── 00af13e72478f19ea730f67a982bb9c29dcd0c04_task_tag_finished
│ │ │ │ ├── CHG
│ │ │ │ ├── CHGCAR
│ │ │ │ ├── CONTCAR
│ │ │ │ ├── DOSCAR
│ │ │ │ ├── EIGENVAL
│ │ │ │ ├── fp.log
│ │ │ │ ├── IBZKPT
│ │ │ │ ├── INCAR -> ../../../INCAR
│ │ │ │ ├── OSZICAR
│ │ │ │ ├── OUTCAR
│ │ │ │ ├── PCDAT
│ │ │ │ ├── POSCAR
│ │ │ │ ├── POTCAR -> ../../../POTCAR
│ │ │ │ ├── REPORT
│ │ │ │ ├── vasprun.xml
│ │ │ │ ├── WAVECAR
│ │ │ │ └── XDATCAR
│ │ │ ├── 000001
│ │ │ │ └── ...
│ │ │ ├── 000002
│ │ │ │ └── ...
│ │ │ ├── 000003
│ │ │ │ └── ...
│ │ │ └── 000004
│ │ │ └── ...
│ │ └── tmp_log
│ └── param.json
├── log
├── machine.json
├── param.json
├── POTCAR_Li
└── POTCAR_Si

步骤3:监测任务状态与运行结果

监测任务状态参考监控任务

运行结果获取参考DP-GEN结果获取

至此,通过DPGEN init_bulk过程获取了DP训练所需的数据数据集,下一步就可以运行DPGEN run,进行iteration,探索整个势能面的样本空间。