PaddleLite簡(jiǎn)單梳理

下載和編譯:

  1. github網(wǎng)絡(luò)原因clone代碼非常慢,推薦換用gitee的服務(wù)器,https://gitee.com/paddlepaddle/paddle-lite.git
  2. clone后,可以通過(guò)修改.git/config中的url為https://github.com/PaddlePaddle/Paddle-Lite.git來(lái)與github倉(cāng)庫(kù)保持同步
  3. third-party中的自倉(cāng)同理,也可一并用gitee的鏡像倉(cāng)庫(kù)替換。除了thirdparty中附帶的子倉(cāng)之外,paddle-lite還會(huì)在build時(shí)根據(jù)cmakelist自動(dòng)從github克隆眾多依賴(lài)庫(kù),速度非常慢,容易卡死,推薦參考lite/tools中各平臺(tái)的傻瓜式編譯腳本,腳本中會(huì)從百度官方源下載依賴(lài)包,速度非???。

依賴(lài)

  1. mkldnn & mklml 英特爾深度學(xué)習(xí)加速庫(kù)
  2. protobuf 序列化數(shù)據(jù)結(jié)構(gòu),用于解析模型等
  3. gflags 谷歌命令行解析工具庫(kù)
  4. glog 谷歌日志庫(kù)
  5. gtest 谷歌測(cè)試框架
  6. eigen 高性能矩陣運(yùn)算庫(kù)
  7. xbyak 匯編庫(kù),可以在C++程序中手寫(xiě)匯編存儲(chǔ)在內(nèi)存中調(diào)用
  8. xxhash 超快速非加密哈希算法

源碼目錄結(jié)構(gòu)

ps:代碼大部分位于lite目錄下,metal(蘋(píng)果的GPU運(yùn)算加速庫(kù)也叫metal,應(yīng)該就是IOS的內(nèi)容了)和mobile是從paddle-mobile遷移過(guò)來(lái)的移動(dòng)端代碼,這里不予探討

又ps:官方文檔中已有較詳細(xì)的描述的部分在此不做贅述

再ps:應(yīng)用開(kāi)發(fā)者只需要關(guān)心api部分即可,硬件后端適配人員或框架開(kāi)發(fā)者需要關(guān)注全部?jī)?nèi)容

最后一次ps:paddlelite因?yàn)殚_(kāi)發(fā)時(shí)間尚短,需要支持的硬件端過(guò)于繁多,代碼難免雜亂,質(zhì)量也有提升空間,但畢竟是少有的國(guó)產(chǎn)開(kāi)源項(xiàng)目,大家多多包容

  • api:對(duì)外接口封裝和相應(yīng)測(cè)試(吐槽下,目錄結(jié)構(gòu)有點(diǎn)亂,外面有個(gè)單獨(dú)的test目錄這里還亂放接口測(cè)試文件),包括了android接口(需要NDK),C++全尺寸接口,C++輕量級(jí)接口(一個(gè)全尺寸庫(kù)200M+,移動(dòng)端吃不消),python接口(pybind11實(shí)現(xiàn))
  • core:核心模塊,包含了類(lèi)型系統(tǒng),硬件描述,內(nèi)存操作,變量域,推理程序,operator基類(lèi)(對(duì)算子的IO描述以及實(shí)現(xiàn)管理),kernel基類(lèi)(算子的硬件實(shí)現(xiàn)),MIR(Machine IR,圖優(yōu)化),性能分析工具(profiler),封裝了gtest的arena測(cè)試框架(??測(cè)試框架放在core里面??而且還依賴(lài)gtest)
  • backend:內(nèi)存操作,context等硬件相關(guān)的基礎(chǔ)操作,和部分?jǐn)?shù)學(xué)函數(shù)的硬件端實(shí)現(xiàn)
  • operator:各類(lèi)算子實(shí)現(xiàn)(operator負(fù)責(zé)檢查輸入shape,推理輸出shape,以及管理算子參數(shù)和kernel的實(shí)現(xiàn))
  • kernel:算子的硬件實(shí)現(xiàn)
  • model_parser:依賴(lài)protobuf的模型描述相關(guān)實(shí)現(xiàn)(讀取模型就靠它啦),也包含對(duì)op和program的描述
  • gen_code:編譯時(shí)生成代碼
  • fluid:數(shù)據(jù)類(lèi)型(float16,int等)描述,和一些tricks封裝,(感覺(jué)可以和utils合并一下?)
  • utils:鑒于使用C++11標(biāo)準(zhǔn),boost庫(kù)又太龐大,抄過(guò)來(lái)的any和variant實(shí)現(xiàn)(但是variant實(shí)現(xiàn)在varient里面,variant.h里面是編譯器優(yōu)化的宏??),還有借鑒glog的日志系統(tǒng)(輕量級(jí)編譯的時(shí)候用于替換glog,通過(guò)cp_logging實(shí)現(xiàn)代碼不變,條件編譯決定采用哪一個(gè)日志實(shí)現(xiàn))
  • tools:各平臺(tái)的傻瓜式編譯腳本,dockerfile等
  • test:各類(lèi)沒(méi)有放在待測(cè)源代碼目錄下的測(cè)試文件
  • demo:C++,python,java三種demo

issue

未提issue

  1. 模型接口統(tǒng)一

PROCESSING

  1. [#3496] python庫(kù)中包含未選擇編譯的內(nèi)容
  2. [#3494] 單例的實(shí)現(xiàn)存在內(nèi)存泄漏

CLOSED

  1. [#3291] 框架中注入了多余的符號(hào),強(qiáng)制應(yīng)用層引入不必要的依賴(lài)
  2. [#3292] model_parser使用了protobuf即將廢棄的接口ByteSize
  3. [#3313] profile缺少頭文件,編譯失敗
  4. [#3356] tensor的slice內(nèi)存共享設(shè)計(jì)缺陷導(dǎo)致multiclassnms不支持batchsize大于1的情況
  5. [#3406] 編譯過(guò)程中大量sign-compare的warning
  6. 同時(shí)打開(kāi)test和python編譯會(huì)強(qiáng)制編譯ARM的單元測(cè)試(未提issue已修復(fù))

傳送門(mén)

官方源碼倉(cāng)庫(kù):https://github.com/PaddlePaddle/Paddle-Lite
WeChat Official Account: PaddlePaddle
QQ Group Chat: 696965088

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容