在NPU單算子(torch_npu )執行時如何進行性能優化?以MinerU為例

1 MinerU介紹

在AI技術快速發展的今天,大量非結構化數據的處理成為亟待解決的問題。尤其是PDF文檔,作為最常見的文件格式之一,如何高效準確地提取其中的信息,成為了許多企業和研究機構的痛點。上海人工智能實驗室(上海AI實驗室)大模型數據基座OpenDataLab團隊開源了全新的智能數據提取工具——MinerU,旨在解決這一問題。

MinerU能夠將混合了圖片、公式、表格、腳注等復雜元素的PDF文檔轉化為Markdown和JSON格式,大幅提升了AI語料的準備效率。憑借快速準確、開源易用的能力特性,MinerU受到廣大用戶及大模型開發者青睞,上線八個月,GitHub星標數已接近3萬,被開發者譽為"大模型時代的文檔提取、轉換神器"。

MinerU是由上海人工智能實驗室OpenDataLab團隊開發的開源文檔解析工具,致力于解決大模型(LLM)訓練和RAG(檢索增強生成)應用中高質量結構化數據的提取難題。自2024年7月開源以來,GitHub星標數迅速突破2.5萬,成為開發者社區的熱門選擇。其核心價值在于將復雜文檔(如PDF、網頁、電子書)轉換為機器可讀的Markdown、JSON格式,同時保留原始文檔的語義邏輯與多模態元素。

獲取MinerU 官方PPT:PDF 解析神器
MinerU.pdf

MinerU官網:MinerU

MinerU代碼地址:GitHub - opendatalab/MinerU: A high-quality tool for
convert PDF to Markdown and
JSON.一站式開源高質量數據提取工具,將PDF轉換成Markdown和JSON格式。

MinerU 線上demo入口:MinerU

本篇文章通過介紹其在NPU的單算子模式下的一些性能優化的手段。這些手段也可以給其他模型在torch_npu下的使用提供一些優化指導。

torch_npu上的性能調優指南,大家可以關注
PyTorch模型在NPU上的調優

2 torch_npu性能優化

2.1 綁核優化

在PyTorch的訓練或推理場景,可以通過設置環境變量CPU_AFFINITY_CONF來控制CPU端算子任務的處理器親和性,即設定任務綁核。該配置能夠優化任務的執行效率,避免跨 NUMA(非統一內存訪問架構)節點的內存訪問,減少任務調度開銷。

可選的綁核方案如下:

  • 粗粒度綁核:將所有任務綁定在NPU對應NUMA的CPU核心上,避免跨NUMA節點的內存訪問,并支持粗粒度綁核上的自定義綁核。
  • 細粒度綁核:在粗粒度綁核的基礎上進一步優化,將主要任務錨定在NUMA節點的某固定CPU核心上,減少核間切換的開銷。

配置示例
示例一:粗粒度綁核

export CPU_AFFINITY_CONF=1

示例二:細粒度綁核

export CPU_AFFINITY_CONF=2

示例三:自定義多張NPU卡的綁核范圍

export CPU_AFFINITY_CONF=1,npu0:0-1,npu1:2-5,npu3:6-6

具體可參考:torch_npu綁核優化

2.2 流水優化

  • 一級流水優化
    一級流水優化是一種通用有效的優化方法,主要是將部分算子適配任務遷移至二級流水,使兩級流水負載更均衡,并減少dequeue喚醒時間。
  • 使能說明
    該特性可以通過環境變量設置,一般用于以下場景:host-bound嚴重的網絡場景

使用方法如下:

export TASK_QUEUE_ENABLE=2

該環境變量的實現細節請參考《環境變量參考》中的“TASK_QUEUE_ENABLE”章節。

說明
ASCEND_LAUNCH_BLOCKING設置為“1”時,task_queue算子隊列關閉,TASK_QUEUE_ENABLE設置不生效。
TASK_QUEUE_ENABLE配置為“2”時,由于內存并發,可能導致運行中NPU內存峰值上升。

2.2.1 TASK_QUEUE_ENABLE

通過此環境變量可配置task_queue算子下發隊列是否開啟和優化等級。

  • 配置為“0”時:關閉task_queue算子下發隊列優化,算子下發任務如圖1所示。
    關閉task_queue
    在這里插入圖片描述

  • 配置為“1”或未配置時:開啟task_queue算子下發隊列Level 1優化,算子下發任務如圖2所示。
    在這里插入圖片描述
    Level 1優化:使能task_queue算子下發隊列優化,將算子下發任務分為兩段,一部分任務(主要是aclnn算子的調用)放在新增的二級流水上,一、二級流水通過算子隊列傳遞任務,相互并行,通過部分掩蓋減少整體的下發耗時,提升端到端性能。

  • 配置為“2”時:開啟task_queue算子下發隊列Level 2優化,算子下發任務如圖3所示。
    Level 2優化:包含Level 1的優化并進一步平衡了一、二級流水的任務負載,主要是將workspace相關任務遷移至二級流水,掩蓋效果更好,性能收益更大。該配置僅在二進制場景生效,建議配置值為Level 2優化。
    圖3 Level 2優化
    在這里插入圖片描述
    此環境變量默認配置為“1”。

注意
ASCEND_LAUNCH_BLOCKING設置為“1”時,task_queue算子隊列關閉,TASK_QUEUE_ENABLE設置不生效。

TASK_QUEUE_ENABLE配置為“2”時,由于內存并發,可能導致運行中NPU內存峰值上升。

2.2.2 ASCEND_LAUNCH_BLOCKING

通過此環境變量可控制算子執行時是否啟動同步模式

由于在昇騰NPU上進行模型訓練時默認算子異步執行,導致算子執行過程中出現報錯時,打印的報錯堆棧信息并不是實際的調用棧信息。當設置為“1”時,強制算子采用同步模式運行,這樣能夠打印正確的調用棧信息,從而更容易地調試和定位代碼中的問題。設置為“0”時則會采用異步方式執行。

默認配置為0。

注意 ASCEND_LAUNCH_BLOCKING設置為“1”時,強制算子采用同步模式運行會導致性能下降。
ASCEND_LAUNCH_BLOCKING設置為“1”時,task_queue算子隊列關閉,TASK_QUEUE_ENABLE設置不生效。
ASCEND_LAUNCH_BLOCKING設置為“0”時,會增加內存消耗,有導致OOM的風險。 配置示例 export
ASCEND_LAUNCH_BLOCKING=1

2.3 其他常用優化操作

配置ACLNN_CACHE_LIMIT環境變量
ACLNN_CACHE_LIMIT用于配置單算子在執行API時,在Host側緩存的算子信息條目個數。ACLNN_CACHE_LIMIT的單位為個,取值范圍為[1,10000000],默認值為10000。緩存的算子信息包含workspace大小、算子計算的執行器以及tiling信息等。動態shape場景下,如算子shape范圍較大時,用戶可通過配置此環境變量適當增加算子緩存條目,提升調度性能。當模型遇到下發瓶頸時(尤其是問題出現在一級流水時),可以嘗試此配置。配置方法如下:

export ACLNN_CACHE_LIMIT=100000

說明 增加算子信息緩存條目會增加Host內存開銷,需根據實際情況適當調整。

其他優化手段還有很多,大家可以根據網絡當前的性能狀況,進行定向選擇優化
torch_npu上其他優化手段

3 MinerU性能優化

3.1 通過torch_npu自帶配置項優化

export CPU_AFFINITY_CONF=1  # 新版本可設置export CPU_AFFINITY_CONF=2export TASK_QUEUE_ENABLE=2export ACLNN_CACHE_LIMIT=100000

關鍵優化手段主要包括如上三個環境變量,800T A2單卡優化約30%,其他手段優化效果不明顯,投入產出比不高。

3.2 其他優化

3.2.1 OM優化

端到端推理過程中,rapid_table 使用了onnx。默認執行方式會運行在CPU側,可以使用OM 靜態圖(TorchAir) 加速推理。

如下onnx圖中,在靠近結尾處(圖中A處)包含了Loop算子,無法直接轉換成OM格式:

在這里插入圖片描述
有兩種可行的方案:

  1. 提取Loop算子的子圖,手動進行循環控制,工作量較大
  2. 對onnx圖進行粗粒度切分,Loop算子包括子圖直接運行在CPU上,工作量較小

當前選取方案2,在上圖中的B處對onnx進行切分。打點分析可知onnx輸入是靜態shape,因此可以成靜態圖,使用om+onnx混合推理。

切分代碼如下:

import onnx
onnx.utils.extract_model("slanet-plus-sim.onnx","slanet-plus-front.onnx", ["x"], ["hardswish_72.tmp_0"], check_model=False)onnx.utils.extract_model("slanet-plus-sim.onnx","slanet-plus-rear.onnx",["hardswish_72.tmp_0"], ["save_infer_model/scale_0.tmp_0", "save_infer_model/scale_1.tmp_0"], check_model=False)

onnx.utils.extract_model是用于子模型的提取,可以參考如下
Onnx子模型提取

模型切割后,在推理過程中,即可根據輸入的參數進行判斷,如下以shape進行判斷,如

# 調用前先判斷shape,避免其他shape的輸入
def infer(self, x: List):if x[0].shape == (xx,xxx):front_out = self.static_infer(x)else:front_out = self.single_op_infer(x)

當遇到x的時候才進行靜態shape的優化。

由于rapid_table時間占比有限,在100個pdf上進行的測試結果顯示可以優化1~2%

3.2.2 高性能內存庫

tcmalloc(即Thread-Caching Malloc)是一個通用的內存分配器,通過引入多層次緩存結構、減少互斥鎖競爭、優化大對象處理流程等手段,在保證低延遲的同時也提升了整體性能表現。這對于需要頻繁進行內存操作的應用來說尤為重要,尤其是在高并發場景下能夠顯著改善系統響應速度和服務質量。
內存分配高性能庫
性能可以提升1%~2%

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86640.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86640.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86640.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙OS開發IoT控制應用:從入門到實踐

引言:萬物互聯時代的應用開發新范式 在物聯網(IoT)技術迅猛發展的今天,智能設備數量呈指數級增長。據IDC預測,到2025年全球IoT連接設備數將達到416億臺。面對碎片化的IoT設備和多樣化的控制需求,華為鴻蒙OS(HarmonyOS)應運而生&a…

五層網絡模型:網絡通信的核心框架

在網絡通信的世界里,五層網絡模型是一個基礎而關鍵的概念。它幫助我們理解數據是如何在網絡上從一個設備傳輸到另一個設備的。本文將詳細介紹五層網絡模型的每一層,以及它們在數據傳輸過程中的作用。 一、五層網絡模型概述 五層網絡模型是一種分層的網…

常見的強化學習算法分類及其特點

強化學習(Reinforcement Learning, RL)是一種機器學習方法,通過智能體(Agent)與環境(Environment)的交互來學習如何采取行動以最大化累積獎勵。以下是一些常見的強化學習算法分類及其特點&#…

【LeetCode 熱題 100】438. 找到字符串中所有字母異位詞——(解法三)不定長滑動窗口+數組

Problem: 438. 找到字符串中所有字母異位詞 題目:給定兩個字符串 s 和 p,找到 s 中所有 p 的 異位詞 的子串,返回這些子串的起始索引。不考慮答案輸出的順序。 【LeetCode 熱題 100】438. 找到字符串中所有字母異位詞——(解法一&…

求區間最大值

題目描述 給定一個長度為 N 的數列,和 M 次詢問,求出每一次詢問的區間內數字的最大值。 輸入描述 第一行包含兩個整數 N,M,分別表示數列的長度和詢問的個數。 第二行包含 N 個整數(記為𝑎𝑖)&am…

調試HDMI音頻能8通道播放聲音

一、使用場景 我們是通過rk主控的hdmi接口播放音視頻給到ite68051芯片解析出8聲道數據,分別通過4路i2s的數據腳給給到fpga去解析 調試步驟: 1.根據相關手冊配置hdmi輸出,hdmi聲卡注冊,如下: hdmi0_sound: hdmi0-sound {status = "disabled";compatible = &qu…

PowerBI 柱狀圖顯示MoM銷量環比示例,以及解決相同列值時設置柱子顏色的問題

先看效果: 假設有Sales表: 1. 我們先給它新增一個計算列,顯示銷售日期的年月 銷售日期YYYYMM YEAR(Sales[銷售日期])*100 MONTH(Sales[銷售日期]) 2. 然后新增一個計算表,用于保存當前最大的銷售日期,和上一個月的日期 DateComparisonT…

【docker】構建時使用宿主機的代理

docker構建過程中報錯: pip 下載失敗 解決辦法:傳遞宿主機的代理 把宿主機的 HTTP_PROXY/HTTPS_PROXY 傳進去,導致容器內的 pip 依然連不上代理,下載 build-dependencies(比如 setuptools)就會失敗。 下面兩步即可解決: Docker 構建階段,127.0.0.1:7890 指向的是 容…

[Java 基礎]算法

什么是算法 程序 數據結構 算法 算法(Algorithm)就是解決問題的步驟,就像做菜的食譜一樣,告訴計算機一步一步如何完成任務。 例如: 排序算法:把一堆數字從小到大排列搜索算法:在一堆數據里…

C++理解for循環 計算題三

計算a的值 #include <iostream> using namespace std; int main() { int a0;for(int i0;i<3;i){for(int j0;j<3;j){aij;}}cout<<"a的值是 "<<a<<endl; return 0; } 計算a的值 #include <iostream> using namespace std; int …

梳理React中的fiber架構

文章目錄 產生背景核心概念工作原理工作流程優勢特點 產生背景 在React16之前使用的虛擬DOM是數組的形式&#xff0c;又因為React本身是應用級框架&#xff0c;狀態改變后并不能準確知道是哪個組件發生了改變&#xff0c;只能對整個應用進行diff協調&#xff0c;受限于虛擬DOM…

Modbus 數據模型:線圈、寄存器與功能碼詳解(二)

三、Modbus 功能碼詳解 3.1 功能碼分類與作用 Modbus 功能碼是 Modbus 通信協議中的關鍵組成部分&#xff0c;它如同一個 “指令指揮官”&#xff0c;在通信事務處理中扮演著核心角色。功能碼占用 1 個字節的空間&#xff0c;取值范圍為 1 到 255 &#xff08;0x01 - 0xFF&am…

多表連接查詢:語法、注意事項與最佳實踐

&#x1f517; 多表連接查詢&#xff1a;語法、注意事項與最佳實踐 多表連接是 SQL 的核心能力&#xff0c;用于關聯多個表的數據。以下是深度解析&#xff0c;涵蓋語法規范、性能陷阱及實戰技巧&#xff1a; &#x1f4dc; 一、多表連接語法大全 1. 顯式連接&#xff08;推薦…

使用Calibre對GDS進行數據遍歷

在芯片的GDS數據里&#xff0c;使用Calibre對數據進行處理是非常常見的操作&#xff0c;但是GDS是一種和常規設計結構不太一樣的一種數據&#xff0c;這里&#xff0c;通過這個小小的科普文章&#xff0c;一起看看怎么樣在GDS里邊做數據漫游吧&#xff01;閑言少敘&#xff0c;…

PyQtNode Editor 第二篇自定義可視化視圖

在第一篇博客中,我們已經完成了 PyQtNode Editor 的基礎環境搭建,并深入解析了自定義圖形場景QDMGraphicsScene的實現原理。那個帶有網格背景的場景就像一張空白的圖紙,現在我們要在這張圖紙上開始繪制真正的節點系統。 今天我們將聚焦于節點編輯器的核心數據結構設計,實現…

【擴歐應用】同余方程

與擴歐的聯系 在同余方程的求解過程中&#xff0c;我們通常需要將方程轉化為線性不定方程&#xff08;Diophantine 方程&#xff09;的形式&#xff0c;然后使用擴展歐幾里得算法&#xff08;Extended Euclidean Algorithm, EEA&#xff09;求解。 同余方程是怎么轉化為線性不…

結構化數據:NumPy 的結構化數組

文章目錄 結構化數據&#xff1a;NumPy 的結構化數組探索結構化數組的創建更高級的復合類型記錄數組&#xff1a;結構化數組的變體走向 Pandas 結構化數據&#xff1a;NumPy 的結構化數組 雖然我們的數據通常可以用同質數組很好地表示&#xff0c;但有時情況并非如此。本文將演…

phpcms 更換新域名更新欄目url和內容頁url無法更新解決方法

更換域名后更新欄目url和內容頁url還是無法更新為新的域名&#xff0c;手動把cache文件夾下能清除的緩存文件清除了還是不行&#xff0c;把數據庫的緩存表內容清空了還是不行&#xff0c;問題在于欄目緩存并沒有清除。 解決辦法: (1)、找到文件&#xff1a;/caches/configs/sys…

瑪哈特七輥矯平機:板材平整的精密衛士

在金屬板材加工領域&#xff0c;表面平整度是衡量產品質量的核心指標之一。無論是汽車覆蓋件、精密儀器外殼&#xff0c;還是建筑裝飾板材&#xff0c;任何彎曲、波浪或翹曲都將嚴重影響后續加工精度、產品強度及美觀度。七輥矯平機&#xff0c;憑借其獨特的輥系結構設計&#…

融合聚類與分類的退役鋰電智能分選技術:助力新能源汽車產業可持續發展

融合聚類與分類的退役鋰電智能分選技術&#xff1a;助力新能源汽車產業可持續發展 關鍵詞&#xff1a;退役鋰離子電池分選 | 聚類分類融合 | 電化學阻抗譜(EIS) | 動態時間規整(DTW) | 多模態分類模型 新能源汽車 | 電池梯次利用 | 增量學習 | 數字孿生 | 聯邦學習 | 雙流特征…