目录

计算中止如何重启

版本:

在本教程中,您将学习如何重新启动在收敛之前终止了的计算(例如,由于断电、超过队列中的挂起时间或超过最大迭代次数的原因)而无需从头开始。

P-2019.03

保存检查点文件

例如由于断电或队列中作业运行超过分配时间,在收敛之前计算终止的情况可能会发生。也有可能是由在设置的最大迭代步数之内未达到收敛导致的。在这些情况下,您将想要从停止的位置重新启动作业。

为此,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 模块,则需要特别小心。

打开 Editor 中您的初始脚本,找到以下这行

device_configuration.update()

提示

对于块体和分子的计算,变量将会被名为 bulk_configurationmolecule_configuration 结构取代。

然后在上述代码行之前添加以下这行:

device_configuration = nlread("checkpointfile.hdf5")[0]

再次地,nlread() 的引数当然应该设置为实际的检查点文件名称。

现在您可以重新运行脚本。

注意

  • 检查点文件不是以指定的时间间隔准确写入,而是仅在完成自洽循环中的步骤并且经过要求的时间间隔时才写入。
  • 自洽循环的历史记录不会写入检查点文件。因此,重新启动时收敛可能变得更加困难,因为混合算法比正常情况含有更少信息。

重启结构优化

重新启动几何优化要更复杂。因此,对于长时间的弛豫,使用轨迹文件总是一个好主意;如果计算中断,您可以取出一些后面的结构,并使用此几何构型作为起点设置新的优化。然而请注意,QuasiNewton 几何优化中的一些结构是 “test balloons”,其可以对应非常大的应力(即,非常糟糕的猜测),尤其是在前 5-10 步期间。因此,选择不具有太大应力的结构很重要。

参考