Skip to content
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

linux下的预测速度是否与windows存在差异 #8

Closed
w-Bro opened this issue Nov 9, 2021 · 10 comments
Closed

linux下的预测速度是否与windows存在差异 #8

w-Bro opened this issue Nov 9, 2021 · 10 comments

Comments

@w-Bro
Copy link

w-Bro commented Nov 9, 2021

请问大佬有没有测试过在linux运行agentocr与windows下的性能差异,感觉速度差距有点大,条件限制没办法比对完全一样的硬件环境,只是猜测是不是和系统有关?

  1. 以下环境都是基于python3.7.10,agentocr 1.2.0,预测同一张图片
  2. 本地环境是笔记本电脑,win10,CPU是AMD Ryzen 7 5800H,8核16线程,预测得到结果耗时是2.5秒以内
  3. 一台Linux服务器,Centos7,是由Intel(R) Xeon(R) CPU E5-2680 v4划出来的4核虚拟机,预测得到结果耗时是在7.2秒以内
  4. 由上面笔记本电脑运行的VirtualBOX划分了4个CPU(VB上面显示有16个CPU,猜测应该是划分了4个核心线程出来)的虚拟机,Centos7,预测得到结果耗时也和第二点的linux服务器接近
  5. 一台windows服务器,winserver2012,是由Intel i7-8700划出来的2核虚拟机,预测得到结果耗时是在4.7秒以内

image
image

从任务运行情况来看,windows环境下在任务管理器可以看出,预测过程中所有核心都是参与工作的
而linux环境通过top命令能看出CPU占用最高只能到200%,理论上4核心应该能到400%,是不是所有核心没有参与工作导致预测速度比较慢?条件有限,笔记本的CPU和台式服务器的CPU也没有直接的性能比较可以参考,但即便是比较旧的服务器CPU也不会跟7nm的AMD笔记本CPU有这么大差距吧,如果有大佬们测试过或者知道原因希望能告知一下!!

@jm12138
Copy link
Member

jm12138 commented Nov 9, 2021

感觉引起性能差异的应该是 onnxruntime,请问所使用的环境中 onnxruntime 的版本是一致的吗?还有测试运行时间时,有没有提前加载模型进行预热,还是只测试了第一张图片的运行速度?

@w-Bro
Copy link
Author

w-Bro commented Nov 9, 2021

感觉引起性能差异的应该是 onnxruntime,请问所使用的环境中 onnxruntime 的版本是一致的吗?还有测试运行时间时,有没有提前加载模型进行预热,还是只测试了第一张图片的运行速度?

onnxruntime是一样的,1.8.1,图片多次测试过,没有明显变化,而且我看warmup默认为True,也是有预热的。

@w-Bro
Copy link
Author

w-Bro commented Nov 12, 2021

@jm12138 microsoft/onnxruntime#9732
在onnxruntime问了下,让我设置intra_op_num_thread这个参数,我改了但也还是一样,不过好像发现和模型也有关系,ch_s_rec这个模型在window跟centos预测速度是有差异的,ch_v2_c_rec这个模型在两个系统的速度倒是接近,会不会是ch_s_rec在转换onnx的时候有什么不同?

@GT-ZhangAcer
Copy link
Member

GT-ZhangAcer commented Nov 12, 2021

我感觉是指令集的可能性会更大一些,不管是5800H还是8700,对AVX512支持要优于E5-2680,不同操作系统对指令集的优化也是有区别的。
尽管深度学习并不严格要求使用AVX512,但这个指令集支持越好,速度也会越快。

@w-Bro
Copy link
Author

w-Bro commented Nov 12, 2021

我感觉是指令集的可能性会更大一些,不管是5800H还是8700,对AVX512支持要优于E5-2680,不同操作系统对指令集的优化也是有区别的。 尽管深度学习并不严格要求使用AVX512,但这个指令集支持越好,速度也会越快。

这一块就不太了解了,最开始确实是怀疑CPU+OS引起的环境差异导致的,但是今天同样都换了ch_v2_c_rec作为识别模型,发现速度已经几乎相等,所以感觉还是在ch_s_rec这个模型转换过程或者onnxruntime有针对性的兼容性问题。

@GT-ZhangAcer
Copy link
Member

这个并不是充要条件,网络设计不同,AVX带来的效果也是不同的

@snnn
Copy link

snnn commented Nov 12, 2021

你设置完intra_op_num_thread之后CPU usage如何,速度如何?

你给的两个CPU都没有AVX512。onnxruntime会使用AVX512加速。AVX512的影响很大。

E5-2680 v4虽然有14个核,但是它的基础频率很低,只有2.4G. 你只分4个核出来,那当然很慢了。2.4 x 4=9.6。相比而下AMD Ryzen 7 5800H 3.2 x 8=25.6。 这两个相差2.6倍啊。和你说的7.2秒vs2.5秒很吻合。不过那个E5-2680 v4是server的cpu,应该可以更快。

@w-Bro
Copy link
Author

w-Bro commented Nov 13, 2021

你设置完intra_op_num_thread之后CPU usage如何,速度如何?

你给的两个CPU都没有AVX512。onnxruntime会使用AVX512加速。AVX512的影响很大。

E5-2680 v4虽然有14个核,但是它的基础频率很低,只有2.4G. 你只分4个核出来,那当然很慢了。2.4 x 4=9.6。相比而下AMD Ryzen 7 5800H 3.2 x 8=25.6。 这两个相差2.6倍啊。和你说的7.2秒vs2.5秒很吻合。不过那个E5-2680 v4是server的cpu,应该可以更快。

了解,我重新在虚拟机分配了8个CPU(应该是4核8线程),cpu占用能到360%,速度也有两秒的提升。

@w-Bro w-Bro closed this as completed Nov 13, 2021
@SuperLee188
Copy link

onnxruntime会使用AVX512加速
想请教一下这个可以理解为对于支持AVX指令集的CPU,OnnxRuntime默认会使用AVX512加速吗

@jm12138
Copy link
Member

jm12138 commented Jul 18, 2022

onnxruntime会使用AVX512加速
想请教一下这个可以理解为对于支持AVX指令集的CPU,OnnxRuntime默认会使用AVX512加速吗

这个得去onnxruntime那问了,具体我也不清楚

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants