推理

输入文件

任何 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

其他的格式诸如 pdbcifPOSCAR 等都可以使用。

另外,有的分子会带电荷或者自旋,但是 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_embedspin_embed 模块,否则给出的结果不会有任何变化。而且必须训练集中包含带电带自旋的分子,否则很难保证结果的可靠性)。

推理

因为导入 PyTorch 、初始化和加载模型还是相当耗时的,所以如果有多个结构需要推理时,建议使用连续 xyz 格式而非多个 xyz 文件。同时,在显存允许的情况下,适当提高 batch_size 加快推理速度。推理的命令为:

xeq infer -c <ckpt>.pt -in <mol>.xyz

预测的结果将会写入 <mol>.log 文件中,一下为其他命令行参数:

  • --ckpt / -c:模型检查点文件名

  • --devicecudacpu,默认会检查是否有可用的 GPU,有的话使用 cuda,没有的话使用 cpu

  • --input / -in:输入文件名

  • --delta / -d:Δ-ML 模型用的底层的半经验方法,可选项:gfn2-xtb, gfn1-xtb

  • --forces:是否计算力

  • --stress:是否计算应力

  • --batch-size:批次大小

  • --output / -o:输出文件名,默认为去掉输入文件的后缀并加上 .log

  • --verbose / -v:是否保存结果到 .pt 文件中