spaCy 随机"Segmentation fault (core dumped)"错误,当训练长跨度时

eqzww0vc  于 5个月前  发布在  其他
关注(0)|答案(7)|浏览(73)

你好,

在尝试训练长时间的SpanCat模型时,我遇到了“Segmentation fault (core dumped)”错误。我知道这个错误可能与内存不足(OOM)有关,但在这里似乎并不是这样。我尝试减小[nlp] batch_size和[training.batcher.size],并使用具有非常大RAM的虚拟机以确保我们不会耗尽内存。

在训练过程中,虚拟机的内存使用率从未超过40%,即使在减小[components.spancat.suggester] min_size和max_size之后,内存使用率也不超过20%,但训练仍然以错误“Segmentation fault (core dumped)”退出。

注意:当训练[components.spancat.suggester]值较低时,训练可以完成,但F、P和R的值都为零。

这是我用于训练的命令:

python -m spacy train config_spn.cfg --output ./output_v3_lg_1.3 --paths.train ./spacy_models_v3/train_data.spacy --paths.dev ./spacy_models_v3/test_data.spacy --code functions.py -V

这是训练输出:

[2023-09-28 09:25:08,461] [DEBUG] Config overrides from CLI: ['paths.train', 'paths.dev']
 i Saving to output directory: output_v3_lg_1.3
 i Using CPU
=========================== Initializing pipeline ===========================
 [2023-09-28 09:25:08,610] [INFO] Set up nlp object from config
 [2023-09-28 09:25:08,618] [DEBUG] Loading corpus from path: spacy_models_v3/test_data.spacy
 [2023-09-28 09:25:08,618] [DEBUG] Loading corpus from path: spacy_models_v3/train_data.spacy
 [2023-09-28 09:25:08,619] [INFO] Pipeline: ['tok2vec', 'spancat']
 [2023-09-28 09:25:08,621] [INFO] Created vocabulary
 [2023-09-28 09:25:09,450] [INFO] Added vectors: en_core_web_lg
 [2023-09-28 09:25:09,450] [INFO] Finished initializing nlp object
 [2023-09-28 09:25:16,150] [INFO] Initialized pipeline components: ['tok2vec', 'spancat']
 ✔ Initialized pipeline
============================= Training pipeline =============================
 [2023-09-28 09:25:16,158] [DEBUG] Loading corpus from path: spacy_models_v3/test_data.spacy
 [2023-09-28 09:25:16,159] [DEBUG] Loading corpus from path: spacy_models_v3/train_data.spacy
 i Pipeline: ['tok2vec', 'spancat']
 i Initial learn rate: 0.001
 E # LOSS TOK2VEC LOSS SPANCAT SPANS_SC_F SPANS_SC_P SPANS_SC_R SCORE
0 0 98109.47 19535.08 0.00 0.00 4.58 0.00
 0 200 528.73 781.51 0.00 0.00 3.75 0.00
 Segmentation fault (core dumped)
Environment:
Operating System: Ubuntu 20.04.6 LTS
 Python Version Used: 3.8.10
 spaCy Version Used: 3.6.0
 [config_spn.cfg.txt](https://github.com/explosion/spaCy/files/12748569/config_spn.cfg.txt)
谢谢!
093gszye

093gszye1#

在任何情况下都不应该发生分段错误。你能发布以下命令的输出吗?

pip list

此外,如果你能帮我尝试以下操作,我会非常感激:

  • 使用 spacy(及其自动安装的依赖项)创建一个新的虚拟环境。
  • 创建一个最小的训练/评估集(包含少量示例)。
  • 在这个虚拟环境中尝试重现崩溃。
zqry0prt

zqry0prt2#

感谢您的回复,
我已经创建了一个只包含spacy的新虚拟环境,但是我仍然遇到了相同的错误,所以这与pip包无关。我正在使用一个小型样本数据(300个文档)进行训练和验证。
注意到一件事:
将[components.tok2vec.model.encode]中的with从默认值96更改为128会使训练命令完成一次迭代后崩溃,将此值更改回96会导致命令在未完成任何迭代的情况下失败。
附上调试数据输出供参考。
debug_data.txt
pip list输出:

Package             Version
------------------- ---------
attrs               23.1.0
azure-core          1.28.0
azure-storage-blob  12.17.0
blis                0.7.9
catalogue           2.0.8
certifi             2023.5.7
cffi                1.15.1
charset-normalizer  3.2.0
click               8.1.5
confection          0.1.0
contourpy           1.1.0
cryptography        41.0.2
cycler              0.11.0
cymem               2.0.7
en-core-web-lg      3.6.0
en-core-web-sm      3.6.0
fonttools           4.41.1
fuzzysearch         0.7.3
fuzzywuzzy          0.18.0
idna                3.4
importlib-resources 6.0.0
isodate             0.6.1
Jinja2              3.1.2
joblib              1.3.1
kiwisolver          1.4.4
langcodes           3.3.0
Levenshtein         0.21.1
MarkupSafe          2.1.3
matplotlib          3.7.2
murmurhash          1.0.9
numpy               1.24.4
packaging           23.1
pandas              2.0.3
pathy               0.10.2
Pillow              10.0.0
pip                 23.2
pkg_resources       0.0.0
preshed             3.0.8
pycparser           2.21
pydantic            1.10.11
pyodbc              4.0.39
pyparsing           3.0.9
python-dateutil     2.8.2
python-Levenshtein  0.21.1
pytz                2023.3
rapidfuzz           3.2.0
regex               2023.8.8
requests            2.31.0
scikit-learn        1.3.0
scipy               1.10.1
setuptools          68.0.0
six                 1.16.0
sklearn             0.0.post7
smart-open          6.3.0
spacy               3.6.0
spacy-legacy        3.0.12
spacy-loggers       1.0.4
srsly               2.4.6
thefuzz             0.20.0
thinc               8.1.10
threadpoolctl       3.2.0
tqdm                4.65.0
typer               0.9.0
typing_extensions   4.7.1
tzdata              2023.3
urllib3             2.0.3
wasabi              1.1.2
wheel               0.40.0
zipp                3.16.2
mrfwxfqh

mrfwxfqh3#

感谢您提供的信息-我们将进行调查。

ie3xauqp

ie3xauqp4#

对于遇到这个问题的人,我使用了NER而不是SpanCat,没有问题。对于重叠的spans,我训练了模型来提取高层次的细节,并训练了单独的模型从复杂的数据中提取子细节。如果SpanCat按预期工作,我认为它仍然是正确的方法。
问候。

rggaifut

rggaifut5#

你好,你能分享一下训练/开发数据以及用于训练SpanCat模型的自定义代码吗?我们需要这些信息来重现崩溃并调试问题。

brqmpdu1

brqmpdu16#

你好,
我在为我们的客户创建一个简历解析器时遇到了这个问题,所以很遗憾我们无法分享数据,因为它使用了实时的申请者数据。
我们没有使用任何自定义代码来训练模型,而是在生成训练数据并实时保存在spacy/dev.spacy中。
导致这个错误的相同数据在使用NER而不是SapnCat时运行正常,所以我认为这不是数据问题,正如您在之前共享的调试数据中所看到的。
您可以查看与此问题相关的讨论线程 13012
祝好。

46qrfjad

46qrfjad7#

这是可以理解的。问题可能是SpanCat组件代码中的一个bug,但我们仍需要一致地重现崩溃以确定原因并修复它。如果您将来遇到此问题,并且可以共享触发崩溃的数据,请告知我们。

相关问题