⑴ ps-lite概述
ps-lite旨在構建高可用分布式的機器學習應用。在ps-lite框架中,多個節點運行在多台物理機器上用於處理機器學習問題。通常會運行一個schele節點和多個worker/server節點。、
假設我們想要解決下面的問題:
其中(y i ,x i )是樣本集,w是權重。
我們想要通過minibatch隨機梯度下降(SGD,其中batch大小是b)的方式來解決這個問題。在時間t時,該演算法首先隨機挑選b個樣本,然後通過下面的公式更新權重w
我們給出兩個例子來說明ps-lite實現分布式解決這一問題的基本思想。
在第一個例子中,我們將SGD擴展為非同步SGD。我們讓server節點來維護w,server k獲取到w的第k個分片,標識為w k 。當從worker接收到梯度後,server k會更新它所維護的權重:
方法返回server從任意worker節點接收的梯段, 方法返回時間 時的訓練速率。
對於一個worker,每次它都會做四件事情:
ps-lite會提供 和 方法,用於和存有正確部分數據的server進行通信。
非同步SGD的語義和單機版本不同。因為單機版本worker之間沒有通信,所以就可能導致當一個worker節點正在計算梯度時權重發生變化。換句話說,每個worker都可能正在使用過期的權重。下圖展示了2個server節點和3個worker節點的通信過程:
同步SGD的語義與單機演算法完全相同,該模式使用scheler來管理數據的同步。
和 發布命令給worker和server,這個過程中 函數會一直等待,指定所有命令發布完成。
當worker接受到命令後,它會執行下面的函數:
這個過程和非同步SGD幾乎一模一樣,只是每次要處理b / num_workers個樣本。
而server節點相對於非同步SGD還要執行額外的一些步驟:
與單機演算法相比,分布式演算法增加了兩個額外的開銷,一是數據通信開銷,即通過網路發送數據的開銷;另一個是由於不完善的負載均衡和機器性能差異帶來的同步開銷。這兩個開銷可能會主宰大規模集群和TB級別數據的應用性能。
假設:
權衡結果如下:
從中我們得到如下結論:
⑵ 如何使用codelite進行單文件編譯
在Notepad++中,打開函數列表側邊欄:[視圖]菜單>>FunctionList雙擊其中的項目,即可跳轉。注意:要切換到正確的語言,FunctionList才能正常顯示函數。必要時要點擊其Reload(重新載入)按鈕。
⑶ PS-Lite使用
一種調試方式是記錄所有的通信日誌。可以通過指定 環境變數來實現:
可能會有如下輸出
這里 , 和 分別表示scheler,server和worker。
默認情況下PS-Lite會自動選擇一個可用的網路介面。但是,對於有多個網路介面的機器,我們可以通過環境變數 來指定網路介面。例如,要使用無限帶 介面,我們可以採用如下方式:
如果所有的PS-Lite節點都運行在同一台機器上,我們可以通過設置 來使用內存拷貝取代本地網路介面來提高性能:
如果我們想將PS-Lite移植到除 、 、 和 之外的其它集群資源管理器上,本章將會很有用。
要想啟動PS-Lite,我們需要提供為下面的環境變數提供正確的值:
網路傳輸中出現消息丟失是比較常見的現象,當一個重要的消息傳遞失敗時,程序會掛起。這時,可以讓PS-Lite為每一個消息發送一個額外的ACK,如果在指定時間內沒有收到ACK,則重傳這條消息。要想啟動這個功能,我們可以設置下面的環境變數:
⑷ [openharmony]liteos-a系統編譯之GN
在 文章 中已經分析openharmony的小型系統(liteos-a)編譯過程,最主要的就是調用gn/ninja/makefs三個命令最終生成可燒錄的鏡像文件
從前面文件可以看到hb build調用的gn命令參數如下
這里詳細分析一下gn工具在編譯過程中的使用
這里簡單介紹下GN工具的使用方法,gn語法可以參考 http://weharmonyos.com/openharmony/compile/gn/docs/
,已經熟悉的可以跳過
從上面圖中可以看到使用的命令類型為 gn gen <output_dir> [options] ,此命令就是為了將所有需要的BUILD.gn文件生成為*.ninja文件供ninja進行編譯; 可以通過 gn help gen 命令查看詳細的用法說明, 如下
下面重點說一下gn_cmd中的 [options]
liteos-a編譯系統的dotfile內容如下:
liteos-a是嵌入式系統,而編譯環境是linux系統,這就需要用到交叉編譯方式,這個就可以在環境配置中指定 target_os 、 target_cpu 、 board_cpu 等等信息
這些信息就是 buildconfig 參數指定的 BUILDCONFIG.gn 文件中配置的
除了以上信息,還配置了以下幾個重要信息
詳細信息可以查看 //build/lite/config/BUILDCONFIG.gn 文件內容
toolchain定義源碼編譯需要的工具,像編譯器、匯編器、連接器等等,一般在.gn所在目錄下有一個 toolchain 目錄,裡面的 BUILD.gn 定義詳細的編譯工具鏈信息
這里目錄結構如下:
從結構信息中可以看到定義了clang和gcc兩種工具鏈,通過變數 board_toolchain_type 來區分(此變數也是buildconfig中定義的),具體信息參見BUILD.gn文件內容,如下
在.gn文件所在目錄下的BUILD.gn就是入口,此文件做了以下幾個事情
這里重點說一下target為 ohos 的 group 如下:
這里也比較好理解,裡面就是讀取一個配置文件,幾級循環來處理配置文件中配置的內容。流程如下
到此就將此board下各模塊的依賴關系添加好了,然後 GN 會將依賴樹中所有的BUILD.gn生成對應的.ninja文件,並且在out的根目錄下生成下面幾個ninja的入口文件以及配置文件
⑸ codelite編譯顯示中文字元為亂碼,怎麼解決
啟用C99,並在控制台顯示中文: Settings, Build Settings, gnc gcc, Switchs,在Source選項後面增加" -std=c99 -fexec-charset=GBK ",添加後,Source switch看起來是這樣:
-c -std=c99 -fexec-charset=GBK