chenkui164 / FastASR

这是一个用C++实现ASR推理的项目,它依赖很少,安装也很简单,推理速度很快,在树莓派4B等ARM平台也可以流畅的运行。 支持的模型是由Google的Transformer模型中优化而来,数据集是开源wenetspeech(10000+小时)或阿里私有数据集(60000+小时), 所以识别效果也很好,可以媲美许多商用的ASR软件。
Apache License 2.0
481 stars 74 forks source link

模型载入时间会波动,不是越来越快,不知道原因在哪里? #3

Closed zhangzuoxing closed 2 years ago

zhangzuoxing commented 2 years ago

之前在一个容器中已经编译完成,换了镜像和容器后,代码未编译。连续执行几次的结果如下: Audio time is 4.996812 s. Model initialization takes 0.461134s result: "我认为跑步最重要的就是给我带来了身体健康" Model inference takes 2.875384s. root@73f4a5fab136:/home/zzx/FastASR# ./fastasr zh.wav Audio time is 4.996812 s. Model initialization takes 4.263952s result: "我认为跑步最重要的就是给我带来了身体健康" Model inference takes 4.264060s. root@73f4a5fab136:/home/zzx/FastASR# ./fastasr zh.wav Audio time is 4.996812 s. Model initialization takes 6.293821s result: "我认为跑步最重要的就是给我带来了身体健康" Model inference takes 3.684860s. root@73f4a5fab136:/home/zzx/FastASR# ./fastasr zh.wav Audio time is 4.996812 s. Model initialization takes 7.392206s result: "我认为跑步最重要的就是给我带来了身体健康" Model inference takes 4.314208s.

chenkui164 commented 2 years ago

模型载入时间主要是消耗在讲wenet_param.bin这个450MB大小的文件从硬盘读取到内存中。理论上每次启动fastasr时,都从硬盘拷贝450MB至内存中,结束fastasr时会将内存释放掉。但是由于linux的缓存机制,内存只是表面上被释放了,而450MB的模型数据还在内存中,当linux系统中其他应用程序需要内存,而linux又没有多余的内存了,才会将这部分缓存给其他应用程序。

所以理论上当第一次执行完程序后,后面几次模型的载入时间是很短暂的。但是由于你用了docker,并且主机的资源的内存不是特别充裕的情况下,是会出现模型加载时间波动的情况的。