推理¶
输入文件¶
任何 ASE 支持的输入文件格式都可以使用,实际上程序就是使用 ase.io.read 来读取输入文件的。
比如连续 xyz 格式:
5
C -0.00000 -0.00000 -0.00000
H 0.64051 -0.64051 0.64051
H 0.64051 0.64051 -0.64051
H -0.64051 0.64051 0.64051
H -0.64051 -0.64051 -0.64051
4
N -0.00000 -0.00000 0.10034
H 0.48675 0.84307 -0.23412
H 0.48675 -0.84307 -0.23412
H -0.97349 0.00000 -0.23412
3
O 0.00000 0.01840 -0.00000
H -0.00000 -0.53835 0.78304
H 0.00000 -0.53835 -0.78304
或扩展的用于周期性体系的 extxyz 格式:
4
Lattice="3.080856849258821 0.0 0.0 -1.540428424629411 2.668100296881424 0.0 0.0 0.0 4.996207442095783" Properties=species:S:1:pos:R:3 pbc="T T T"
Al -0.00000000 1.77873353 2.56019470
Al 1.54042842 0.88936677 0.06209098
N -0.00000000 1.77873353 4.28247643
N 1.54042842 0.88936677 1.78437271
4
Lattice="3.040973650977856 0.0 0.0 -1.520486825488928 2.633560433985936 0.0 0.0 0.0 4.943013133454653" Properties=species:S:1:pos:R:3 pbc="T T T"
Al -0.00000000 1.75570696 2.36509292
Al 1.52048683 0.87785348 4.83659949
N -0.00000000 1.75570696 0.52923096
N 1.52048683 0.87785348 3.00073752
其他的格式诸如 pdb、cif 或 POSCAR 等都可以使用。
另外,有的分子会带电荷或者自旋,但是 xyz 格式并不包含相关信息,可以在注释行注明信息,如 charge=? 和 spin=?(或 multiplicity=?)例如:
4
charge=0 spin=1
C -0.00000 0.00000 0.03438
H 0.52232 -0.90469 -0.30070
H 0.52232 0.90469 -0.30070
H -1.04464 0.00000 -0.30070
4
charge=1 spin=0
O -0.00000 0.00000 -0.02472
H 0.45209 -0.78304 0.33963
H 0.45209 0.78304 0.33963
H -0.90417 0.00000 0.33963
这个文件中第一个结构是甲基自由基,电荷 \(Q=0\) 而总自旋量子数 \(S=1/2\)(这里的 spin 指的是未成对电子数,也就是 \(2S\)。也可以写成 multiplicity=2,因为 \(2S+1=2\))。第二个结构是水合氢离子,电荷 \(Q=+1\) 而未成对电子数 \(2S=0\)。
注释行注明上述信息后,程序会读取注释并传入模型中(前提是模型必须有 charge_embed 或 spin_embed 模块,否则给出的结果不会有任何变化。而且必须训练集中包含带电带自旋的分子,否则很难保证结果的可靠性)。
推理¶
因为导入 PyTorch 、初始化和加载模型还是相当耗时的,所以如果有多个结构需要推理时,建议使用连续 xyz 格式而非多个 xyz 文件。同时,在显存允许的情况下,适当提高 batch_size 加快推理速度。推理的命令为:
xeq infer -c <ckpt>.pt -in <mol>.xyz
预测的结果将会写入 <mol>.log 文件中,一下为其他命令行参数:
--ckpt/-c:模型检查点文件名--device:cuda或cpu,默认会检查是否有可用的 GPU,有的话使用cuda,没有的话使用cpu--input/-in:输入文件名--delta/-d:Δ-ML 模型用的底层的半经验方法,可选项:gfn2-xtb,gfn1-xtb--forces:是否计算力--stress:是否计算应力--batch-size:批次大小--output/-o:输出文件名,默认为去掉输入文件的后缀并加上.log--verbose/-v:是否保存结果到.pt文件中