[深度学习]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.mzph.cn/news/655287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PostGIS】POSTGIS实现聚类统计提取外轮廓

项目需求根据某些条件进行聚类统计,然后返回聚类的外轮廓,这里主要用到POSTGIS的两个算法,一个是聚类统计功能,一个是提取外轮廓的功能。 1. 聚类统计 Postgis主要实现并提供了四种聚类方法,前两个为窗口函数&#x…

【动态规划】【图论】【C++算法】1575统计所有可行路径

作者推荐 【动态规划】【字符串】【行程码】1531. 压缩字符串 本文涉及知识点 动态规划汇总 图论 LeetCode1575统计所有可行路径 给你一个 互不相同 的整数数组,其中 locations[i] 表示第 i 个城市的位置。同时给你 start,finish 和 fuel 分别表示出…

RK3568 Android 13 系统裁剪

android 13 系统裁剪是个大工程,裁剪也是需要大量的测试,才能保证系统的稳定性,以下是RK官方给出的裁剪方案,有兴趣的可以去看一下,对裁剪不是要求过高的可以根据官方的建议,对系统进行裁剪: Rockchip And…

Web开发8:前后端分离开发

在现代的 Web 开发中,前后端分离开发已经成为了一种常见的架构模式。它的优势在于前端和后端可以独立开发,互不干扰,同时也提供了更好的可扩展性和灵活性。本篇博客将介绍前后端分离开发的概念、优势以及如何实现。 什么是前后端分离开发&am…

数据结构小练兵

二、程序填空 共1题 (共计18分) 第1题 (18.0分) 题号:316 难度:中 第1章 /*------------------------------------------------------- 【程序填空】 ----------------------------------------------…

Spring 学习1

1、什么是Spring Spring 是一款主流的 Java EE 轻量级开源框架 ,Spring 由“Spring 之父”Rod Johnson 提出并创立,其目的是用于简化 Java 企业级应用的开发难度和开发周期。Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言…

OpenHarmony隐藏应用(应用不在桌面显示,隐藏应用图标)

注意:此种方式是在OpenHarmony系统中生效 目录 一.找到UnsgnedReleasedProfileTemplate.json文件 二.修改 UnsgnedReleasedProfileTemplate.json文件 三.重新签名 一.找到UnsgnedReleasedProfileTemplate.json文件 什么是U

【书生·浦语大模型实战营】学习笔记目录

【书生浦语大模型实战营01】《书生浦语大模型全链路开源体系》【书生浦语大模型实战营02】《轻松玩转书生浦语大模型趣味Demo》学习笔记【书生浦语大模型实战营03】《基于 InternLM 和 LangChain 搭建你的知识库》学习笔记【书生浦语大模型实战营04】《(4)XTuner 大模型单卡低成…

5G安卓核心板开发板_MT6833天玑700规格参数

核心板采用沉金生产工艺,耐腐蚀抗干扰,支持-20℃-70℃环境下7x24小时稳定运行,尺寸仅为45mmx48mm x2.65mm,可嵌入到各种智能产品中,助力智能产品便携化及功能差异化。 联发科MT6833处理器采用台积电 7nm 制程的5G SoC…

log4j 日志级别及优先级排序

日志级别及优先级排序 : OFF(关闭) > fatal(致命错误) > error (错误) > warn (警告) > info(普通信息) > debug(调试信息) > TRACE > ALL(所有日志) 程序会打印 > 所设置级别的日志,故设置的日志等级越高,打印出来…

java里面File类的基本用法

File 类是 Java 中用于处理文件和目录的类。它提供了一些基本的文件和目录操作方法。以下是 File 类的一些基本用法: 创建 File 对象: 可以通过提供文件路径或目录路径来创建一个 File 对象。 // 创建 File 对象,指向文件 File file new Fil…

vue3 el-pagination 将组件中英文‘goto’ 修改 为 中文到‘第几’

效果如图&#xff1a; 要求&#xff1a;将英文中Go to 改为到第几 操作如下&#xff1a; <template><div class"paging"><el-config-provider :locale"zhCn"> // 注意&#xff1a;这是重要部分<el-pagination //分页组件根据官…

#Vue3篇:defineProps---withDefaults Vue3 中,有以下几种属性或函数不需要手动引入即可直接使用:

reactive<类型>({ }) defineProps import {defineProps} form vue import {type persons} from /types let props defineProps<{list?: Persons}>([a])withDefaults给默认值 import {defineProps,withDefaults} form vue import {type persons} from /typesl…

【C语言】exit函数详解

一、exit函数的定义 exit 函数是 C 标准库中的函数&#xff0c;其原型定义在 stdlib.h 头文件中。exit 函数的作用是终止当前程序的执行&#xff0c;并返回一个指定的退出码给操作系统。其基本用法如下&#xff1a; #include <stdlib.h>void exit(int status); 具体功能…

【寒假每日一题·2024】AcWing 5415. 仓库规划(补)

文章目录 一、题目1、原题链接2、题目描述 二、解题报告1、思路分析2、时间复杂度3、代码详解 一、题目 1、原题链接 5415. 仓库规划 2、题目描述 二、解题报告 1、思路分析 思路参考y总&#xff1a;y总讲解视频 &#xff08;1&#xff09;由于每一个仓库均有一个m维向量的位…

【leetcode刷刷】回溯:77.组合

77. 组合 第一次专门做回溯&#xff0c;有点难理解。首先可以理解回溯可以可视化为树的搜索&#xff0c;因此这道题&#xff0c;树的宽度为n&#xff0c;树的深度为kpath作为一个参数传入有点难想回溯没有返回值剪纸更难想&#xff0c;通过列算式可以勉强得到for的表达式&…

非阿里云注册域名如何在云解析DNS设置解析?

概述 非阿里云注册域名使用云解析DNS&#xff0c;按照如下步骤&#xff1a; 添加域名。 添加解析记录。 修改DNS服务器。 DNS服务器变更全球同步&#xff0c;等待48小时。 添加解析记录 登录云解析DNS产品控制台。 在 域名解析 页面中&#xff0c;单击 添加域名 。 在 …

Qt/C++音视频开发64-共享解码线程/重复利用解码/极低CPU占用/画面同步/进度同步

一、前言 共享解码线程主要是为了降低CPU占用&#xff0c;重复利用解码&#xff0c;毕竟在一个监控系统中&#xff0c;很可能打开了同一个地址&#xff0c;需要在多个不同的窗口中播放&#xff0c;形成多屏渲染的效果&#xff0c;做到真正的完全的画面同步&#xff0c;在主解码…

Linux:共享内存

文章目录 System V共享内存的原理管理共享内存shmgetshmatshmdtshmctl 共享内存和管道实现进程间同步通信 前面介绍完了匿名管道和命名管道&#xff0c;那么本篇要引入的主题是共享内存 System V 作为进程通信部分的内容&#xff0c;共享内存必然有其存在的意义和价值&#x…

批量将csv文件转成excel

本文主要用来处理将批量某种格式编码的的csv文件转成utf-8编码的excel文件import pandas as pd import os# 设定目录 dir_path "D:\\tmp_financial\DailyK\FullACSV" # 请将此处替换为你的CSV文件所在目录 des_path "D:\\tmp_financial\DailyK\FullAExcel&qu…