Jinzhe Zeng's Blog

苟利国家生死以,岂因祸福避趋之

Front cover

2021年7月,DeePMD-kit v2.0.0发布前夕,张林峰和王涵老师——也就是此文的通讯作者——问我要不要给DeePMD-kit软件写一篇新论文,作为该软件的标准参考。

Read more »

封面

上回说到,去年夏天,导师收到了JCP Special Topic: Modern Semiempirical Electronic Structure Methods的邀稿,但是迟迟没决定写什么。到了10月下旬,JCP把deadline延长到了11月30日,这时他的想法是,写一篇Perspective来总结过去的工作,并把我上一篇文章的一些数据拆了出来,放到这篇文章里。但是到了11月下旬,我把上一篇文章投出去以后,导师又决定,改成一篇benchmark的文章,在QDπ已经benchmark的一大堆机器学习和半经验方法数据的基础上,再benchmark两个方法的数据,最后再得出结论,半经验+机器学习联用的精度最好,QDπ的精度最好。

Read more »

题图

封面

上兵伐谋

上回说道,2020年春,DPRc被设计出来,并应用于一个简单的RNA自催化体系中。这以后,DPRc的两个后续研究方向也明确下来,其一,是将DPRc应用到溶液反应的自由能计算中,包括组里在搞的几个RNA催化体系;其二,便是将DPRc应用到药物发现中,预测溶液中药物的结合自由能,将其拆成QM/QM模型和QM/MM作用模型,分别训练。

Read more »

封面

经过很长很长的审稿和出版周期,我的第一篇book chapter终于在9月20日前后随书出版了。

书章的主体部分在去年就完成了,后来经过数轮审稿和修改,最终定稿。章节主要分为两部分,前半部分介绍了一些不同类型的neural network potentials,可以在论文的introduction部分引用,后半部分是之前甲烷燃烧工作的介绍和tutorial,从仓库下载输入文件后,可以在没有看过书的情况下快速体验。

Read more »

Journal of Chemical Theory and Computation, 2021, 17 (11), 6993-7009.

前置论文:

序幕·负笈担簦

时间回到两年前的夏天,我离家数万里,与套磁已久的Darrin M. York会晤,相谈甚欢。按照安排,第一学期分为两个rotation,两个rotation结束后才选择导师。当然,这种安排对于我们来说,只是一个形式,我和Darrin约定在第二个rotation会合。

我的第一个rotation找到了Lu Wang,完成了一个新手级别的任务;第二个rotation期间则没有任何任务,按照Darrin的说法,rotation只是用来“感受课题组氛围”的形式。总体来说,rotation设立的初衷是好的,可以感受到不同课题组的氛围,但是由于时间过短,无法体验到真正的课题,总有一点虚度光阴的意味。在此期间,我的精力就放在了第三篇论文中。

Read more »

时至2021年8月,从大三算起,我从事科研工作也快满四年了。四年来,我也用过不少计算软件,它们无一例外都有一些通病,一是文档写得极差,遇到不属于bug的错误总要手动搜索答案,形成了“软件使用经验”的壁垒,有些软件甚至催生了不少第三方论坛、博客、培训机构提供教程,形成了完整的产业链;二是对于开源项目来说,注释和开发文档几乎没有,看代码只能靠猜,给二次开发带来了极大障碍。

原先,DeePMD-kit也存在着这样的问题。当年我还是DeePMD-kit的用户时,就常常为了理解代码背后的逻辑而被折磨得痛不欲生。虽然解决这个问题需要付出的努力很多,但不积跬步,无以至千里;不积小流,无以成江海。这一问题仍需要去推动、去解决。v2.0.0对这个问题进行了针对性优化,虽然仍有很多欠缺之处,但是用林峰的一句话来说,算是“小学毕业”了。

Read more »

两周前,经过一周的努力,我终于成功编译了TensorFlow 2.5。在TF 2.5中,我亲自参与的#43951得到了修复。但众所周知,TensorFlow每个新版本都会更新一些bug,TF2.5更新了6个新bug!

Read more »

今年,组里申到了Longhorn约二十万V100机时。Longhorn是Texas Advanced Computing Center(TACC)前年建成的超算,建成那年在TOP500排名120,不过目前已经下滑到228了,可见现在的硬件迭代速度飞快。这么多机时,它的队列又是空空荡荡的,那当然要尝试一下。尝试了两周,解决了两个很坑的问题,终于跑通了。


第一个问题是,Longhorn开了强制两步认证,登录时即使设置了密钥,仍会受到以下提示:

To access the system:

  1. If not using ssh-keys, please enter your TACC password at the password prompt
  2. At the TACC Token prompt, enter your 6-digit code followed by.

(*****@longhorn.tacc.utexas.edu) TACC Token Code:

根据用户手册,我们需要下载一个名为TACC Token的App,扫码获取这个Token Code。

image

乍看起来,这确实是WorkFlow的噩梦。当我们同时运行十几个甚至几十个WorkFlow时,可能随时都会发生登录事件,让程序去等待人类(可能在睡觉,可能在躺平,甚至可能不可描述)去输token,实在是不可接受的。

但是仔细一看,这个token,其实就是已经成为通用标准的“基于时间的一次性密码算法”(Time-based One-time Password,TOTP)。所谓TOTP,就是基于预设密钥和当前时间戳生成token的算法,维基百科的介绍如下:

image

扫描二维码,会得到形如这样的地址:

otpauth://totp/njzjz%3Anjzjz?secret=这里有一串密钥&issuer=TACC

secret后面的就是base32以后的密钥,可以用base64.b32decode(secret)进行解码;时间戳可以从time.time()得到;而TOTP算法所需的HMAC算法,则是Python内置的。因此我们生成TOTP的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def generate_totp(secret: str, period: int=30, token_length: int=6) -> int:
"""Generate time-based one time password (TOTP) from the secret.
Some HPCs use TOTP for two-factor authentication for safety.
Parameters
----------
secret: str
The encoded secret provided by the HPC. It's usually extracted
from a 2D code and base32 encoded.
period: int, default=30
Time period where the code is valid in seconds.
token_length: int, default=6
The token length.

Returns
-------
token: int
The generated token.
"""
timestamp = time.time()
counter = int(timestamp) // period
msg = struct.pack('>Q', counter)
digest = hmac.new(base64.b32decode(secret), msg, hashlib.sha1).digest()
ob = digest[19]
pos = ob & 15
base = struct.unpack('>I', digest[pos:pos + 4])[0] & 0x7fffffff
token = base % (10**token_length)
return str(token).zfill(token_length)

得到了TOTP的密钥后,我们把它喂给paramiko的password参数,这个问题就算解决了!

去年,DeePMD-kit的开发者意识到了文档的重要性,给输入的JSON文件input.json的所有参数添加了相应的文档。为了实现这一重要目标,Yixiao将配置参数抽象成了dargs.Arugenmentdargs.Variant类,每个Arugenment类代表一个参数,类的属性里还有允许类型、文档、允许的子Argument等信息;Variant则表示不同的配置变种,例如local_frame描述符和se_e2_a描述符。就在此时,我们看到Sion Wang吐槽过DeePMD-kit缺少文档,用起来是最痛苦的。

除了文档以外,我们也意识到,一个优秀的用户界面(user interface,UI)也可以大幅度提升用户体验。JSON文件是一种对程序友好却反人类的语言,常常看到有用户这里多一个逗号、那里少一个逗号。我们也发现,有时用户也会把参数写错位置,却不知错在哪里。例如,在下面节选的参数中,type_mapmodel的子参数,但有用户把type_map放在model之前,使其无法被正确读取。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  
{
"model": {
"type_map": ["O", "H"],
"descriptor" :{
"type": "se_e2_a",
"sel": [46, 92],
"rcut_smth": 0.50,
"rcut": 6.00,
"neuron": [25, 50, 100],
"resnet_dt": false,
"axis_neuron": 16,
"seed": 1
},
"fitting_net" : {
"neuron": [240, 240, 240],
"resnet_dt": true,
"seed": 1
}
}
}

因此,我常常想着能否为用户提供一个图形界面(graphical user interface,GUI),生成这些JSON文件。很多科学计算软件都只有命令行界面(command line interface,CLI),GUI位于鄙视链的最末端,但我认为应该给新手提供更加友好的环境。

上周,我想到了一个绝妙的idea,立即在开发群里提出,获得了其它开发者的赞同:

Read more »

今天dev通道推送了Windows 11 Insider Preview 22000,赶紧体验一把。

image
界面

image
底下的任务栏,图标跑到了中间。二屏的任务栏被砍了(好像只是个bug)。

PS:右下角并未出现水印。

image
完全变样的开始菜单。

image
搜索框跑到了最上面。

image
似曾相似的“小组件”。

image
通知和日历。

image
操作栏。

image
文件资源管理器。

image
Microsoft Store。并没有发现什么新app。

image
设置。

image
系统→关于。

新增功能
根据更新日志,好像没有增加什么有用的功能。。。

0%