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
级别,以查看有关导致崩溃发生的更多信息。
此外,请务必:
- 优化您的
walks
可迭代对象 而不是 组成一个大的内存列表。 (Gensim 的 Word2Vec
可以在 任何 长度的语料库上工作,不包括那些远大于 RAM 的语料库,只要 (a) 语料库是通过可重复的从磁盘流式传输的Python 序列;和 (b) 模型的 唯一 word/node 令牌的数量可以在 RAM 中建模。)
- 确保模型中唯一单词的数量 (tokens/nodes) 不需要大于 RAM 允许的模型。日志输出一旦启用,将显示在主要模型分配(可能失败)发生之前涉及的原始大小。 (如果失败,要么:(a) 使用具有更多 RAM 的系统来容纳您的全套节点;或者(b)或使用更高的
min_count
值来丢弃更多不太重要的节点。)
如果您的 Process finished with exit code 134 (interrupted by signal 6: SIGABRT)
错误不涉及 Python、Gensim 和 Word2Vec
,您应该:
- 结合 您的 触发情况的更具体详细信息搜索该错误的出现 - tools/libraries 和造成您的错误的代码行。
- 查看适用于您的情况的通用内存分析 工具,以确定您的代码可能在何处(甚至在最终错误之前很久)消耗了几乎所有可用的 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 的操作系统路径中,并给出了执行此操作的步骤。它还列出了使用 brew
和 pip3
.
升级库的步骤
以下是我重新获取 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 了解更多详情。
注意
- 我的 OpenSSL 版本当然比 Bryant 的说明晚。与我在这里使用的版本相比,您的版本很可能也会晚一些。
- Homebrew
/Cellar/
目录结构对我来说与 Bryant 编写他的说明时略有不同。当您阅读本文时,它可能又变了。
- 我选择直接 link 库,而不是像 Bryant 那样 link 到库的副本。
- 我的 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'
我正在 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
级别,以查看有关导致崩溃发生的更多信息。
此外,请务必:
- 优化您的
walks
可迭代对象 而不是 组成一个大的内存列表。 (Gensim 的Word2Vec
可以在 任何 长度的语料库上工作,不包括那些远大于 RAM 的语料库,只要 (a) 语料库是通过可重复的从磁盘流式传输的Python 序列;和 (b) 模型的 唯一 word/node 令牌的数量可以在 RAM 中建模。) - 确保模型中唯一单词的数量 (tokens/nodes) 不需要大于 RAM 允许的模型。日志输出一旦启用,将显示在主要模型分配(可能失败)发生之前涉及的原始大小。 (如果失败,要么:(a) 使用具有更多 RAM 的系统来容纳您的全套节点;或者(b)或使用更高的
min_count
值来丢弃更多不太重要的节点。)
如果您的 Process finished with exit code 134 (interrupted by signal 6: SIGABRT)
错误不涉及 Python、Gensim 和 Word2Vec
,您应该:
- 结合 您的 触发情况的更具体详细信息搜索该错误的出现 - tools/libraries 和造成您的错误的代码行。
- 查看适用于您的情况的通用内存分析 工具,以确定您的代码可能在何处(甚至在最终错误之前很久)消耗了几乎所有可用的 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 的操作系统路径中,并给出了执行此操作的步骤。它还列出了使用 brew
和 pip3
.
以下是我重新获取 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 了解更多详情。
注意
- 我的 OpenSSL 版本当然比 Bryant 的说明晚。与我在这里使用的版本相比,您的版本很可能也会晚一些。
- Homebrew
/Cellar/
目录结构对我来说与 Bryant 编写他的说明时略有不同。当您阅读本文时,它可能又变了。 - 我选择直接 link 库,而不是像 Bryant 那样 link 到库的副本。
- 我的 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'