你好,
在尝试训练长时间的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)
谢谢!
7条答案
按热度按时间093gszye1#
在任何情况下都不应该发生分段错误。你能发布以下命令的输出吗?
此外,如果你能帮我尝试以下操作,我会非常感激:
spacy
(及其自动安装的依赖项)创建一个新的虚拟环境。zqry0prt2#
感谢您的回复,
我已经创建了一个只包含spacy的新虚拟环境,但是我仍然遇到了相同的错误,所以这与pip包无关。我正在使用一个小型样本数据(300个文档)进行训练和验证。
注意到一件事:
将[components.tok2vec.model.encode]中的with从默认值96更改为128会使训练命令完成一次迭代后崩溃,将此值更改回96会导致命令在未完成任何迭代的情况下失败。
附上调试数据输出供参考。
debug_data.txt
pip list输出:
mrfwxfqh3#
感谢您提供的信息-我们将进行调查。
ie3xauqp4#
对于遇到这个问题的人,我使用了NER而不是SpanCat,没有问题。对于重叠的spans,我训练了模型来提取高层次的细节,并训练了单独的模型从复杂的数据中提取子细节。如果SpanCat按预期工作,我认为它仍然是正确的方法。
问候。
rggaifut5#
你好,你能分享一下训练/开发数据以及用于训练SpanCat模型的自定义代码吗?我们需要这些信息来重现崩溃并调试问题。
brqmpdu16#
你好,
我在为我们的客户创建一个简历解析器时遇到了这个问题,所以很遗憾我们无法分享数据,因为它使用了实时的申请者数据。
我们没有使用任何自定义代码来训练模型,而是在生成训练数据并实时保存在spacy/dev.spacy中。
导致这个错误的相同数据在使用NER而不是SapnCat时运行正常,所以我认为这不是数据问题,正如您在之前共享的调试数据中所看到的。
您可以查看与此问题相关的讨论线程 13012 。
祝好。
46qrfjad7#
这是可以理解的。问题可能是SpanCat组件代码中的一个bug,但我们仍需要一致地重现崩溃以确定原因并修复它。如果您将来遇到此问题,并且可以共享触发崩溃的数据,请告知我们。