下載和編譯:
- github網(wǎng)絡(luò)原因clone代碼非常慢,推薦換用gitee的服務(wù)器,https://gitee.com/paddlepaddle/paddle-lite.git
- clone后,可以通過(guò)修改.git/config中的url為https://github.com/PaddlePaddle/Paddle-Lite.git來(lái)與github倉(cāng)庫(kù)保持同步
- 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)
- mkldnn & mklml 英特爾深度學(xué)習(xí)加速庫(kù)
- protobuf 序列化數(shù)據(jù)結(jié)構(gòu),用于解析模型等
- gflags 谷歌命令行解析工具庫(kù)
- glog 谷歌日志庫(kù)
- gtest 谷歌測(cè)試框架
- eigen 高性能矩陣運(yùn)算庫(kù)
- xbyak 匯編庫(kù),可以在C++程序中手寫(xiě)匯編存儲(chǔ)在內(nèi)存中調(diào)用
- 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
- 模型接口統(tǒng)一
PROCESSING
- [#3496] python庫(kù)中包含未選擇編譯的內(nèi)容
- [#3494] 單例的實(shí)現(xiàn)存在內(nèi)存泄漏
CLOSED
- [#3291] 框架中注入了多余的符號(hào),強(qiáng)制應(yīng)用層引入不必要的依賴(lài)
- [#3292] model_parser使用了protobuf即將廢棄的接口ByteSize
- [#3313] profile缺少頭文件,編譯失敗
- [#3356] tensor的slice內(nèi)存共享設(shè)計(jì)缺陷導(dǎo)致multiclassnms不支持batchsize大于1的情況
- [#3406] 編譯過(guò)程中大量sign-compare的warning
- 同時(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