HIT-SCIR / pyltp

pyltp: the python extension for LTP
1.53k stars 352 forks source link

发现语义角色标注过程可能存在内存泄漏,请确认,谢谢! #141

Open zhangyudong0215 opened 6 years ago

zhangyudong0215 commented 6 years ago

问题类型

疑似内存泄漏

出错场景

我们对经过预处理(去重、去除特殊符号、分句)之后的一系列句子调用pyltp的接口进行分析。分词、词性标注、依存句法分析和命名实体识别这四部分运行未见异常,但是调用语义角色标注功能会导致python程序占用内存大幅度且持续增加,我们判断这里可能存在python内存泄漏。更换语料或是python版本,问题均存在。

如何复现这一问题

连续对数百个句子进行语义角色标注即会遇到上述内存占用大幅度增加的问题。

运行环境

ubuntu 16.04 LTS
python3.6.3 pyltp版本 0.2.1 模型版本 3.4.0

期望结果

请开发者确认这个问题(语义角色标注时占用内存剧增)是否是内存泄漏。非常感谢!

yongyuan923 commented 6 years ago

语义标注出现错误:

[dynet] random seed: 2633395616 [dynet] allocating memory: 2000MB [dynet] memory allocation done. Traceback (most recent call last): File "C:\Users\Administrator\Desktop\222.py", line 74, in roles = role_label(words,tags,netags,arcs) File "C:\Users\Administrator\Desktop\222.py", line 52, in role_label roles = labeller.label(words, postags, netags, arcs) # 语义角色标注 Boost.Python.ArgumentError: Python argument types in SementicRoleLabeller.label(SementicRoleLabeller, list, VectorOfString, VectorOfString, VectorOfParseResult) did not match C++ signature: label(struct SementicRoleLabeller {lvalue}, class boost::python::list, class boost::python::list, class std::vector<struct std::pair<int,class std::basic_string<char,struct std::char_traits,class std::allocator > >,class std::allocator<struct std::pair<int,class std::basic_string<char,struct std::char_traits,class std::allocator > > > >) label(struct SementicRoleLabeller {lvalue}, class boost::python::list, class std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::allocator<class std::basic_string<char,struct std::char_traits,class std::allocator > > >, class std::vector<struct std::pair<int,class std::basic_string<char,struct std::char_traits,class std::allocator > >,class std::allocator<struct std::pair<int,class std::basic_string<char,struct std::char_traits,class std::allocator > > > >) label(struct SementicRoleLabeller {lvalue}, class std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::allocator<class std::basic_string<char,struct std::char_traits,class std::allocator > > >, class boost::python::list, class std::vector<struct std::pair<int,class std::basic_string<char,struct std::char_traits,class std::allocator > >,class std::allocator<struct std::pair<int,class std::basic_string<char,struct std::char_traits,class std::allocator > > > >) label(struct SementicRoleLabeller {lvalue}, class std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::allocator<class std::basic_string<char,struct std::char_traits,class std::allocator > > >, class std::vector<class std::basic_string<char,struct std::char_traits,class std::allocator >,class std::allocator<class std::basic_string<char,struct std::char_traits,class std::allocator > > >, class std::vector<struct std::pair<int,class std::basic_string<char,struct std::char_traits,class std::allocator > >,class std::allocator<struct std::pair<int,class std::basic_string<char,struct std::char_traits,class std::allocator > > > >) 请问你的问题解决了吗?

zhangyudong0215 commented 6 years ago

如果你仔细看我的ID的话, 你会有种特别熟悉的感觉... 我在ltp提过这个issue, 但是仍然没有解决, 可能需要下一个版本这个问题才会得到修复.

yongyuan923 commented 6 years ago

我现在解决了这个问题: 我是把语义角色标注中的这句roles = labeller.label(words, postags, netags, arcs) # 语义角色标注 改为:roles = labeller.label(words, postags,arcs)。 然后程序就能输出正确的运行结果。

default

yongyuan923 commented 6 years ago

但是我在这里面加入外部词典,就陷入了死循环。上面的回复是在没有加入外部词典的情况下运行的。

liu946 commented 6 years ago

@yongyuan923 srl不支持外部词典的。而且你在这个issue下回复的问题跟发起issue的问题并不相关啊。

yongyuan923 commented 6 years ago

非常感谢您的回复。 下次会注意了。

zhangyudong0215 commented 6 years ago

建议看看0.20的文档,srl不需要输入netags,此issue的问题是疑似内存泄漏。

luyunliang commented 6 years ago

循环语义角色标注的时候,确实存在内存泄漏的问题。 即使每次使用完都release一次,还是会不停的泄漏。

ws0zzg4569 commented 6 years ago

是的 的确有这个问题 更新过后。。。话说有没有同学遇到在linux下model not loaded的问题,我在win下面跑得好好的 移植去ubuntu就model not loaded

zhuyuuyuhz commented 5 years ago

windows环境下,pyltp 3.4.0 循环标注出现内存溢出情况,每次release之后还是会有溢出,希望能够得到解决,谢谢

Single430 commented 5 years ago

pyltp==0.2.1 依然遇到 语义角色标注 出现内存泄露问题,希望可以解决

xiaobaidong369 commented 5 years ago

pyltp==0.2.1 依然遇到 语义角色标注 出现内存泄露问题,希望可以解决

请问pyltp0.2.1下载3.40模型包提示Segment:model not loaded

FlowerRoad1996 commented 5 years ago

pyltp==0.2.1仍然出现语义角色标注的内存泄漏问题,希望可以解决。

wenfeixiang1991 commented 5 years ago

@zhangyudong0215 这个项目不再维护了,内存泄漏的问题我们能想办法解决一下吗? #198

carfly commented 5 years ago

我们正在想办法解决这个问题,不过由于是dynet的原因,所以不是很好解决,希望能尽快搞定吧。

-Wanxiang (http://ir.hit.edu.cn/~car/)

On Fri, Apr 19, 2019 at 4:23 PM Feixiang.Wen notifications@github.com wrote:

@zhangyudong0215 https://github.com/zhangyudong0215 这个项目不再维护了,内存泄漏的问题我们能想办法解决一下吗? #198 https://github.com/HIT-SCIR/pyltp/issues/198

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/HIT-SCIR/pyltp/issues/141#issuecomment-484806169, or mute the thread https://github.com/notifications/unsubscribe-auth/AAAKRGCDHEDDZHC2FGKK7YDPRF6OVANCNFSM4EPDSELQ .

wenfeixiang1991 commented 5 years ago

@carfly 好的,太感谢啦!

AlongWY commented 5 years ago

@wenfeixiang1991 目前我们复现的结果显示没有明显的内存泄漏,在测试多次调用语义角色标注时没有出现你所说的情况,而是保持在一个稳定的水平。调用语义角色标注功能会导致python程序占用内存大幅度且持续增加这一点并没有复现成功,如果可能的话,希望你可以提供一下具体的泄露场景(语料和代码等)。

wenfeixiang1991 commented 5 years ago

好的,没问题,我稍后整理一下代码和语料发给您

闻飞翔 邮箱:wenfeixiang1991@163.com

签名由 网易邮箱大师 定制

在2019年05月17日 10:02,Along 写道:

@wenfeixiang1991 目前我们复现的结果显示没有明显的内存泄漏,在测试多次调用语义角色标注时没有出现你所说的情况,而是保持在一个稳定的水平。调用语义角色标注功能会导致python程序占用内存大幅度且持续增加这一点并没有复现成功,如果可能的话,希望你可以提供一下具体的泄露场景(语料和代码等)。

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

wenfeixiang1991 commented 5 years ago

@AlongWY 您调用 SRL 时内存占用稳定在多少?

jiangweisuc commented 5 years ago

我也遇到这个问题,内存一直慢慢飙升,强制python垃圾回收也不起作用,内存占用用2G到32G,没有内存了,程序就死掉了,大概调用了150次小短句子的语义角色标注。

zhihao-chen commented 5 years ago

我是本打算连续处理1百万条数据的,结果只到30万就爆了

YanghangXu commented 5 years ago

我们正在想办法解决这个问题,不过由于是dynet的原因,所以不是很好解决,希望能尽快搞定吧。 -Wanxiang (http://ir.hit.edu.cn/~car/) On Fri, Apr 19, 2019 at 4:23 PM Feixiang.Wen @.***> wrote: @zhangyudong0215 https://github.com/zhangyudong0215 这个项目不再维护了,内存泄漏的问题我们能想办法解决一下吗? #198 <#198> — You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub <#141 (comment)>, or mute the thread https://github.com/notifications/unsubscribe-auth/AAAKRGCDHEDDZHC2FGKK7YDPRF6OVANCNFSM4EPDSELQ .

车教授您好,请问修复这个问题是要涉及到dynet这个package的修改吗,您那边大概什么时候能解决这个问题,谢谢

JinmingZhao commented 4 years ago

我也遇到了这个问题,不清楚现在修复了没有,大约处理5000条数据的时候,RES 从 8G 到 14G。

laceylam commented 4 years ago

我现在解决了这个问题: 我是把语义角色标注中的这句roles = labeller.label(words, postags, netags, arcs) # 语义角色标注 改为:roles = labeller.label(words, postags,arcs)。 然后程序就能输出正确的运行结果。

default

跟你的bug一样,但是你的解决方法不适用,请问还有其他方法吗?

kruskr commented 4 years ago

@zhangyudong0215 @yongyuan923 @ws0zzg4569 老哥们问题解决了没

helloGbWorld commented 3 years ago

也碰到这个问题,发现对于较长的句子容易出现内存爆炸问题,问题不在于数据量,在于当前处理句子的长度,我解决的方式是对长句子切分成短句子,处理完一句后,再sleep 1到2秒,等内存释放掉再处理下一句,这样的方式可能对SRL结果会有影响,仅供参考

star-0001 commented 2 years ago

也碰到这个问题 [dynet] random seed: 1454617344 [dynet] allocating memory: 2000MB [dynet] memory allocation done. 想问一下这个问题解决了吗

zengzhixian1995 commented 6 months ago

想问下这个问题有解决方案吗?