概念#
Nodes 和链接#
AiiDA 中最重要的两个 import 概念是 数据 和 processes 。前者是数据块,如简单的整数或浮点数,后者是更复杂的数据概念,如参数字典、文件文件夹或晶体结构。Processes 对这些数据进行操作,以产生新数据。
Processes 有两种不同的形式:
计算 是能够 创造 新数据的 processes。例如,产生新数据的外部模拟代码就是这种情况。
Workflow 是 协调 其他 workflow 和计算的 processes,即它们管理逻辑流,能够 调用 其他 processes。Workflow 有数据输入,但不能生成新数据。它们只能返回数据库中已有的数据(一种典型的情况是返回由它们调用的计算创建的数据)。
数据和 processes 在 AiiDA provenance graph 中表示为该图的 nodes 。图边被称为 链接 ,有不同的形式:
输入 链接:将数据 node 连接到将其用作输入的 process 个 node,包括计算和 workflow。
创建 链接:将计算 node 与它们创建的数据 node 连接起来
返回 链接:将 workflow node 连接到它们返回的数据 node
调用 链接:将 workflow nodes 连接到它们直接调用的 process nodes 上,无论是计算还是 workflows
请注意, 创建 和 返回 链接通常统称为 输出 链接。
数据 provenance 和逻辑 provenance#
AiiDA 自动在数据库中存储实体,并将它们连接起来,形成一个 有向图 。这个有向图自动追踪所有由计算产生或由workflow返回的数据的 provenance 。通过这种方式跟踪 provenance,人们总能完全追溯到某个特定数据是如何产生的,从而确保其可重复性。
我们特别定义了两种类型的 provenance:
数据 provenance,由图形中只包含数据和计算(即不考虑 workflow)的部分以及连接它们的 输入 和 创建 链接组成。数据 provenance 记录了数据生成的全部历史。根据因果关系原理,数据图 provenance 的部分是 有向无循环图 (DAG),即其 node 由有向边连接,不包含任何循环。
逻辑 provenance由 workflow 和数据 node 以及连接它们的 输入 、 返回 和 调用 链路组成。逻辑 provenance 并非不可循环,例如,作为过滤器的 workflow 可以返回自己的一个输入,直接引入一个循环。
数据 provenance 实质上是一个日志,记录了使用特定输入进行的计算产生了哪些数据。仅数据 provenance 就已经保证了可重复性(人们可以使用所提供的输入再次逐一运行计算,并获得相同的输出)。逻辑 provenance 则提供了更多信息,说明为什么要进行特定计算。试想一下,从 100 个结构开始,通过过滤操作选出其中一个,然后对其进行模拟运算。数据 provenance 只显示了在被选中的结构上运行的模拟,而逻辑 provenance 还可以显示特定结构不是随机选中的,而是通过特定的 workflow 逻辑选中的。
其他实体#
除了 node(数据和 processes),AiiDA 还定义了其他一些实体,如 Computer
(代表运行计算或存储数据的计算机、超级计算机或计算机集群)、 Group
(为组织目的将 node 组合在一起)和 User
(跟踪首次生成特定 node、计算机或组的用户)。
在下面的章节中,我们将更详细地描述上述 provenance 概念在 AiiDA 中的实际实现方式,并具体提及实现这些概念的 python 类和类继承关系。