例如由于断电或队列中作业运行超过分配时间,在收敛之前计算终止的情况可能会发生。也有可能是由在设置的最大迭代步数之内未达到收敛导致的。在这些情况下,您将想要从停止的位置重新启动作业。
为此,QuantumATK 会定期将计算的当前状态保存到检查点文件中。默认设置是每 30 分钟保存一次。检查点文件的名称始终写在日志文件中。
+------------------------------------------------------------------------------+ | Checkpoint Handler | | Filename : /tmp/checkpoint28146777.nc | | Interval : 0.5 h | +------------------------------------------------------------------------------+ |--------------------------------------------------| Calculating Eigenvalues : ================================================== Calculating Density Matrix : ================================================== +------------------------------------------------------------------------------+ | Density Matrix Report DM[U] DM[D] DD | +------------------------------------------------------------------------------+ | 0 Fe [ 0.717 , 0.717 , 0.716 ] 5.39789 2.59547 -0.00664 |
检查点文件的默认位置在由环境变量 TEMP 指定的目录中。如果您在大型集群上运行,则可能无权写入 TEMP 目录,即使您写入了,也可能会在作业完成时自动删除您在此目录创建的任何文件–即使 QuantumATK 计算没有收敛。在这种情况下,重要的是手动指定检查点文件的位置,如在您的 HOME 目录中。
下图展示了怎样通过 QuantumATK Script Generator 的 New Calculator 模块设置保存间隔和检查点文件的名称。
如果您需要,可以参考 Reference Manual 获取有关如何设置这些参数或关闭检查点处理程序的更多信息。
从检查点文件重启计算的最快方法是从检查点文件读取结构,然后在结构上调用 update。
configuration = nlread("checkpointfile.hdf5")[0] configuration.update() nlsave("file.hdf5", configuration)
nlread()
的引数当然应该设置为实际的检查点文件名称。
这种方法的缺点是,如果原始脚本包含任何分析模块(例如,计算带结构),则需要手动地将这些模块插入重启脚本的底部。
从概念上讲,更好的方法是重新运行已有的脚本,但要告诉它不是从头开始,而是从检查点文件开始。这也将保留原始脚本中定义的所有分析模块。这种想法是可行的,您只需要以适当的方式插入上面显示的代码行。
让我们假设你有一个由脚本生成器生成的 “标准” 脚本,没有太多复杂的步骤。也就是说,一个具有简单序列的 “Configuration” 和 “New Calculator”,然后是分析模块。在其他情况下,您始终可以按照与此处所述相同的方式修改脚本,但您必须更加谨慎地保留逻辑。如果脚本包含 InitialState 模块,则需要特别小心。
device_configuration.update()
对于块体和分子的计算,变量将会被名为 bulk_configuration
或 molecule_configuration
结构取代。
然后在上述代码行之前添加以下这行:
device_configuration = nlread("checkpointfile.hdf5")[0]
再次地,nlread()
的引数当然应该设置为实际的检查点文件名称。
现在您可以重新运行脚本。
重新启动几何优化要更复杂。因此,对于长时间的弛豫,使用轨迹文件总是一个好主意;如果计算中断,您可以取出一些后面的结构,并使用此几何构型作为起点设置新的优化。然而请注意,QuasiNewton 几何优化中的一些结构是 “test balloons”,其可以对应非常大的应力(即,非常糟糕的猜测),尤其是在前 5-10 步期间。因此,选择不具有太大应力的结构很重要。