故障排除#
如果遇到任何问题,请首先检查所有服务是否正常运行:
$ 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.
有两种可能的解决方案:
配置 RabbitMQ 服务器,为
consumer_timeout
参数设置较长的时间。将 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 的本地配置。在这种情况下,请尝试
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 的。请打开 python
或 ipython
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 的代码(echo
、clean
……),但又想禁用非交互式 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