日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

TensorFlow在美團推薦系統(tǒng)中的分布式訓練優(yōu)化實踐( 五 )


PS架構中的PS和Worker互為Client-Server , 這里以PS端為例 , 當Worker數目增加到上千個時 , Worker數目的增多 , 造成PS端MR注冊頻次還是非常高 , 增加了內存分配注冊的耗時 。由于稀疏場景不同Step之間同一個算子輸出Tensor的形狀可能發(fā)生變化 , 導致了創(chuàng)建的MR可復用性較差 , 帶來了較高的內存碎片和重復注冊MR開銷 。
針對上面的問題 , 我們引入了MR靜態(tài)分配器的策略 。

TensorFlow在美團推薦系統(tǒng)中的分布式訓練優(yōu)化實踐


圖10 MR靜態(tài)分配器
這里核心的設計思路為:
雖然稀疏場景同一個算子輸出Tensor的Shape存在變化的可能 , 但是整體變化幅度可控 , 通過監(jiān)控與分析 , 是可以找到一個較為穩(wěn)定的內存大小 , 滿足多Step間Tensor的存儲需求 。基于上面的信息 , 我們修改了原有逐Tensor(Request)的MR申請策略 , 通過一次性預申請一塊較大的空間并注冊到網卡端 , 后續(xù)通過自己維護的分配策略進行空間的分配 , 大大降低了MR申請的頻率 , 絕大多數情況下 , 訓練全過程中只需要一次MR注冊申請即可 。我們引入了一種簡單的交換協(xié)議 , 將傳輸Tensor的Shape , Data打包到一起 , 寫到Client端 。Client端根據協(xié)議 , 解析出Tensor大小 , 并最終讀取Data , 避免了原生實現中因Tensor的Shape變化而產生的多次協(xié)商過程 。

TensorFlow在美團推薦系統(tǒng)中的分布式訓練優(yōu)化實踐


圖11 MR靜態(tài)分配器構造流程
具體到實現中 , 我們引入了Allocation Analysis模塊 , 在訓練開始的一段時間 , 我們會對分配的歷史數據進行分析 , 以得到一個實際預開辟MR大小以及各個Tensor的預留空間大小 。然后我們會暫停訓練的進程 , 啟動Allocator的構造過程 , 包括MR的創(chuàng)建以及通信雙端的信息同步 。利用相關信息構造MR Info Map , 這個Map的Key是傳輸Tensor的唯一標記(ParsedKey , 計算圖切圖時確定) , Info結構體中包含了本地地址指針、offset大小、ibv_send_wr相關信息等 。然后恢復訓練 , 后續(xù)Tensor的傳輸就可以使用靜態(tài)開辟好的MR進行收發(fā) , 也免去了因Shape變化而產生的多次協(xié)商過程 。
3.3.3 Multi RequestBuffer與CQ負載均衡
【TensorFlow在美團推薦系統(tǒng)中的分布式訓練優(yōu)化實踐】TensorFlow社區(qū)版的RDMA通信過程 , 不僅僅包含上面Tensor數據的發(fā)送和接收過程 , 還包括傳輸相關的控制消息的發(fā)送和接收過程 , 控制消息的發(fā)送和接收過程同樣是使用了ibv_post_send和ibv_post_recv原語 。原生的控制流實現存在一些瓶頸 , 在大規(guī)模訓練時會限制控制流的吞吐 , 進而影響數據收發(fā)的效率 。具體體現在:
請求的發(fā)送通過同一片RequestBuffer內存進行寫出 , 多個Client的請求均依賴這一片Buffer , 也就導致到控制流信息實際是串行發(fā)送的 , 只有等到對端的Ack信息后 , 才可以下一個Request的寫出 , 限制了請求的發(fā)送吞吐 。在Client端需要輪詢RDMA Completion Queue來獲得請求的到達 , 以及相關狀態(tài)的變更 。原生實現僅有一個Completion Queue , 單線程進行輪詢處理 , 在大規(guī)模分布式訓練中 , 限制了應答的效率 。

推薦閱讀