標籤:高效能 記憶體管理 個數 喚醒 ogr ble 最佳化 實踐 ocr
Paddle Mobile是PaddlePaddle組織下的致力於嵌入式平台的深度學習架構,整合了百度移動端預測的實踐經驗,提供多平台支援,在工程實現支援及底層演算法模型壓縮的基礎上,通過CPU、mall GPU等硬體加速,作用於DuerOS、百度APP、百度網盤APP等移動端情境。目前,Paddle Mobile在PaddlePaddle 0.14版本下已支援CPU、Mali GPU等平台,以及映像、人臉、OCR等模型。值得一提的是,它的體積極小,最小僅300K。今天這篇文章是由百度大搜尋進階研發工程師謝柏淵老師,為大家介紹Paddle Mobile的技術實現和業務落地。
以下為謝柏淵的演講實錄
Paddle Mobile架構概覽
圖一:Paddle mobile架構
Paddle mobile各大架構,偏重於與AI硬體的結合,提升本機使用者效能。
? Paddle mobile的訓練分為訓練過程和運算過程,訓練過程相容統一訓練模型,訓練基礎上提供量化深度壓縮功能。
? 目標檢測有單主體檢測,多主體檢測,手勢識別。
? 即時OCR保證在高效能的情況下,每個圖片完整的映射。
? 語音喚醒,形成無數的樣本輸出。
? 多硬體平台支援,支援全部ARM CPU,Mali GPU,高通DSP,Arm-Linux FPGA。
Paddle mobile的架構設計
Paddle mobile的架構設計主要分為: Loader 模組、 Program 模組、 Executor 模組、 Op 模組、 Kernel 模組、Scope variable Tensor 模組。它的模型分為兩種結構: 一種為參數檔案是散開的, 如, 紅框為模型結構的 protobuf 檔案, 其餘為參數檔案。
圖二:模型
其中Loader 模組的作用是將模型結構資訊 load 進記憶體, 如紅框內的 protobuf 檔案 load 進記憶體, 並對模型結構進行最佳化(如將幾個細粒度的 op 融合成粗粒度的op, 如將 conv、 add、 batchnorm、 relu 融合為 conv_add_batchnorm_relu),方便進行演算法最佳化。由於 conv 可以轉換為兩個大矩陣相乘, 更進一步可以分為若干個一行一列的小矩陣相乘, 並得出最終運算。
圖三:op融合
Program 為 Loader 模組的結果, 包含了最佳化前的模型結構對象, 以及最佳化後的模型結構對象, 此模組基本對應 PaddlePaddle 模型結構, 關於Paddle 模型的概念定義, 詳細設計可以參考 program.md。
kernel 為 op 的底層運算實現, 主要有兩個函數, Init 和 Compute, 分別用來初始化、預先處理 和 運算操作, 值得提出的是, kernel 會根據泛型特化到不同的平台, :
圖四:平台
不同平台的 kernel 實現, 為同一個 kernel 類不同泛型的特化實現, 目前有三個平台, arm、mali、fpga, 圖中的 central-arm-func\ 目錄為 op kernel 的 arm 實現, 它承擔了 arm\ 目錄下 kernel 的底層實現, 同時 arm 處理器作為中央處理器, central-arm-func\ 也可以作為其他副處理器的底層實現, 如: fpga 的某一個 op kernel 還沒有 fpga 副處理器的實現, 就可以直接調用使用這裡的 arm 實現.
Paddle Mobile的最佳化
Paddle Mobile的最佳化的體現在兩個方面,體積最佳化和效率提升。其中,體積最佳化從三方面來進行:第一,模型量化壓縮方案;第二,代碼深度精簡;第三,分模型打包。效率提升主要從Operator融合和各平台特化實現兩方面才進行提升。
Scope用來儲存管理所需要用到的variable,用來儲存不同類型的對象,主要是矩陣為tensor,也就是說scpoe管理著op運算過程中所有參數矩陣,輸入輸出矩陣。可以將scope理解為一個map,這裡在map上封了一層scope的概念是為了方便記憶體管理。scope可以用來儲存不同類型的對象,Paddle mobile主要用它來儲存tensor,tensor代表著矩陣,通過泛型可以用來儲存不同類型的矩陣,但需要注意的是存入和取出時的類型必須保持一致,如果類型不一致,不能通過類型檢查。
提問環節
提問:把很多模型壓縮放到移動端,壓縮是手動還是會自動。
謝柏淵:我們提供一個指令碼,跟Paddle mobile項目讀模數型一樣,我們進行映射,按照255乘以值,預算的時候用這個數乘以255。具體實踐可以看Paddle mobile這個項目有量化的指令碼,做一個簡單的片斷。
提問:壓縮是把矩陣一點點讀進去,讀的是哪部分?
謝柏淵:我對這個演算法瞭解不是特別深入,這個想深入瞭解可以開啟PaddlePaddle,在文檔列表搜介紹。
提問:能否提供簡單的演算法然後傳播,我們進行簡單的預算?
謝柏淵:目前沒有,後續考慮會支援。
提問:如果把訓練好模型放到手機上,大概有多大?
謝柏淵:目前壓縮以後,差不多有5兆,6兆左右,很小。例如有一些AR團隊設立雞蛋的模型,只有50多K,不用量化,量化以後10K,就沒有必要了。模型大小跟複雜程度有關,用一張資料訓練,參數大就大;模型設計的簡單,參數少,模型也就小。模型大小是純粹資料的排列,非常簡單,你有多少數就多大。所以我們設計一個模型考慮的問題就是如何設計一個既省空間,效率又高,又準確的模型。
提問:您的模型用的是哪個模型。
謝柏淵:模型因為屬於商業化東西,我們對外開放了一部分,在官網可以查詢和觀看demo,對外也提供了介面,把項目編譯出來後,ARM模型在手機上,處理好的資料輸入進去,可以拿到所有點的結果。使用起來非常簡單。
實錄結束
謝柏淵,百度大搜尋進階研發工程師,擁有多年Android開發經驗,多模搜尋部創新團隊成員,Paddle Mobile團隊成員,落地功能有圖搜即時翻譯,lite版語音搜尋,懸浮球搜尋等。目前主要負責Paddle Mobile從學術到上線的打通工作,推動技術實現到業務落地。
簡單搜尋--Paddle Mobile的技術實現和業務落地