FastASR icon indicating copy to clipboard operation
FastASR copied to clipboard

多核CPU利用率与并发性能问题

Open acely opened this issue 2 years ago • 15 comments

测试环境Rocky Linux 8

简述:

在两台配置不同的机器上分别编译并测试paraformer_cli,在fftw和openblas版本都相同的前提下,识别同一个30分钟的音频文件,结果发现CPU更强的电脑跑的反而更慢。

可以看到两台机器的CPU都吃满了,机器A识别耗时75秒,机器B耗时120秒。

机器A:

  • AMD R5 3500X (6核6线程)*1颗
  • RAM 16G WX20230217-154014

机器B:

  • Intel E5-2680V4 (14核28线程)*2颗
  • RAM 32G WX20230217-151208

思考:

有没有可能线程太多反而导致cpu疲于调度?我目前还不清楚这个多线程是主程序openblas还是管理的,能否通过传参指定线程数量?这样方便测试线程与性能的关系。

指定线程数量还有个好处,就是我可以每个进程分配若干CPU内核,同时处理不同的文件。

acely avatar Feb 17 '23 09:02 acely

多线程完全是由openblas管理的可以通过环境变量指定 export OPENBLAS_NUM_THREADS=4

这个领域的问题太专业了,我回答不了。。。。

~~还有一个因素是内存的频率,机器B显然是台服务器,它每个核心的主频是在2.4G,所以我怀疑他的内存频率也不是很高。 30分钟的语音经过VAD大概有几十句话,或者100多句话,就说明需要将800M的模型从内存搬移到CPU几十次或者100多次,可能性能瓶颈在这里。可能性能是卡在IO上了。但我也是猜的,没有啥证据。。。。~~

chenkui164 avatar Feb 17 '23 09:02 chenkui164

mark 所以默认是跑满cpu核心数的线程 还是默认比如4?

cgisky1980 avatar Feb 18 '23 09:02 cgisky1980

@cgisky1980 目前默认是跑满CPU核心,其他情况我在测试

acely avatar Feb 18 '23 10:02 acely

是不是单核能效的原因? 至强核多,但是单核 不灵。在同样的线程数下速度有差异。也有可能是支持的指令集差异,比如虽然cpu较低,但是它支持新的指令,效率更高。

znsoftm avatar Feb 23 '23 06:02 znsoftm

E5 2680V4 是 Q1'16 比较老的平台,单核性能确实不如R5

znsoftm avatar Feb 23 '23 06:02 znsoftm

让它的多核 火力全开,估计能打得过

znsoftm avatar Feb 23 '23 06:02 znsoftm

让它的多核 火力全开,估计能打得过

哈哈,rapidocr的大佬也来了666 你看我的机器B截图,他已经火力全开了,但速度并不能上来

acely avatar Feb 24 '23 16:02 acely

fastasr代码里有部分是未进行多线程并行化的。 因为OpenBLAS有pthread版本和OpenMP两个版本。pthread版本性能会比OpenMP版本高一些。使用pthread版本的OpenBLAS,如果fastasr使用OpenMP优化,这两者会产生冲突,反而变的更慢了。

chenkui164 avatar Feb 25 '23 00:02 chenkui164

fastasr代码里有部分是未进行多线程并行化的。 因为OpenBLAS有pthread版本和OpenMP两个版本。pthread版本性能会比OpenMP版本高一些。使用pthread版本的OpenBLAS,如果fastasr使用OpenMP优化,这两者会产生冲突,反而变的更慢了。

我是通过源码编译安装的openblas(按照树莓派的流程),这样属于pthread版还是openmp版?

acely avatar Feb 25 '23 07:02 acely

近期测试结果如下,共测了3台机器: image 目前可以总结出大致规律:

  • 并非openblas线程数越多越好
  • 2线程比1线程提升较大,线程再多则提升较小
  • 线程数等于CPU物理核心数时效率最好

不足之处欢迎补充

acely avatar Feb 25 '23 09:02 acely

感谢,默认OpenBLAS是pthread版本的

chenkui164 avatar Feb 25 '23 10:02 chenkui164

如果方便,也可以测试一下这个: https://github.com/RapidAI/RapidASR

可以编译一个cpp版本,在cpp_onnx目录中。大体这个就是fastASR的onnx引擎版本。

znsoftm avatar Feb 25 '23 14:02 znsoftm

看了你上面的结果,感觉还是单核性能影响比较大。

znsoftm avatar Feb 25 '23 14:02 znsoftm

如果方便,也可以测试一下这个: https://github.com/RapidAI/RapidASR

可以编译一个cpp版本,在cpp_onnx目录中。大体这个就是fastASR的onnx引擎版本。

OK,测试结果我po在你的仓库里

acely avatar Feb 28 '23 05:02 acely

image 线程也不是越多越好 我在RK3588 (四大四小8核)上跑 4 线程看来最快

cgisky1980 avatar Mar 02 '23 17:03 cgisky1980