Open acely opened 1 year ago
多线程完全是由openblas管理的可以通过环境变量指定 export OPENBLAS_NUM_THREADS=4
这个领域的问题太专业了,我回答不了。。。。
~~还有一个因素是内存的频率,机器B显然是台服务器,它每个核心的主频是在2.4G,所以我怀疑他的内存频率也不是很高。 30分钟的语音经过VAD大概有几十句话,或者100多句话,就说明需要将800M的模型从内存搬移到CPU几十次或者100多次,可能性能瓶颈在这里。可能性能是卡在IO上了。但我也是猜的,没有啥证据。。。。~~
mark 所以默认是跑满cpu核心数的线程 还是默认比如4?
@cgisky1980 目前默认是跑满CPU核心,其他情况我在测试
是不是单核能效的原因? 至强核多,但是单核 不灵。在同样的线程数下速度有差异。也有可能是支持的指令集差异,比如虽然cpu较低,但是它支持新的指令,效率更高。
E5 2680V4 是 Q1'16 比较老的平台,单核性能确实不如R5
让它的多核 火力全开,估计能打得过
让它的多核 火力全开,估计能打得过
哈哈,rapidocr的大佬也来了666 你看我的机器B截图,他已经火力全开了,但速度并不能上来
fastasr代码里有部分是未进行多线程并行化的。 因为OpenBLAS有pthread版本和OpenMP两个版本。pthread版本性能会比OpenMP版本高一些。使用pthread版本的OpenBLAS,如果fastasr使用OpenMP优化,这两者会产生冲突,反而变的更慢了。
fastasr代码里有部分是未进行多线程并行化的。 因为OpenBLAS有pthread版本和OpenMP两个版本。pthread版本性能会比OpenMP版本高一些。使用pthread版本的OpenBLAS,如果fastasr使用OpenMP优化,这两者会产生冲突,反而变的更慢了。
我是通过源码编译安装的openblas(按照树莓派的流程),这样属于pthread版还是openmp版?
近期测试结果如下,共测了3台机器:
目前可以总结出大致规律:
不足之处欢迎补充
感谢,默认OpenBLAS是pthread版本的
如果方便,也可以测试一下这个: https://github.com/RapidAI/RapidASR
可以编译一个cpp版本,在cpp_onnx目录中。大体这个就是fastASR的onnx引擎版本。
看了你上面的结果,感觉还是单核性能影响比较大。
如果方便,也可以测试一下这个: https://github.com/RapidAI/RapidASR
可以编译一个cpp版本,在cpp_onnx目录中。大体这个就是fastASR的onnx引擎版本。
OK,测试结果我po在你的仓库里
线程也不是越多越好 我在RK3588 (四大四小8核)上跑 4 线程看来最快
测试环境Rocky Linux 8
简述:
在两台配置不同的机器上分别编译并测试paraformer_cli,在fftw和openblas版本都相同的前提下,识别同一个30分钟的音频文件,结果发现CPU更强的电脑跑的反而更慢。
可以看到两台机器的CPU都吃满了,机器A识别耗时75秒,机器B耗时120秒。
机器A:
机器B:
思考:
有没有可能线程太多反而导致cpu疲于调度?我目前还不清楚这个多线程是主程序openblas还是管理的,能否通过传参指定线程数量?这样方便测试线程与性能的关系。
指定线程数量还有个好处,就是我可以每个进程分配若干CPU内核,同时处理不同的文件。