使用 GloVe 时出现非法硬件指令错误

Illegal Hardware Instruction Error when using GloVe

我正在尝试训练 GloVe 嵌入。在 stanfordnlp 的 GloVe 实现中,有 4 个脚本到 运行。但是,运行 宁第二个脚本,coocur,导致 Illegal Hardware Instruction-错误。我不明白这个错误是如何产生的。

使用输入文件 3.txt 我的命令如下所示:

$ ./vocab_count -min-count 1 -verbose 2 < 3.txt > vocab.txt
BUILDING VOCABULARY
Processed 8354 tokens.
Counted 3367 unique words.
Using vocabulary of size 3367.

$ ./cooccur -memory 4.0 -vocab-file vocab.txt -verbose 2 -window-size 15 < 3.txt > cooccurrence.bin
zsh: illegal hardware instruction  ./cooccur -memory 4.0 -vocab-file vocab.txt -verbose 2 -window-size 15 < 3.tx

我正在 运行 在远程服务器 (Debian GNU/Linux 9 (stretch)) 上执行这些命令。当我 运行 在本地(18.04.2 LTS(Bionic Beaver))对相同数据执行相同命令时,没有问题。这可能是什么原因?

回答我自己的问题:我仍然不知道问题的原因是什么。但是重新编译源代码解决了我的问题。

最近几天我遇到了同样的问题。

Docker 图像是使用 Jenkins 在服务器上构建的。直到底层集群主机编排软件和物理硬件升级后,一直运行没问题。

我的解决方案是从 Docker 文件中删除 GloVe 的构建,而是将 build/make 放入容器启动时运行的脚本中。

错误的实际原因可能是CFLAGS-march=native在Glove Makefile中设置:https://github.com/stanfordnlp/GloVe/blob/07d59d5e6584e27ec758080bba8b51fce30f69d8/Makefile#L4这将导致GloVe构建依赖底层CPU 指令集,构建 Docker 图像。

这里有进一步的讨论: