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.
- Relax in folder 00.place_ele
- Perturb and scale in folder 01.scale_pert
- Run a short AIMD in folder 02.md
- Collect data in folder 02.md.
- init_surf : Generating initial data for surface systems.
- Build specific surface in folder 00.place_ele
- Pertub and scale in folder 01.scale_pert
- init_reaction : Generating initial data for reactive systems.
- Exploring: LAMMPS
- Sampling: MDDatasetBuilder
- 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.json
和machine.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"
}
说明:
- 检查路径
请检查
"potcars"
、"relax_incar"
、"md_incar"
要改为用户指定的文件的路径(绝对路径或相对路径)。 - 指定构象
如果想用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"
,请根据具体需要或文献中的说明选择构象。
- 指定步骤 相比于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_address": "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_address": "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_address":"# 此处填写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"]
}
}
]
}
说明:
- 镜像
在本次示例中我们指定了训练部分使用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_address指定,如希望使用DeePMD-kit 2.2.1版本,只需要将镜像地址更改为 registry.dp.tech/dptech/deepmd-kit:2.2.1-cuda11.6 。镜像地址可在“镜像中心”页面查看。
- 请注意检查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:监测任务状态与运行结果
监测任务状态参考监控任务。
至此,通过DPGEN init_bulk过程获取了DP训练所需的数据数据集,下一步就可以运行DPGEN run,进行iteration,探索整个势能面的样本空间。