故障排除#

如果遇到任何问题,请首先检查所有服务是否正常运行:

$ verdi status

✓ version:     AiiDA v2.0.0
✓ config:      /path/to/.aiida
✓ profile:     default
✓ storage:     Storage for 'default' @ postgresql://username:***@localhost:5432/db_name / file:///path/to/repository
✓ rabbitmq:    Connected as amqp://127.0.0.1?heartbeat=600
✓ daemon:      Daemon is running as PID 2809 since 2019-03-15 16:27:52

在示例输出中,所有服务都有一个绿色复选标记,因此应按预期运行。如果所有服务都已启动和运行,但您仍遇到问题,或在安装 aiida-core 和相关服务时遇到困难,请考虑以下常见问题。如果您仍遇到问题,可以在 Discourse server 上发帖请求支持。

安装问题#

RabbitMQ 不兼容#

RabbitMQ v3.5 及更早版本为 end-of-life,不支持任何方式。对于 RabbitMQ v3.8.15 及以上版本,AiiDA 与服务器的默认配置不兼容。当 AiiDA 与不兼容的 RabbitMQ 版本运行时,会显示以下警告:

RabbitMQ v3.8.15 is not supported and will cause unexpected problems!
It can cause long-running workflows to crash and jobs to be submitted multiple times.
See https://github.com/aiidateam/aiida-core/wiki/RabbitMQ-version-to-use for details.

有两种可能的解决方案:

  1. 配置 RabbitMQ 服务器,为 consumer_timeout 参数设置较长的时间。

  2. 将 RabbitMQ 服务器降级至 v3.8.14 或更早版本

较新版本的 RabbitMQ 可以与 AiiDA 兼容,但必须对服务器进行配置。请注意,这很可能需要管理员权限。配置文件的名称和位置取决于操作系统(详见 RabbitMQ documentation)。配置文件可能还不存在,在这种情况下应创建配置文件。

在配置文件中添加 consumer_timeout 参数,并赋予其足够大的数值:

consumer_timeout = 36000000000 # 10,000 hours in milliseconds

为使 AiiDA 安全运行,该值应大于任何 AiiDA workflow 或计算的最长预期运行时间。建议的10,000小时通常就足够了。请参阅 RabbitMQ documentation on timeouts 了解更多详情,以及如何通过高级配置完全禁用消费者超时。

请注意,当你正确配置了 RabbitMQ,AiiDA 将继续发出警告,因为它只能检查版本。要抑制警告,请将 warnings.rabbitmq_version 设置为 False

verdi config set warnings.rabbitmq_version False

RabbitMQ 服务器的降级将取决于操作系统和/或服务器的安装方式。有关说明,请参阅 RabbitMQ installation documentation

更多详细信息,请参见资料库的 this wiki page

numpy依赖性#

在干净的 Ubuntu 16.04 安装中,由于 numpy 软件包的依赖关系问题,pip install 命令 pip install -e aiida-core 可能会失败。在这种情况下,您可能会看到如下信息:

from numpy.distutils.misc_util import get_numpy_include_dirs
ImportError: No module named numpy.distutils.misc_util

要解决这个问题,只需在虚拟环境中通过 pip 单独安装 numpy 即可:

$ pip install numpy

然后再次执行原始安装命令:

$ pip install -e aiida-core

这应该能修复依赖性错误。

数据库的安装和位置#

如果在安装与数据库相关的软件包时出现故障,则可能是没有安装或设置数据库库。

特别是在 Mac OS X 上,如果你安装了 PostgreSQL 的二进制包,有可能是 PATH 环境变量设置不正确,导致出现 “Error: pg_config executable not found.” 错误。在这种情况下,找出二进制包的位置,然后在 ~/.bashrc 文件中添加一行类似下面的内容:

export PATH=/the/path/to/the/pg_config/file:${PATH}

然后打开一个新的 bash shell。在 Stackoverflow link 中可以找到一些可能的路径,以下是可能路径的非详尽列表(版本号可能会更改):

  • /Applications/Postgres93.app/Contents/MacOS/bin

  • /Applications/Postgres.app/Contents/Versions/9.3/bin

  • /Library/PostgreSQL/9.3/bin/pg_config

同样,如果软件包已安装,但在 AiiDA 首次运行时出现错误(Symbol not found 错误或类似错误),你可能需要指向动态库所在的路径。一种方法是在 ~/.bashrc 中添加类似下面的一行,然后打开一个新的 shell:

export DYLD_FALLBACK_LIBRARY_PATH=/Library/PostgreSQL/9.3/lib:$DYLD_FALLBACK_LIBRARY_PATH

(当然,你应该调整 PostgreSQL 库的路径)。

自动检测 PostgreSQL 设置#

当运行 verdi quicksetup 时,有时 AiiDA 无法自动检测 PostgreSQL 的本地配置。在这种情况下,请尝试

  1. 在 PostgreSQL 中手动创建数据库(参见 here)。

  2. 然后运行完整的 verdi setup 命令(见 here)。

RabbitMQ 安装 (Unix)#

如果在 verdi status 中 RabbitMQ 未连接,请首先检查 RabbitMQ 是否真正运行:

$ sudo rabbitmqctl status
Status of node rabbit@ph-tsm15-025 ...
[{pid,86960},
...
{listeners,[{clustering,25672,"::"},{amqp,5672,"::"},{http,15672,"::"}]},

默认情况下,AiiDA 配置文件被配置为 通过 amqp://guest:guest@127.0.0.1:5672 连接 RabbitMQ,因此该端口应为连接开放。在 Linux / Mac OSX 中,您也可以检查 PID 所使用的开放端口:

$ sudo lsof -Pan -p 86960 -i
COMMAND    PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
beam.smp 98979 user1   75u  IPv4 0x9d838dc03d5a2485      0t0  TCP *:25672 (LISTEN)
beam.smp 98979 user1   76u  IPv4 0x9d838dc047588625      0t0  TCP 127.0.0.1:58316->127.0.0.1:4369 (ESTABLISHED)
beam.smp 98979 user1   86u  IPv6 0x9d838dc034033ea5      0t0  TCP *:5672 (LISTEN)
beam.smp 98979 user1   87u  IPv4 0x9d838dc018071a15      0t0  TCP *:15672 (LISTEN)

如果无法找到连接,请尝试以非分离模式启动 rabbitmq-server。如果您遇到类似下面的输出,可能是您的 RabbitMQ 和 erlang(RabbitMQ 使用的编程语言)版本不兼容。

$ rabbitmq-server
BOOT FAILED

===========


Error description:

   noproc


Stack trace:

   []

Error description:

   noproc

{"init terminating in do_boot",noproc}

init terminating in do_boot (noproc)


Crash dump is being written to: erl_crash.dump...done

您可以使用以下命令检查您的 erlang 版本:

$ erl -eval '{ok, Version} = file:read_file(filename:join([code:root_dir(), "releases", erlang:system_info(otp_release), "OTP_VERSION"])), io:fwrite(Version), halt().' -noshell
21.3

和您的 rabbitmq-server 版本:

$ rabbitmqctl --version
3.7.16

然后参阅 RabbitMQ Erlang Version Requirements,检查它们是否兼容,并根据情况重新安装。

另请参阅 RabbitMQ Troubleshooting,了解更多信息。

确保 UTF-8 本地化#

由于某些原因,在某些机器上(尤其是在 Mac OS X 上)没有定义默认语言,因此第一次运行 verdi setup 时会失败(另见 django 的 this issue)。在终端中运行(或者添加到 .bashrc 中更好,但要记得打开一个新的 shell 窗口!):

export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"

然后再次运行 verdi setup

可能的 Ubuntu 依赖项#

一些用户报告说还需要安装 libpq-dev (libpq5 - PostgreSQL库的头文件):

$ apt-get install libpq-dev

但在 Ubuntu 12.04 中不需要这样做。

verdi 不在 PATH 中#

安装 aiida-core python 软件包后,verdi CLI 将自动添加到 PATH 中。

如果您的终端中没有 verdi 可执行文件,则可能无法将 pip 放置二进制文件的文件夹添加到您的 PATH 中。

对于 Linux 系统,该文件夹通常是类似于 ~/.local/bin

export PATH=~/.local/bin:${PATH}

对于 Mac OS X 系统,添加路径通常是 ~/Library/Python/2.7/bin

export PATH=~/Library/Python/2.7/bin:${PATH}

更新 PATH 后,就可以使用 verdi 命令了。

备注

verdi 运行的前提条件是 aiida python 软件包是 importable 的。请打开 pythonipython shell 并键入以下内容进行测试:

import aiida

如果你得到一个 ImportError``(并且你在安装 AiiDA 的环境中),你可以手动将它添加到 ``PYTHONPATH 中:

export PYTHONPATH="${PYTHONPATH}:<AiiDA_folder>"

配置远程 SSH 计算机#

ssh_kerberos 安装#

通过 Anaconda 安装 ssh_kerberos optional 要求时,您可能会在 Ubuntu 机器上遇到以下错误:

version 'GFORTRAN_1.4' not found (required by /usr/lib/libblas.so.3)

这与 anaconda ContinuumIO/anaconda-issues#686 中的一个公开问题有关。可能的解决方案是运行以下命令:

$ export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libgfortran.so.3

远程计算机上 .bashrc 和/或 .bash_profile 的输出结果#

备注

这也适用于通过 local 传输配置的计算机。

在连接远程计算机时,如果 .bashrc.bash_profile 中的代码会产生输出或运行 clean 等需要终端的命令,AiiDA(如 sftp)就会感到困惑。

例如,如果您在 .bashrc 中添加了 echo 193235AD,然后尝试从该文件进行 SFTP,就会出现类似 Received message too long 1091174400 的错误。

如果您仍想使用需要交互式 shell 的代码(echoclean……),但又想禁用非交互式 shell,可在文件顶端添加这样的保护:

if [[ $- != *i* ]] ; then
# Shell is non-interactive.  Be done now!
return
fi

以下所有内容都不会在非交互式 shell 中执行。

备注

不过,如果在非交互式 shell 的情况下也需要运行该程序,则可能需要在上面添加一些代码,例如设置 PATH 或类似代码。

要测试计算机是否不会产生虚假输出,请运行(配置后):

$ verdi computer test <COMPUTERNAME>

检查,并在出现问题时提出解决问题的建议。

备注

如果上述方法无效,可以配置 AiiDA 在连接电脑时不使用登录 shell,这样可以防止打印出假输出:在 verdi computer configure 期间,设置 -no-use-login-shell 或当要求使用登录 shell 时,设置为 False。但请注意,这可能会导致环境略有不同,因为 certain startup files are only sourced for login shells.

改进依赖性#

激活 ASE 展示台#

在虚拟环境中,尝试使用 ase 可视化结构(从 shell 或使用命令 verdi data core.structure show --format=ase <PK>)时,可能会出现以下错误信息:

ImportError: No module named pygtk

问题在于 pygtk 目前无法通过 pip 安装。我们必须单独安装它,并在虚拟环境中手动创建相应的绑定。您可以按照以下步骤解决这个问题:

安装 python-gtk2 软件包。在 Ubuntu 下,执行

$ sudo apt-get install python-gtk2

在虚拟环境中创建 lib/python2.7/dist-packages 文件夹:

$ mkdir <AIIDA_VENV_FOLDER>/lib/python2.7/dist-packages
$ chmod 755 <AIIDA_VENV_FOLDER>/lib/python2.7/dist-packages

其中 <AIIDA_VENV_FOLDER> 是您在安装过程中创建的虚拟环境文件夹。

从该文件夹创建多个符号链接,指向 /usr/lib/python2.7/dist-packages/ 中的多个文件:

$ cd <AIIDA_VENV_FOLDER>/lib/python2.7/dist-packages
$ ln -s /usr/lib/python2.7/dist-packages/glib glib
$ ln -s /usr/lib/python2.7/dist-packages/gobject gobject
$ ln -s /usr/lib/python2.7/dist-packages/gtk-2.0 gtk-2.0
$ ln -s /usr/lib/python2.7/dist-packages/pygtk.pth pygtk.pth
$ ln -s /usr/lib/python2.7/dist-packages/pygtk.py pygtk.py
$ ln -s /usr/lib/python2.7/dist-packages/cairo cairo

之后,verdi data core.structure show --format=ase <PK> 应该可以工作。

在 ipython/jupyter 中使用#

为了在 Jupyter 中使用 AiiDA 对象和函数,后者必须被指示使用安装在 AiiDA 虚拟环境中的 iPython 内核。如果你用 pip 安装 AiiDA,包括 notebook 选项,并从 AiiDA 虚拟环境运行 Jupyter,默认情况下就会这样。

如果出于某种原因不想在虚拟环境中安装 Jupyter,可以考虑将其安装到虚拟环境之外(如果尚未安装):

$ pip install jupyter

然后,激活 AiiDA 虚拟环境:

$ source ~/<aiida.virtualenv>/bin/activate

并设置 AiiDA iPython 内核:

$ pip install ipykernel
$ python -m ipykernel install --user --name=<aiida.kernel.name>

为新内核选择一个有意义的名称。

最后,启动 Jupyter 服务器:

$ jupyter notebook

然后从新打开的浏览器选项卡中选择 New -> <aiida.kernel.name>

提高日志记录的冗余度#

默认情况下,AiiDA 的日志级别是最低的,以避免日志文件中出现太多噪音。只有警告和错误会被记录到守护进程日志文件中,而信息和调试信息会被丢弃。

如果你遇到问题,你可以增加 AiiDA 信息的默认最低记录级别:

$ verdi config set logging.aiida_loglevel DEBUG

您可能也有兴趣查看 circus 日志信息(circus 库是管理守护进程运行程序的守护进程程序)、

$ verdi config set logging.circus_loglevel DEBUG

但这些信息通常只与调试 AiiDA 内部有关。

每个运行守护进程的配置文件都有两个独特的日志文件,一个是 AiiDA 日志信息(名为 aiida-<profile_name>.log),另一个是 circus 日志(名为 circus-<profile_name>.log)。这些文件可以在 ~/.aiida/daemon/log 文件夹中找到。

重启守护进程 (verdi daemon restart) 后,记录的信息数量将大幅增加,这可能有助于确定问题的根源。

备注

除了 DEBUG,你还可以使用 standard Python logging module 中定义的级别。除此以外,AiiDA 定义了自定义的 REPORT 级别,其值为 23,比 WARNING 级别更冗长,但比 INFO 少。REPORT 级别是 AiiDA 的默认日志级别。

问题解决后,我们建议重置默认日志级别,方法如下

$ verdi config unset logging.circus_loglevel
$ verdi config unset logging.aiida_loglevel

以避免日志文件中出现过多噪音。

小技巧

还可以使用 --v/--verbosity 选项临时更改 verdi 命令的日志级别(详见 this section )。

使用以下命令可以查看为当前配置文件设置的配置选项

$ verdi config list