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

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


通過上面的設(shè)計 , 我們就搭建起了一套可控的EG/MG并發(fā)流水線訓(xùn)練模式 。總體來看 , Embedding流水線訓(xùn)練模式的收益來源有:
經(jīng)過我們對多個業(yè)務(wù)模型的Profiling分析發(fā)現(xiàn) , EG和MG在時間的比例上在3:7或4:6的左右 , 通過將這兩個階段并行起來 , 可以有效的隱藏Embedding階段 , 使得MG網(wǎng)絡(luò)計算部分幾乎總是可以立即開始 , 大大加速了整體模型的訓(xùn)練吞吐 。TensorFlow引擎中當(dāng)使用多個優(yōu)化器(稀疏與非稀疏)的時候 , 會出現(xiàn)重復(fù)構(gòu)建反向計算圖的問題 , 一定程度增加了額外計算 , 通過兩張子圖的拆分 , 恰好避免了這個問題 。在實施過程中的ExchangeManager不僅負(fù)責(zé)了Embedding參數(shù)和梯度的交換 , 還承擔(dān)了元數(shù)據(jù)復(fù)用管理的職責(zé) 。例如Unique等算子的結(jié)果保存 , 進(jìn)一步降低了重復(fù)計算 。
另外 , 在API設(shè)計上 , 我們做到了對用戶透明 , 僅需一行代碼即可開啟Embedding流水線功能 , 對用戶隱藏了EG/MG的切割過程 。目前 , 在美團某業(yè)務(wù)訓(xùn)練中 , Embedding流水線功能在CPU PS架構(gòu)下可以帶來20%~60%的性能提升(而且Worker并發(fā)規(guī)模越大 , 性能越好) 。
3.5 單實例PS并發(fā)優(yōu)化
經(jīng)過2.2章節(jié)的分析可知 , 我們不能通過持續(xù)擴PS來提升分布式任務(wù)的吞吐 , 單實例PS的并發(fā)優(yōu)化 , 也是非常重要的優(yōu)化方向 。我們主要的優(yōu)化工作如下 。
3.5.1 高性能的HashTable
PS架構(gòu)下 , 大規(guī)模稀疏模型訓(xùn)練對于HashTable的并發(fā)讀寫要求很高 , 因為每個PS都要承擔(dān)成百乃至上千個Worker的Embedding壓力 , 這里我們綜合速度和穩(wěn)定性考慮 , 選用了tbb::concurrent_hash_map[10]作為底層HashTable表實現(xiàn) , 并將其包裝成一個新的TBBConcurrentHashTable算子 。經(jīng)過測試 , 在千億規(guī)模下TBBConcurrentHashTable比原生MutableDenseHashTable訓(xùn)練速度上快了3倍 。
3.5.2 HashTable BucketPool
對于大規(guī)模稀疏模型訓(xùn)練來說 , Embedding HashTable會面對大量的并發(fā)操作 , 通過Profiling我們發(fā)現(xiàn) , 頻繁動態(tài)的內(nèi)存申請會帶來了較大性能開銷(即使TensorFlow的Tensor有專門的內(nèi)存分配器) 。我們基于內(nèi)存池化的思路優(yōu)化了HashTable的內(nèi)存管理 。
我們在HashTable初始化時 , 會先為Key和Value分別創(chuàng)造兩個BucketPool , 每個池子都會先Malloc較大一塊內(nèi)存?zhèn)溆?nbsp;, 考慮到可能會有對HashTable進(jìn)行中的Key和Value進(jìn)行Remove的場景(如Online Learning訓(xùn)練時) , 需要對從HashTable中刪除的Key和Value所使用的內(nèi)存進(jìn)行回收 , 因此每個BucketPool還有一個ReuseQueue來負(fù)責(zé)維護回收的內(nèi)存 。每次向內(nèi)部的哈希表數(shù)據(jù)結(jié)構(gòu)中insert Key和Value的時候 , Key和Value內(nèi)存和釋放分配都進(jìn)行池化管理 。用這種方式降低了大規(guī)模稀疏訓(xùn)練中遇到稀疏內(nèi)存分配開銷 , 整體端到端訓(xùn)練性能提升了5%左右 。

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


圖17 HashTable內(nèi)存優(yōu)化
3.6 單位算力吞吐優(yōu)化
經(jīng)過2.2章節(jié)的分析 , Worker的計算壓力也非常大 , 如果不優(yōu)化Worker , 同時要保持吞吐 , 需要橫向擴展更多的Worker , 給PS帶來更大的壓力 。而對于用戶來說 , 如果能在有限的計算資源下帶來性能提升 , 對業(yè)務(wù)價值更高 。我們通過CAT統(tǒng)計出了一些高頻算子 , 并進(jìn)行了專項優(yōu)化 。這里選取Unique&DynamicPartition算子融合案例進(jìn)行分享 。

推薦閱讀