Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
zhangyudong0215 opened this issue Feb 5, 2018 · 28 comments

Comments

@zhangyudong0215
Copy link

zhangyudong0215 commented Feb 5, 2018

问题类型

疑似内存泄漏

出错场景

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

如何复现这一问题

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

运行环境

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

期望结果

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

@yongyuan923
Copy link

语义标注出现错误:

[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
Copy link
Author

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

@yongyuan923
Copy link

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

default

@yongyuan923
Copy link

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

@liu946
Copy link

liu946 commented Mar 31, 2018

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

@yongyuan923
Copy link

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

@zhangyudong0215
Copy link
Author

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

@luyunliang
Copy link

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

@ws0zzg4569
Copy link

ws0zzg4569 commented Jul 2, 2018

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

@zhuyuuyuhz
Copy link

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

@Single430
Copy link

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

@xiaobaidong369
Copy link

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

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

@FlowerRoad1996
Copy link

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

@wenfeixiang1991
Copy link

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

@carfly
Copy link
Member

carfly commented Apr 19, 2019 via email

@wenfeixiang1991
Copy link

@carfly 好的,太感谢啦!

@AlongWY
Copy link

AlongWY commented May 17, 2019

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

@wenfeixiang1991
Copy link

wenfeixiang1991 commented May 22, 2019 via email

@wenfeixiang1991
Copy link

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

@jiangweisuc
Copy link

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

@zhihao-chen
Copy link

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

@YanghangXu
Copy link

我们正在想办法解决这个问题,不过由于是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
Copy link

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

@laceylam
Copy link

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

default

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

@kruskr
Copy link

kruskr commented Mar 19, 2020

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

@helloGbWorld
Copy link

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

@star-0001
Copy link

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

@zengzhixian1995
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests