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

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


那我們是否可以提前執(zhí)行稀疏參數(shù)的Embedding , 來(lái)做到通信和計(jì)算的Overlap , 隱藏掉這部分時(shí)間呢?從系統(tǒng)實(shí)現(xiàn)上肯定是可行的 , 但從算法上講 , 這樣做會(huì)引入?yún)?shù)Staleness的問(wèn)題 , 可能會(huì)導(dǎo)致模型精度受到影響 。但在實(shí)際的生產(chǎn)場(chǎng)景中 , 大規(guī)模異步訓(xùn)練時(shí)本身就會(huì)帶來(lái)幾十到幾百個(gè)步的滯后性問(wèn)題 。經(jīng)過(guò)我們測(cè)試 , 提前獲取一兩步的稀疏參數(shù) , 模型精度并未受到影響 。
在具體實(shí)現(xiàn)上 , 我們把整個(gè)計(jì)算圖拆分為Embedding Graph(EG)和Main Graph(MG)兩張子圖 , 兩者異步獨(dú)立執(zhí)行 , 做到拆分流程的Overlap(整個(gè)拆分過(guò)程 , 可以做到對(duì)用戶透明) 。EG主要覆蓋從樣本中抽取Embedding Key , 查詢組裝Embedding向量 , Embedding向量更新等環(huán)節(jié) 。MG主要包含稠密部分子網(wǎng)絡(luò)計(jì)算、梯度計(jì)算、稠密參數(shù)部分更新等環(huán)節(jié) 。

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


圖15 Embedding流水線模塊交互關(guān)系
兩張子圖的交互關(guān)系為:EG向MG傳遞Embeding向量(從MG的視角看 , 是從一個(gè)稠密Variable讀取數(shù)值);MG向EG傳遞Embedding參數(shù)對(duì)應(yīng)的梯度 。上述兩個(gè)過(guò)程的表達(dá)都是TensorFlow的計(jì)算圖 , 我們利用兩個(gè)線程 , 兩個(gè)Session并發(fā)的執(zhí)行兩張計(jì)算圖 , 使得兩個(gè)階段Overlap起來(lái) , 以此到達(dá)了更大的訓(xùn)練吞吐 。

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


圖16 Embedding流水線架構(gòu)流程圖
上圖是Embedding流水線的架構(gòu)流程圖 。直觀來(lái)看分為左側(cè)的樣本分發(fā)模塊 , 頂部的跨Session數(shù)據(jù)交換模塊 , 以及自動(dòng)圖切分得到的Embedding Graph和Main Graph , 藍(lán)色的圓圈代表新增算子 , 橙色箭頭代表EG重點(diǎn)流程 , 藍(lán)色箭頭代表MG重點(diǎn)流程 , 紅色箭頭代表樣本數(shù)據(jù)重點(diǎn)流程 。
以對(duì)用戶透明的形式引入了一層名為Pipeline Dataset的抽象層 , 這一層的產(chǎn)生是為了滿足EG/MG兩張計(jì)算圖以不同節(jié)奏運(yùn)行的需求 , 支持自定義配置 。另外 , 為了使得整個(gè)流水線中的數(shù)據(jù)做到彼此的配套 , 這里還會(huì)負(fù)責(zé)進(jìn)行一個(gè)全局Batch ID的生成及注冊(cè)工作 。Pipeline Dataset對(duì)外暴露兩種Iterator , 一個(gè)供EG使用 , 一個(gè)供MG使用 。Pipeline Dataset底部共享TensorFlow原生的各層Dataset 。頂部的ExchangeManager是一個(gè)靜態(tài)的 , 跨Session的數(shù)據(jù)交換媒介 , 對(duì)外暴露數(shù)據(jù)注冊(cè)和數(shù)據(jù)拉取的能力 。抽象這個(gè)模塊的原因是 , EG和MG原本歸屬于一張計(jì)算圖 , 因?yàn)榱魉€的原因拆解為拆為兩張圖 , 這樣我們需要建立一種跨Session的數(shù)據(jù)交換機(jī)制 , 并準(zhǔn)確進(jìn)行配套 。它內(nèi)部以全局Batch ID做Key , 后面管理了樣本數(shù)據(jù)、Embeding向量、Embedding梯度、Unique后的Index等數(shù)據(jù) , 并負(fù)責(zé)這些數(shù)據(jù)的生命周期管理 。中間的Embedding Graph由獨(dú)立的TF Session運(yùn)行于一個(gè)獨(dú)立的線程中 , 通過(guò)a算子獲得樣本數(shù)據(jù)后 , 進(jìn)行特征ID的抽取等動(dòng)作 , 并進(jìn)行基于HashTable方法的稀疏參數(shù)查詢 , 查詢結(jié)果通過(guò)c算子放置到ExchangeManager中 。EG中還包含用于反向更新的f算子 , 它會(huì)從ExchangeManager中獲取Embedding梯度和與其配套的前向參數(shù) , 然后執(zhí)行梯度更新參數(shù)邏輯 。下面的Main Graph負(fù)責(zé)實(shí)際稠密子網(wǎng)絡(luò)的計(jì)算 , 我們繼承并實(shí)現(xiàn)一種可訓(xùn)練的EmbeddingVariable , 它的構(gòu)建過(guò)程(d算子)會(huì)從ExchangeManager查找與自己配套的Embedding向量封裝成EmbeddingVariable , 給稠密子網(wǎng)絡(luò) 。此外 , 在EmbeddingVariable注冊(cè)的反向方法中 , 我們添加了e算子使得Embedding梯度得以添加到ExchangeManager中 , 供EG中的f算子消費(fèi) 。

推薦閱讀