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
pipeline添加自定义function后, 循环使用内存溢出 #1437
Comments
感谢汇报,我认为OOV的问题是你那一万篇文章中有一篇含有特别长的句子,你可以试试写个函数限制句子长度看看会不会OOV。 tracemalloc的汇报未必是真实的内存占用,而是包含未被垃圾回收的内存占用,我发现仅使用tokenizer的时候内存没有显著增长 pipeline = hanlp.pipeline() \
.append(hanlp.utils.rules.split_sentence, output_key='sentences') \
.append(tokenizer, output_key='tokens') \
# .append(tagger, output_key='tags') \
# .append(hanlp_get_tokens, input_key=('tokens', 'tags'), output_key='target_token') 而一旦加入了tagger, |
何老师可以看到, 我上方提供的代码里面其实就是同一个句子反复预测, 但是内存还是上涨。
但是还是没有办法解决根本问题。。。用了这一套过后跑4000个iter也OOV了。 我不知道以下两个issue是否related, 供何老师参考: Memory leak in model.fit #37505 Repeatedly calling 如果是的话是不是就是tf2的bug, 因为据汇报tf1.15 - 没有上述问题。 |
fasttext可能本身就要占用几个G。是增长量达到5个G吗?
不过我没有在hanlp.com的服务器上观察到内存泄露的情况。跟python代码不同,我用的是tensorflow_serving提供服务,从上线到现在没有重启过。 我也单独测过 |
经过测试, 每一轮都
显著降低了内存溢出。 然而, 3个小时后python内存实际使用量达到了8个G。 |
仅运行HanLP的代码不运行tensorflow的predict不会导致内存泄露: transform:TxtBMESFormat = tokenizer.transform
for index, i in enumerate(tqdm([text] * 20000)):
# title_counters = Counter(title_token)
# res = pipeline(i)
# content_counters = Counter(content_token)
transform.Y_to_outputs(tf.zeros((5, 4)), inputs=list('商品和服务'))
snapshot = tracemalloc.take_snapshot()
display_top(snapshot) |
我也是和他一样的问题,并且在GPU上经过测试时,同一个句子循环,句子长度不长,一个句20个字。我自己用一块GPU,发现显存会增长(并不是持续增长),最后都会显存占满,导致报错OOM |
已确定是TensorFlow的问题,正在等TF社区回复。 |
好的,谢谢何老师回复 |
官方说能够复现这个bug。想想觉得tf也不过如此,这么大的项目竟然有这种致命的错误。你们介意在生产环境中用PyTorch吗? |
我也比较震惊, 一开始自己debug的时候就觉得不可能是tf内存溢出, 结果查着查着发现还真有可能是。。。 其实我们生产环境是用的tf1.15, 在这里用hanlp的tf2.1 也是出于一个技术验证的方向。 因此, 只要能够dockerize我觉得问题都不大啊。 tensorflow还有一个好处是对java的支持, 这个是pytorch现阶段做不了的吧 |
pytorch的部署现在还赶不上TensorFlow。且看tf官方修复这个bug的速度怎么样,再决定要不要主力转PyTorch吧。反正做research比较倾向于PyTorch,只要在HanLP现有框架下实现一个TorchComponent就行了。 |
如能推出pytorch版,对很多喜好用pytorch的学习者来说也是一个福音 |
虽然research倾向于pytorch, 但是research完了过后就是工程化落地的事情,转起来也比较麻烦。。不过就像@heibaicai说的,
话说回来, 超大型语料有没有estimate releasing time呀? 戳手手。。。。 |
语料库本身版权受限,但这上面的大型语言模型应该会在暑假发布。 |
感谢回复~ 期待~ |
可怕, 两个月过去了这个issue tf 社区一动都没动, bug不修复hanlp 2.0就没法投产, 血崩 |
的确,对tf失望了,已经开始用PyTorch重写了部分模块,beta版还是得靠PyTorch挑大梁。 |
Hi @luoy2 ,TF对这个bug一直无所作为。部署的时候用tensorflow_serving就可以跳过这个问题。 HanLP2.1发布了PyTorch后端,欢迎使用 https://github.com/hankcs/HanLP/tree/doc-zh |
Describe the bug
我需要在tokenizer和tagger后, 直接取到一个"token/tag"拼接的词。故此添加了一个
hanlp_get_tokens
的function append在pipline里。 详情见下方代码。实际任务需要预测一万篇文章的分词和tag; 然而在gpu环境下跑大概1/10的loop时oop;
disable了GPU, 用
tracemalloc
查看发现transform\txt.py
内存溢出。Code to reproduce the issue
Provide a reproducible test case that is the bare minimum necessary to generate the problem.
Describe the current behavior
可以看到的是, 随着iteration数目增加,
word += c
这里的内存也不断增加。。。但是我翻来覆去看那段代码完全没看出问题, 故此只能提出issue, 期待何老师看看。具体log已经附上。Expected behavior
loop prediction不会增加内存使用
System information
Other info / logs
log gist
The text was updated successfully, but these errors were encountered: