# 推理 ## 输入文件 任何 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` 加快推理速度。推理的命令为: ```shell xeq infer -c .pt -in .xyz ``` 预测的结果将会写入 `.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` 文件中