查看原文
其他

【教程】一文教你学透DP-GEN machine.json配置

刘锦程 梁文硕 深度势能 2022-09-11


- DP-GEN machine.json文件配置教学视频 -


本文将和大家一同配置DP-GEN中用于控制计算机器和资源的参数文件machine.json 。本文假设大家已经成功安装了DP-GEN及相关软件,如果对DP-GEN安装有问题,请看这个DP-GEN安装教程👉【教程·安装讲解】DeePMD-kit和DP-GEN安装教程视频


DP-GEN 是一个基于同步学习框架自动生成深度势能模型的软件平台,其典型的工作流程由数十次的“探索-标记-训练”的循环组成:

探索:使用一个精度较低的模型进行不同状态下的分子动力学或蒙特卡洛模拟以探索相空间

标记:接着在采样到的海量构型中挑选出少量当前的模型还预测不准的构型,进行第一性原理计算

训练:然后将这步的标记结果添加到数据集中再训练一组精度改善的深度势能模型

不断循环这三步,直到模型收敛到可以一致精确地描述我们关心的相空间区域。


如果这个过程中的计算任务通过手工执行,我们可能需要在数百个计算路径中逐一提交任务脚本,并不断检查任务状况直到该批任务全部结束,此时我们回收结果再提交下一批任务。这不仅极为繁重低效,并且容易出错。因此我们在DP-GEN中开发了任务分派器“Dispatcher”来帮助声明高性能计算作业、计算环境和计算资源,并自动完成作业生成、提交、轮询和回收的全流程,这便是配置machine.json的意义所在。


▲图一,DP-GEN的代码组成框架,Dispatcher负责将一批待计算的任务提交至计算机器(可以是个人工作站,也可以是Slurm集群,PBS集群,或是云计算资源),并实时监控任务状态,在任务完成时回收计算结果,进入到DP-GEN工作流的下一步骤。整个流程中毋需任何人为干预。


 Machine.json整体结构

我们可以通过图二来一览machine.json 文件的全貌。在软件迭代发展过程中,我们发现各个项目都涌现了对上述Dispatcher功能的系统性需求,因此便将该模块进一步开发并发布为一个开源软件包DPDispatcher,关于其详细介绍可以参考 https://mp.weixin.qq.com/s/4i-yOVcuUGHu5JSbOk4XPA。为了使用DPDispatcher的功能,我们需要指定关键词 api_version为 "1.0"。


在machine.json中,model_devi, fp, train 分别对应迭代中“探索”、“标注”、“训练”三个部分,每一部分需要配置 machine(指定计算机器信息), resources (指定需要的计算资源)和 command(指定计算命令) 三个参数。



▲图二,DP-GEN machine.json的结构


 案例教学:machine.json具体配置方法

下面我们以常见机器配置为例,给大家讲讲到底怎么进行machine.json的参数配置。正如前面所说,DP-GEN分成:探索、标记、训练三步,我们的例子教大家如何:在本地工作站执行训练任务,向本地Slurm集群执行探索任务,向远程PBS集群提交标记任务。


案例一:在本地工作站执行训练任务

"train": [ { "command": "dp", "machine": { "batch_type": "Shell", "context_type": "local", "local_root": "./", "remote_root": "/home/user1234/work_path" }, "resources": { "number_node": 1, "cpu_per_node": 4, "gpu_per_node": 1, "group_size": 1, "source_list": ["/home/user1234/deepmd.env"] } }  ],


在第一个例子中,我们尝试将train部分的任务跑在一台带GPU节点的工作站上,其中"dp" 是在DeePMD-kit训练任务中的指令。


在machine参数中,batch_type 指定了调度系统类型,如果我们的工作站上没有调度系统,那我们就只能通过"Shell"脚本来实现任务的计算。context_type 指定数据传输的方式,设置为"local"代表通过本地文件存储系统(如cp, mv等方式)拷贝和移动数据。在DP-GEN流程中,因为所有任务的路径都会由软件自动定位和设置,local_root 就一直设置为 "./" 。每个计算任务的输入文件会被传至remote_root 并在其中开始计算,因此我们需要确保该路径存在。


在resources参数中,number_node, cpu_per_node , gpu_per_node分别代表一个任务需要的节点数量、CPU数量、和GPU数量。group_size 代表将多少个任务打包成一组进行提交,依次串行计算,这个参数需要重点注意。比如我们只有一块GPU卡,但在训练阶段需要用这张卡依次训练4个模型,便可以将group_size这个参数设置为4。如果group_size 设置为1的话,因为单个工作站没有配置调度系统,4个训练任务便会同时在仅有的一张GPU卡上进行。最后,我们可以将各种环境变量配置在source_list中,比如如果按照上面的例子的设置,"source /home/user1234/deepmd.env"的命令便会在指定"dp"的任务命令之前执行,以加载运行DeePMD-kit任务必需的环境变量。


案例二:向本地Slurm集群执行探索任务

"model_devi": [ { "command": "lmp", "machine": { "context_type": "local", "batch_type": "Slurm", "local_root": "./", "remote_root": "/home/user1234/work_path" }, "resources": { "number_node": 1, "cpu_per_node": 4, "gpu_per_node": 1, "queue_name": "QueueGPU", "custom_flags" : ["#SBATCH --mem=32G"], "group_size": 10, "source_list": ["/home/user1234/lammps.env"] } }],


在第二个例子中,我们尝试将model_devi部分跑在一台可以提交GPU任务的Slurm集群上,此时深度势能分子动力学的运行命令是"lmp"。


在machine参数中,我们通过更改batch_type为"Slurm"来指定调度系统类型。


在resources参数中,我们通过更改queue_name来指定任务提交的目标队列。在一些情况下,根据集群的设置以及任务需要,我们可以在custom_flags参数中添加额外要写到计算脚本中的指令。此外,在model_devi部分常有众多任务计算,每个任务时长较短,此时我们常把多个任务(比如10个)打包成一组任务进行提交,以避免过量计算任务排队。


案例三:向远程PBS集群提交标记任务

"fp": [ { "command": "mpirun -n 32 vasp_std", "machine": { "context_type": "SSH", "batch_type": "PBS", "local_root": "./", "remote_root": "/home/user1234/work_path", "remote_profile": { "hostname": "39.xxx.xx.xx", "username": "user1234", "password": "password1234", "port": 22 } }, "resources": { "number_node": 1, "cpu_per_node": 32, "gpu_per_node": 0, "queue_name": "QueueCPU", "group_size": 5, "source_list": ["/home/user1234/vasp.env"] } }],


在第三个例子中,我们尝试将fp任务提交到一台可以通过SSH访问到的远程PBS集群上。比如第一性原理计算使用VASP时,我们一般使用mpi并行计算,因此在command添加mpirun的指令并且指定预期使用的并行线程数量。


在machine部分的参数,因为DP-GEN运行节点和远程PBS集群之间需要通过SSH连接,此时我们需要更改context_type为"SSH",并且设置batch_type为"PBS"。值得注意的是,remote_root 此时应当设置成远程PBS集群上的一个可被访问到的路径。此外,我们还应在remote_profile中配置远程PBS集群的IP、用户名、密码、端口等信息。


在resources部分的参数设置逻辑同前一致,由于一般使用纯CPU节点进行VASP计算性价比高一些,因此在本例我们将每组任务申请的GPU数量设置为0。




以上我们通过三个例子,探讨了如何配置DP-GEN的machine.json文件。在实际使用中,大家的机器环境不一样,所以需要大家举一反三,根据自己手边的机器情况进行配置和调试。


只要正确配置machine.json,后续一般不需要再额外修改参数,一套machine.json便可持续稳定地帮助你自动提交DP-GEN的任务啦!


最后,欢迎大家观看B站DeepModeling账号发布的教学视频DP-GEN machine.json输入文件配置, 听刘锦程博士讲解如何配置machine.json。也请持续关注DP-GEN的手册https://github.com/deepmodeling/dpgen 深入了解更多细节。



- End -

(如需转载图文请与公众号后台联系)
-------------------------------

推荐阅读

【教程】DP核心开发者亲授:一节课学透DeePMD-kit原理
【教程·安装讲解】DeePMD-kit和DP-GEN安装教程视频
【社区求助秘籍】助你通关DP!

- 欢迎大家扫码关注社区B站账号/社区公众号 -



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存