modelscope / FunASR

A Fundamental End-to-End Speech Recognition Toolkit and Open Source SOTA Pretrained Models, Supporting Speech Recognition, Voice Activity Detection, Text Post-processing etc.
https://www.funasr.com
Other
6.95k stars 739 forks source link

docker镜像funasr-runtime-sdk-online-cpu-0.1.11,每次链接建立都造成内存增加,断开后内存不下降 #2164

Closed EAGLE50 closed 2 weeks ago

EAGLE50 commented 3 weeks ago

Notice: In order to resolve issues more efficiently, please raise issue following the template. (注意:为了更加高效率解决您遇到的问题,请按照模板提问,补充细节)

🐛 Bug

docker镜像funasr-runtime-sdk-online-cpu-0.1.11,使用常规模型、支持热词的模型,在每次链接建立时都会造成内存增加(约100M),处理结束后,链接断开,内存并不下降。推理过程中,内存不增加。当服务持续运行(不重启),不断有链接的建立与断开时,将导致内存占用小幅地不断升高(每次链接约升高100M)。

To Reproduce

Steps to reproduce the behavior (always include the command you ran):

我所有的操作可概括为: 1.下载docker镜像。 docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.11 2.根据该版本镜像中funasr-wss-server-2pass.cpp文件所列的,下载modelscope中的最新模型文件。创建一个容器实例,映射模型下载的文件夹。原因是主机不连公网,通过本地方式加载模型文件。 3.修改run_server_2pass.sh脚本。 3.1将io_thread_num 和 model_thread_num的值固定写死

io_thread_num=$(( (decoder_thread_num + multiple_io - 1) / multiple_io ))

model_thread_num=1

io_thread_num=8 model_thread_num=4 3.2 注释掉重启服务的功能。

server_cmd="省略..."

mkdir -p /workspace/.config

echo $server_cmd > /workspace/.config/server_config

4.基于文档,通过nohup 方式启动服务,并通过websocket/build/bin/funasr-wss-client-2pass 发送测试音频 5.使用top命令观察内存变化情况。

Code sample

Expected behavior

尝试过常规模型:speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-onnx v2.0.5 尝试过热词模型:speech_paraformer-large-contextual_asr_nat-zh-cn-16k-common-vocab8404-onnx v2.0.5 两模型都是9月26号更新后的。 尝试过增加热词列表、不增加热词列表。推理过程中内存都不增加,但链接建立时内存增加,断开后内存不下降。从而导致如果有链接不断的建立与断开,会推高内存占用率。 贴几张测试时的top截图。 image image image image image

Environment

主机环境: 在docker镜像中运行的。 Linux系统 docker镜像funasr-runtime-sdk-online-cpu-0.1.11 32核CPU 520G内存

若bug为真,请给予确认回复,并期待修复。 若bug为假,请告知正确的处理过程,以规避当前我部署服务所出现的情况。 感谢!!!

Additional context

lyblsgo commented 3 weeks ago

可能是计算线程的资源开销、onnxruntime的内存cache、或者释放的内存扔被保留在进程的内部池中,以备将来重新分配,内存应该不是线性增长的,可以把计算线程decoder_thread_num设置为1,然后循环调用几十次观察下内存情况

EAGLE50 commented 2 weeks ago

可能是计算线程的资源开销、onnxruntime的内存cache、或者释放的内存扔被保留在进程的内部池中,以备将来重新分配,内存应该不是线性增长的,可以把计算线程decoder_thread_num设置为1,然后循环调用几十次观察下内存情况

十分感谢!已验证,无问题。 验证内容包括:在热词模型+5000多个热词列表的情况下,将值设定为: 第一:decoder=1,io=1,model=1,此时内存从1.5g涨到1.7g后保存不变,链接建立与断开无内存泄漏 第二:decoder=32,io=2,model=1,此时内存从1.5g涨到2.1g后保存不变,链接建立与断开无内存泄漏 第三:decoder=32,io=8,model=4,此时内存从1.5g涨到2.5g后保存不变,链接建立与断开无内存泄漏

simple0918 commented 2 weeks ago

可能是计算线程的资源开销、onnxruntime的内存cache、或者释放的内存扔被保留在进程的内部池中,以备将来重新分配,内存应该不是线性增长的,可以把计算线程decoder_thread_num设置为1,然后循环调用几十次观察下内存情况

十分感谢!已验证,无问题。 验证内容包括:在热词模型+5000多个热词列表的情况下,将值设定为: 第一:decoder=1,io=1,model=1,此时内存从1.5g涨到1.7g后保存不变,链接建立与断开无内存泄漏 第二:decoder=32,io=2,model=1,此时内存从1.5g涨到2.1g后保存不变,链接建立与断开无内存泄漏 第三:decoder=32,io=8,model=4,此时内存从1.5g涨到2.5g后保存不变,链接建立与断开无内存泄漏

我也遇到这样的问题,请问你是怎么解决的?