跨平台Caffe及I O模型與並行方案(二)

2021-08-20 06:58:55 字數 2163 閱讀 6966

caffe繁雜的依賴項增加了安裝使用的難度,也限制了系統的可移植性。為了解決caffe跨平台的問題,本章首先分析caffe依賴庫,隨後提出一種第三方庫方案,最後介紹乙個輕量級的跨平台caffe分支專案——dragon caffe[2]。

為了裁剪臃腫的依賴庫,抽取、預編譯必要的依賴庫,我們首先需要分析caffe的依賴庫。

protobuffer

protobuffer是由google開發的一種可以實現記憶體與非易失儲存介質(如硬碟檔案)交換的協議介面。使用者只需建立統一的引數描述檔案(proto),然後利用protoc編譯就能讓協議細節等關鍵部分**自動生成。caffe原始碼中大量使用protobuffer作為權值和模型引數的載體,它可以快速地對這些格式化資料進行序列化/反序列,還可以跨語言傳遞相同的資料結構。protobuffer依賴庫

boost

boost庫是乙個功能強大、跨平台的c++開源庫。在caffe中主要使用了boost中的智慧型指標和多執行緒庫。

gflags

glags在caffe中主要起到命令列引數解析的作用。

glog

glog庫google開發的用於記錄應用程式日誌的使用庫,提供基於c++標準輸入輸出流形式的介面。glog庫和上文提到的gflags庫**量很少,可以將**融入到caffe專案中,從而減少依賴庫的數量。

blas

caffe中用到的數學計算主要是矩陣、向量的計算,呼叫了blas(basic linear algebra subprograms)中的相應方法。最常用的blas實現有intel mkl、atlas、openblas等,caffe可以任選一種。

opencv

opencv是最流行對開源計算機視覺庫,包含有大量影象處理函式。caffe主要使用opencv完成一些影象訪問和預處理功能,因此沒有必要編譯所有對opencv模組,僅僅裁剪出讀寫、縮放等模組即可。

lmdb和leveldb

leveldb庫是caffe早期版本使用的資料儲存方式,由googl開發。它是一種持續的鍵值對儲存方式,鍵和值可以為任意位元組陣列。鍵的儲存順序可由使用者定義的比較函式決定。目前大部分例程都已經使用lmdb代替了leveldb。

對於caffe的跨平台移植問題,第三方庫(3rdparty)方案是乙個很好的選擇。首先分析caffe的依賴庫,抽取、裁剪必要的第三方庫,並且保證這些庫是平台無關的。然後針對不同平台(windows/linux/嵌入式系統)預先編譯好這些庫,以供caffe執行時動態載入這些第三方庫。對於平台相關的庫,可以選擇跨平台的替代庫(例如用跨平台的boost庫替代linux的pthread庫),或者直接移除,然後移除簡單的庫,重寫第三方庫的**並融入到工程中。這種方案具有可裁剪、靈活配置的優點,已被用於多個跨平台caffe開源專案[3]。

dragoncaffe[2]便是乙個採用第三方庫方案的跨平台caffe開源分支。該專案根據caffe執行的需要,裁剪了龐大的boost、opencv庫,移除不必要的庫,最小化caffe的第三方庫數量和儲存空間。由於採用第三方庫方案,能夠保證linux/windows平台的同步安裝,做到了真正的跨平台,並且安裝十分便捷快速。

跨平台caffe專案dragon的安裝過程十分簡單,只需要為第三方庫配置環境變數,編輯編譯配置檔案cmakelist.txt,最後編譯源**。具體步驟如下:

2.   安裝顯示卡驅動與cuda。

3.   根據作業系統型別選擇預編譯的第三方庫。

4.   將第三方庫的路徑配置到path環境變數中。

5.   編輯編譯配置檔案cmakelist.txt,新增第三方庫的路徑、cuda路徑等資訊。

6.  編譯源**。

dragoncaffe的使用與原版caffe一樣,例如使用其c++介面訓練資料,執行編譯好的dragon.exe程式,輸入train引數和模型配置檔案路徑,從而開啟網路的訓練過程。

圖2-1 dragon caffe啟動訓練程式

圖2-2 dragon caffe訓練過程

[1] 趙永科. 深度學習:21天實戰caffe. 北京:電子工業出版社,2016.7

[2] 

dragon:a light deep learning framework,

**:

跨平台Caffe及I O模型與並行方案(二)

caffe繁雜的依賴項增加了安裝使用的難度,也限制了系統的可移植性。為了解決caffe跨平台的問題,本章首先分析caffe依賴庫,隨後提出一種第三方庫方案,最後介紹乙個輕量級的跨平台caffe分支專案 dragon caffe 2 為了裁剪臃腫的依賴庫,抽取 預編譯必要的依賴庫,我們首先需要分析ca...

C C 跨平台I O操作技巧

如果你正在寫從檔案或網路讀寫資料的跨平台c c 那麼你必須明白有些問題是因語言,編譯器,平台而不同的。主要的問題是資料對齊,填充,型別大小,位元組順序和預設狀態char是否有符號。在c c 中,內建型別的大小完全取決於編譯器 在特定範圍內 不要讀寫大小不明確的資料型別。c c 跨平台i o操作技巧 ...

I O復用及程式設計模型

原文 i o多路復用和socket 由於io操作涉及到系統呼叫,涉及到使用者空間和核心空間的切換,所以理解系統的io模型,對於需要進入到系統呼叫層面進行程式設計來說是很重要的。從程式編寫的角度來看,i o就是呼叫乙個或多個系統函式,完成對輸入輸出裝置的操作。輸入輸出設定可以是顯示器 字元終端命令列 ...