性能#

AiiDA 的性能取决于许多因素:

  • 运行 AiiDA 的硬件

  • 如何配置 AiiDA 服务(数据库、消息代理、文件系统等)。

  • 正在运行的代码及其插件。

本节将概述这些因素如何影响 AiiDA 的整体性能,以及如何对其进行优化。

硬件#

AiiDA 的大部分工作通常由守护进程及其工作者承担。性能通常受限于运行 AiiDA 的机器的计算能力。

每个工作进程都是一个独立的 Python 进程,负责执行提交的 AiiDA 进程。AiiDA 的设计允许通过添加更多可以独立并行工作的守护进程来增加吞吐量。一个经验法则是,工人数量不要超过运行 AiiDA 的机器 CPU 核心数。如果增加了更多的工作进程,它们将不得不开始共享和交换资源,性能将下降。

服务#

在默认设置下,AiiDA 主要有三个影响其性能的服务:

  • PostgreSQL(存储 provenance graph 的数据库)

  • RabbitMQ(守护进程工作者用于通信的消息代理)

  • 文件系统(文件由 AiiDA 存储在文件系统的文件库中)

对于最简单的安装,PostgreSQL和RabbitMQ服务通常与AiiDA本身运行在同一台机器上。虽然这意味着 AiiDA 本身及其守护进程无法使用部分机器资源,但 AiiDA 与服务通信的延迟是最小的。

可以配置 AiiDA 配置文件使用在不同机器上运行的服务,这些服务可以通过网络连接。然而,这通常会对性能产生负面影响,因为现在每次连接服务都会产生网络延迟。

基准#

benchmark script 提供了评估 workflow engine 性能的基本方法,涉及所有组件(CPU、文件系统、postgresql、rabbitmq)。

它在本地主机上启动 ArithmeticAddCalculation ,并测量直到完成的时间。由于 ArithmeticAddCalculation 的工作负载(两个数字的求和)是即时完成的,因此每个进程的时间可以合理地衡量 workflow engine 的开销。

The numbers reported in the howto section were obtained by running the processes in the current shell, which is the default. The --daemon option can be used to run the calculations through the AiiDA daemon instead, and to look at parallelizing over multiple daemon workers:

# 工人

总耗时(秒)

性能(秒/过程)

1

46.55

0.47

2

27.83

0.28

4

16.43

0.16

备注

虽然进程速率会随着守护进程工作者数量的增加而增加,但其缩放并不完全是线性的。这是因为,为了简单起见,基准脚本同时测量了向守护进程提交进程所需的时间(未并行化)和运行进程所需的时间(通过守护进程工作者并行化)。在长时间运行的进程中,提交进程所需的时间(每个进程大约 0.1 秒)并不重要,而且可以实现线性扩展。

插件#

AiiDA的优势之一是它的插件系统,它允许以各种方式定制它的功能。然而,这种灵活性也意味着AiiDA的性能会受到插件执行的很大影响。例如,CalcJob`插件决定哪些文件从计算资源传输到计算资源。如果插件需要传输和存储大量数据,这将影响守护进程的吞吐量。同样,如果 `Parser 插件需要执行繁重的数值计算来解析检索到的数据,这也会降低工作进程的吞吐量。为了优化进程吞吐量,插件应尽量减少繁重的计算和大量不必要数据的传输。