[深度学习]paddleocrv4模型推理要比v3版本慢很多原因

请问为何 Mkldnn 在 ChineseV4 下运行会比 Onnx 和 Openblas 慢很多?

资料来源:https://github.com/sdcb/PaddleSharp/issues/75

qaqz111 commented on Dec 6, 2023 • 

edited 

按 Readme 里面的说明来看,貌似 mkl 比 openblas 是要快的,
在我的机器(R7-5800H 16G Win10 22H2)上跑出来的耗时对比如下:

  • LocalFullModels.ChineseV3

    • PaddleDevice.Mkldnn() => 1.24秒
    • PaddleDevice.Openblas() => 2.1秒
    • PaddleDevice.Onnx() => 1.31秒
  • LocalFullModels.ChineseV4

    • PaddleDevice.Mkldnn() => 10.2秒(没错就是 10+ 秒)
    • PaddleDevice.Openblas() => 2.12秒
    • PaddleDevice.Onnx() => 1.6秒

ChineseV3 模型基本符合 Readme 的描述,
但是用 ChineseV4 模型 mkl 明显慢于其他两个,
而且其他两个跑 V4 也不如在 V3 上快。

上面的耗时数据是使用默认参数创建 PaddleOcrAll 对象的情况下得到的,
请问在参数上进行调整能让 V4 模型耗时降下来吗?
尤其是 mkl 的耗时,谢谢。

Contributor

n0099 commented on Dec 6, 2023 • 

edited 

intel oneapi mkldnn本就是amd黑
https://www.pugetsystems.com/labs/hpc/How-To-Use-MKL-with-AMD-Ryzen-and-Threadripper-CPU-s-Effectively-for-Python-Numpy-And-Other-Applications-1637/
software - Since MKL is not optimized for AMD hardware, should I use a math library specific to AMD, or would an open-source one be just as good? - Matter Modeling Stack Exchange
https://news.ycombinator.com/item?id=21732902
pytorch/pytorch#26534

而v4模型所需的新版本>2.5paddleinference所用的libmkldnn.so.0比之前版本更加amd黑了
我之前用v3模型在azure的ubuntu2204vmAMD EPYC 7763上跑起来跟Intel Xeon Platinum 8370C耗时差不多
但换v4模型和paddleinference>2.5后也像您这样慢了差不多10倍导致被迫换intelcpu

Author

qaqz111 commented on Dec 6, 2023 • 

edited 

intel oneapi mkldnn本就是amd黑 https://www.pugetsystems.com/labs/hpc/How-To-Use-MKL-with-AMD-Ryzen-and-Threadripper-CPU-s-Effectively-for-Python-Numpy-And-Other-Applications-1637/ software - Since MKL is not optimized for AMD hardware, should I use a math library specific to AMD, or would an open-source one be just as good? - Matter Modeling Stack Exchange https://news.ycombinator.com/item?id=21732902 pytorch/pytorch#26534

而v4模型所需的新版本>2.5paddleinference所用的libmkldnn.so.0比之前版本更加amd黑了 我之前用v3模型在azure的ubuntu2204vmAMD EPYC 7763上跑起来跟Intel Xeon Platinum 8370C耗时差不多 但换v4模型和paddleinference>2.5后也像您这样慢了差不多10倍导致被迫换intelcpu

我去。。。之前我也在网上搜了一圈,确实看到有说 mkl 对 AMD 负优化的,但是没有深入去找更多信息,还以为是谣言来着,想着可能是对 paddle 不熟研究看看调参数行不行。。。看来还是折腾下 GPU 环境吧。

感谢提供的链接,尤其是第一篇 post,基本能锤死 mkl 是个 amd 黑了 /泪奔

Contributor

n0099 commented on Dec 6, 2023 • 

edited 

您试试看我之前用于v3模型不那么amd黑的老版本2.4.2paddleinference能否使用v4模型并输出正常文本

Author

qaqz111 commented on Dec 7, 2023

谢谢,折腾一阵之后,用 mkl+V3 模型调整到了 0.7 秒完成一次识别,勉强算可以接受了。
我的工程目标是运行在windows环境下的C#程序,您提供的包是 linux 的二进制库和头文件,不能直接放进我现有的工程里,我对 linux 的开发也不是很熟,就不多折腾了,还是要感谢您提供的信息和帮助,谢谢!

Contributor

n0099 commented on Dec 7, 2023 • 

edited 

由百度编译的win的paddleinfer不就在下面 Paddle Lite
https://paddle-inference-lib.bj.bcebos.com/2.4.2/cxx_c/Windows/CPU/x86-64_avx-mkl-vs2017/paddle_inference_c.zip

Owner

sdcb commented on Dec 7, 2023 • 

edited 

这个好像也和AMD没有的关系,是和这个问题有关:PaddlePaddle/PaddleOCR#10346
三个排列组合时:V4模型、CPU不支持AVX512、Mkldnn
速度会变慢,上面3个排列组合任意一个不满足,速度都快

qaqz111 commented on Dec 7, 2023

这个好像也和AMD没有的关系,是和这个问题有关:PaddlePaddle/PaddleOCR#10346 三个排列组合时:V4模型、CPU不支持AVX512、Mkldnn 速度会变慢,上面3个排列组合任意一个不满足,速度都快

原来是这个原因,查了下 R7-5800H 确实不支持 AVX512,看来 mkl 在我现在用的机器上确实不适合跑 V4 模型,谢谢大佬解惑!

由百度编译的win的paddleinfer不就在下面 Paddle Lite https://paddle-inference-lib.bj.bcebos.com/2.4.2/cxx_c/Windows/CPU/x86-64_avx-mkl-vs2017/paddle_inference_c.zip

谢谢,因为目前调整到可以接受的程度了,我就没仔细看您发的链接地址,只打开链接下载的包看了下,我以为是您自己从源码编译的。那个飞桨的页面也多次翻到过,但是并没有下旧版本的回来试过(还没有走到那步吧,想先试试其他法子能不能解决问题),而且 VS C# 的开发习惯还是喜欢直接用一键安装的 nuget 包不用自己折腾,所幸现在已经调整出可以接受的方案了。并且楼上大佬已经指出了问题原因,不然可能确实还得按您说的逐个降级版本来试。

 qaqz111 closed this as completed on Dec 7, 2023

Contributor

n0099 commented on Dec 7, 2023

这个好像也和AMD没有的关系

然而22年9月amd发布的zen4microarch才支持avx512指令集
https://en.wikipedia.org/wiki/AVX-512#CPUs_with_AVX-512
https://news.ycombinator.com/item?id=36711033

查了下 R7-5800H 确实不支持 AVX512

EPYC7763和您的R7-5800H同属上一代zen3
等服务器级u慢慢换上去还得好几年,建议直接换18年cannonlakemicroarch起就部分支持了的intel u

我以为是您自己从源码编译的

我又不是百度员工,隔壁友商 @raoyutian 才是 raoyutian/PaddleOCRSharp#28 (comment)
自行编译百度这一套远古依赖链屎山项目简直就是梦魇 https://z.n0099.net/#narrow/near/83265

cc @yangbowen

那个飞桨的页面也多次翻到过,但是并没有下旧版本的回来试过

百度文档万年不更新最新版本url还停留在22年8月时的2.3.2
还好他们不同版本的预编译artifacts文件url都十分固定可以猜出来

由百度编译的win的paddleinfer不就在下面 paddleinference.paddlepaddle.org.cn/user_guides/download_lib.html#windows paddle-inference-lib.bj.bcebos.com/2.4.2/cxx_c/Windows/CPU/x86-64_avx-mkl-vs2017/paddle_inference_c.zip

Contributor

n0099 commented on Dec 8, 2023

迫真amd黑 https://z.n0099.net/#narrow/near/89147

 n0099 mentioned this issue 49 minutes ago

同样环境cpu版本测试发现paddleocrv4比v3版本要慢很多这是为啥 raoyutian/PaddleOCRSharp#38

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/356583.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

148基于matlab的带有gui的轮轨接触几何计算程序

基于matlab的带有gui的轮轨接触几何计算程序,根据不同的踏面和轨头,计算不同横移量下面的接触点位置。程序已调通,可直接运行。 148 matlab 轮轨接触 横移量 (xiaohongshu.com)

Android App开发基础(2)—— App的工程结构

本专栏文章 上一篇 Android开发修炼之路——(一)Android App开发基础-1 2 App的工程结构 本节介绍App工程的基本结构及其常用配置,首先描述项目和模块的区别,以及工程内部各目录与配置文件的用途说明;其次阐述两种级别…

【qt】switchBtn

方法1 在qtdesigner中设置按钮图标的三个属性,normal off 、normal on和checkabletrue。 from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5 import uic from switchBtn import Ui_Dialogclass Test(QDialog, Ui_…

如何使用Docker部署火狐浏览器并实现无公网ip远程访问

文章目录 1. 部署Firefox2. 本地访问Firefox3. Linux安装Cpolar4. 配置Firefox公网地址5. 远程访问Firefox6. 固定Firefox公网地址7. 固定地址访问Firefox Firefox是一款免费开源的网页浏览器,由Mozilla基金会开发和维护。它是第一个成功挑战微软Internet Explorer浏…

fastapi报错

初始化报错,非常低级错,扇自己10八张 app FastApi()

Java 集合 02 综合练习+基本数据类型对应的包装类

练习1、 自己写的代码&#xff1a; import java.util.ArrayList; public class practice {public static void main(String[] args) {//定义一个集合ArrayList<String> list new ArrayList<>();list.add("aaa");list.add("bbb");list.add(…

蓝桥杯备战——8.DS1302时钟芯片

1.分析原理图 由上图可以看到&#xff0c;芯片的时钟引脚SCK接到了P17,数据输出输入引脚IO接到P23,复位引脚RST接到P13。 2.查阅DS1302芯片手册 具体细节还需自行翻阅手册&#xff0c;我只截出重点部分 总结&#xff1a;数据在上升沿写出&#xff0c;下降沿读入&#xff0c;…

C# IP v4转地址·地名 高德

需求: IPv4地址转地址 如&#xff1a;输入14.197.150.014&#xff0c;输出河北省石家庄市 SDK: 目前使用SDK为高德地图WebAPI 高德地图开放平台https://lbs.amap.com/ 可个人开发者使用&#xff0c;不过有配额限制。 WebAPI 免费配额调整公告https://lbs.amap.com/news/…

C语言——O / 动态内存管理

一、为什么要有动态内存分配 我们已经掌握的内存开辟⽅式有&#xff1a; int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间 但是上述的开辟空间的⽅式有两个特点&#xff1a; • 空间开辟⼤⼩是固定的。 • 数组在申明的时候&am…

Java - JDBC

Java - JDBC 文章目录 Java - JDBC引言JDBC1 什么是JDBC2 MySQL数据库驱动3 JDBC开发步骤4 具体介绍 引言 思考: 当下我们如何操作数据库&#xff1f; 使用客户端工具访问数据库&#xff0c;手工建立连接&#xff0c;输入用户名和密码登录。编写SQL语句&#xff0c;点击执行…

每日OJ题_算法_前缀和②_牛客DP35 【模板】二维前缀和

目录 二维前缀和原理 ②牛客DP35 【模板】二维前缀和 解析代码 二维前缀和原理 在一维数组前缀和算法的基础上&#xff0c;想到&#xff1a;计算二维数组前缀和&#xff0c;不就和计算一维数组前缀和一样&#xff0c;即计算每一个位置的前缀和就相当于&#xff1a; 此位置的…

微信小程序开发学习笔记《13》WXS脚本

微信小程序开发学习笔记《13》WXS脚本 博主正在学习微信小程序开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读对应官方文档 一、WXS介绍 WXS ( WeiXin Script)是小程序独有的一套脚本语言&#xff0c;结合WXML&#xff0c;可以构建出页面的…

【Java与网络2】:HTTP核心知识与Curl工具

HTTP是当前应用最为广泛的通信协议&#xff0c;我们上网、玩游戏、刷视频、查美食都离不开HTTP协议。当我们做开发的时候&#xff0c; 需要经常和H5、Android、IOS、PC前端等不同团队的同学打交道&#xff0c;大家讨论的核心问题之一就是交互的时候协议怎么定&#xff0c;而这个…

###C语言程序设计-----C语言学习(6)#

前言&#xff1a;感谢老铁的浏览&#xff0c;希望老铁可以一键三连加个关注&#xff0c;您的支持和鼓励是我前进的动力&#xff0c;后续会分享更多学习编程的内容。 一. 主干知识的学习 1. while语句 除了for语句以外&#xff0c;while语句也用于实现循环&#xff0c;而且它…

Android 系统启动流程

依旧是带着问题再去学习 首先&#xff0c;Android是怎么启动的&#xff1f; Android服务是怎么启动的&#xff1f; Android线程是怎么切换的&#xff1f; Android ApplicationThread是怎么创建的&#xff1f; 那么接下来开始分析Android的启动流程 还是一步一图 先画一张流…

day27 回溯算法part3

39. 组合总和 中等 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限…

外汇天眼:Alpha Group International为股票回购计划拨款高达2,000万英镑

Alpha Group International plc&#xff0c;一家为企业和机构提供金融解决方案的公司&#xff0c;宣布计划启动股票回购程序&#xff0c;以购买每股面值为0.2便士的普通股。 该公司已经从其现金储备中拨款高达2,000万英镑用于回购计划。购买的普通股将被保留在公司的资本中。 …

合并有序链表---链表OJ---归并思想

https://leetcode.cn/problems/merge-two-sorted-lists/?envTypestudy-plan-v2&envIdtop-100-liked 将两个有序的链表合并为一个新的有序链表&#xff0c;那不就是和归并排序中最后合并的思想一样吗&#xff1f;只不过那里合并的是数组&#xff0c;这里合并的是链表。 首先…

数据分析入门指南:用 Python 开启数据之旅

文章目录 前言发现宝藏为什么选择 Python 进行数据分析&#xff1f;准备工作数据分析基础1. 数据加载2. 数据探索3. 数据清洗4. 数据可视化 探索更多可能性好书推荐总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方便日后回顾。…

小程序直播項目开发流程

点击登录功能&#xff0c;创建IM个人账户 以及 创建直播间群组 第一步&#xff1a;需要获取用户唯一的标识openid。 获取流程如下-点击登录按钮-通过wx.getUserProfile这个Api返回的res.userinfo信息获取用户头像昵称等-再通过wx.login的api获取用户的code-使用code再到服务器换…
最新文章