Python node2vec(Gensim Word2Vec)"Process finished with exit code 134 (interrupted by signal 6: SIGABRT)"

Python node2vec (Gensim Word2Vec) "Process finished with exit code 134 (interrupted by signal 6: SIGABRT)"

我正在 Python 中开发 node2vec,它在内部使用 Gensim 的 Word2Vec

当我使用小型数据集时,代码运行良好。但是,一旦我尝试 运行 大型数据集上的相同代码,代码就会崩溃:

Error: Process finished with exit code 134 (interrupted by signal 6: SIGABRT).

给出错误的行是

model = Word2Vec(walks, size=args.dimensions,
                 window=args.window_size, min_count=0, sg=1,
                 workers=args.workers, iter=args.iter)

我正在使用 PyCharm 和 Python 3.5。

这是怎么回事?我找不到任何可以解决我的问题的post。

您几乎可以肯定 运行 内存不足 – 这会导致 OS 使用 SIGABRT.

中止您的内存使用过程

一般来说,解决这个问题意味着查看您的代码如何使用内存,从而导致失败。 (然而,实际的 'leak' 大容量内存使用量可能任意早 - 只有最后的 small/proper 增量触发了错误。)

特别是 Python 的用法,以及使用 Gensim Word2Vec class 的 node2vec 工具,可以尝试的一些事情包括:

在尝试过程中观察 Python 进程大小的读数。

启用 Python 日志记录至少到 INFO 级别,以查看有关导致崩溃发生的更多信息。

此外,请务必:

  1. 优化您的 walks 可迭代对象 而不是 组成一个大的内存列表。 (Gensim 的 Word2Vec 可以在 任何 长度的语料库上工作,不包括那些远大于 RAM 的语料库,只要 (a) 语料库是通过可重复的从磁盘流式传输的Python 序列;和 (b) 模型的 唯一 word/node 令牌的数量可以在 RAM 中建模。)
  2. 确保模型中唯一单词的数量 (tokens/nodes) 不需要大于 RAM 允许的模型。日志输出一旦启用,将显示在主要模型分配(可能失败)发生之前涉及的原始大小。 (如果失败,要么:(a) 使用具有更多 RAM 的系统来容纳您的全套节点;或者(b)或使用更高的 min_count 值来丢弃更多不太重要的节点。)

如果您的 Process finished with exit code 134 (interrupted by signal 6: SIGABRT) 错误不涉及 Python、Gensim 和 Word2Vec,您应该:

  1. 结合 您的 触发情况的更具体详细信息搜索该错误的出现 - tools/libraries 和造成您的错误的代码行。
  2. 查看适用于您的情况的通用内存分析 工具,以确定您的代码可能在何处(甚至在最终错误之前很久)消耗了几乎所有可用的 RAM。

我也遇到了同样的问题,终于解决了。我的原因是我的 Keras 版本 2.2.0 太高了。

我把版本改成2.0.1后就可以了

对我来说,问题出在 macOS v10.15 (Catalina) 上的 Snowflake 连接器 Python 库 运行。

我从 Danny Bryant 的用户 VikR in a blog post given in answer 59538581 that has been deleted from this page: Python Abort trap: 6 fix after Catalina update 那里找到了解决方案。它解释了需要将 SSL 库放回到 Mac 的操作系统路径中,并给出了执行此操作的步骤。它还列出了使用 brewpip3.

升级库的步骤

以下是我重新获取 Python 脚本 运行 所遵循的步骤。

brew update
brew upgrade
cd /usr/local/lib
ln -s /usr/local/Cellar/openssl\@1.1/1.1.1j/lib/libssl.1.1.dylib libssl.dylib
ln -s /usr/local/Cellar/openssl\@1.1/1.1.1j/lib/libcrypto.1.1.dylib libcrypto.dylib
pip3 install --upgrade snowflake-connector-python

对我来说,我不必安装 OpenSSL,因为我已经安装了它。请阅读 Bryant 的 page 了解更多详情。

注意

  1. 我的 OpenSSL 版本当然比 Bryant 的说明晚。与我在这里使用的版本相比,您的版本很可能也会晚一些。
  2. Homebrew /Cellar/ 目录结构对我来说与 Bryant 编写他的说明时略有不同。当您阅读本文时,它可能又变了。
  3. 我选择直接 link 库,而不是像 Bryant 那样 link 到库的副本。
  4. 我的 Homebrew /Cellar//usr/local/lib 文件夹实际上需要大量的用户所有权更改。由于这与原始问题无关,因此我省略了这些步骤。

如果您是 运行 macOS v10.15 (Catalina),这可能会对您有所帮助。 对我来说,我在升级到 Catalina 后就开始看到这个错误。

在Terminal中一一执行以下命令,应该就可以了:

brew update && brew upgrade && brew install openssl

cd /usr/local/Cellar/openssl/1.0.2t/lib

sudo cp libssl.1.0.0.dylib libcrypto.1.0.0.dylib /usr/local/lib/

cd /usr/local/lib

mv libssl.dylib libssl_bak.dylib

mv libcrypto.dylib libcrypto_bak.dylib

sudo ln -s libssl.1.0.0.dylib libssl.dylib

sudo ln -s libcrypto.1.0.0.dylib libcrypto.dylib

我在一个 Apple 论坛上找到了这个(但我似乎记不起确切的位置)。

另外,有好心人也为此写了一批。 它可以在 this gist.

中找到

使用:

import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'