GPU加速:宽深度推理
GPU加速:寬深度推理
Accelerating Wide & Deep Recommender Inference on GPUs
推薦系統推動了許多最流行的在線平臺的參與。隨著為這些系統提供動力的數據量的快速增長,數據科學家正越來越多地從更傳統的機器學習方法轉向高度表達的深度學習模型,以提高其建議的質量。Google的廣度和深度架構已經成為解決這些問題的一種流行的模型選擇,既有其對信號稀疏性的魯棒性,也有其通過DNN線性組合分類器API在TensorFlow中的用戶友好實現。雖然這些深度學習模型的復雜性導致的成本和延遲最初對推理應用來說非常昂貴,但將證明,為NVIDIA gpu優化的加速、混合精度的實現可以顯著減少延遲,同時在成本/推理方面獲得顯著的改進。這為快速、低成本、可擴展的推薦系統鋪平了道路,推薦系統非常適合在線和離線部署,并使用簡單而熟悉的TensorFlow api實現。 在本文中,描述了一個基于TensorFlow的DNN線性組合分類器API的廣深結構的高度優化的GPU加速推理實現。提出的解決方案可以很容易地從訓練的張量流寬深模型轉換為混合精度推理部署。還基于一個有代表性的數據集給出了該解決方案的性能結果,并表明寬模型和深模型的GPU推理可以分別在在線和離線場景中產生高達13倍的延遲或11倍的吞吐量改進。
Background
The Recommendation Problem
雖然都可能對推薦的內容有一個直觀的理解,但機器學習模型如何推薦的問題就不那么明顯了。畢竟,對于推薦的概念,有一種非常規范的說法:“應該看電影a”,“應該在餐廳B吃tagliatelle”。模特怎么知道我該怎么做?
答案是,事實上,不是這樣的。相反,使用機器學習來模擬用戶與相關項目交互的方式。交互可能意味著點擊廣告、播放視頻、在基于網絡的商店購物、對餐廳的評論,或者應用程序可能感興趣的任何數量的結果。機器學習模型使用以前交互的數據來預測新交互的可能性;推薦模型認為最有可能發生的交互。
模型如何進行這些預測將取決于擁有的數據類型。如果只知道過去發生過哪些交互,那么可能會對通過奇異值分解或變分自動編碼等方式訓練協作過濾模型感興趣。如果有描述交互實體的數據(例如,用戶年齡、餐廳菜肴的類別、電影的平均評論),那么可以根據當前這些屬性對新交互的可能性進行建模。
Training vs. Inference
廣義上講,機器學習模型的生命周期可以分為兩個階段。在第一個例子中,通過展示過去用戶和項目之間的交互(或非交互)的例子來訓練模型,使其做出良好的預測。一旦學會了以足夠的精度進行預測,就將模型部署為一個服務來推斷新交互的可能性。 讓舉個例子讓事情更具體。假設有一個應用程序,用戶可以在該應用程序上查找餐廳并對其進行評級,希望構建一個推薦服務,以推薦用戶可能喜歡的新餐廳。可以通過向模型展示一個用戶的數據和一個被該用戶評分的餐廳的數據來訓練的模型,并要求在0-1的范圍內評分用戶評分高于10分之5的可能性有多大。然后,向展示答案,以便能夠以這樣一種方式進行自我更新:在經過數百萬次的猜測之后答案可以得到相當好的結果。
一旦的教育完成模式是時候把新獲得的技能很好地利用。需要找到一份工作,但所知道的只是告訴我,某個用戶是否會喜歡某個餐館。如果我感興趣的是找到新的餐廳向用戶展示,那么這項技能似乎沒有特別的幫助,因為如果我事先知道哪些用戶和餐廳要組合在一起,我就不需要模型了!
因此,重新表述了這個問題:將一個用戶與成百上千個候選餐廳配對,收集用戶喜歡其中每個餐廳的可能性,然后向用戶展示最有可能喜歡的餐廳。這個推理階段使用的數據消耗模式與在培訓期間看到的不同,一個用戶與多個廣告配對,而不是一個用戶與一個廣告配對,因此需要不同的設計和數據表示考慮。
如何對這些模型進行有效的訓練,本身就是一個豐富而有趣的問題,也是英偉達積極發展的一個領域。然而,經常發現,對于推薦空間中的數據科學家來說,推論是更為尖銳的痛點。深度學習模型雖然功能強大,但通常比機器學習模型需要更多的計算。這就意味著在部署模型進行推理時,延遲(等待建議的時間)更高,吞吐量(每秒可以提出多少建議,這與成本有關)更低。如果你的高技能模型需要很長時間來完成的工作,或者成本太高,你可能會完全放棄,而不是一些技術較低但速度更快、成本更低的東西。
除了計算需求之外,推斷階段還提出了其系統級的考慮,這些考慮會影響部署的延遲和吞吐量測量。生成推薦查詢的站點(例如,智能手機)通常不具備在合理的時間內運行推薦模型的計算能力。解決此問題的標準方法是轉到客戶機-服務器模型,在該模型中,客戶機生成一個建議查詢,并將其發送到執行與該模型相關的所有計算任務并將結果發送回客戶機的遠程服務器。這會帶來潛在的瓶頸,因為數據需要通過網絡從客戶端發送到服務器并返回。要從服務器中提取最高值,讓多個客戶端向單個服務器發送查詢是很有用的。這又增加了在服務器上優化調度這些客戶機查詢的復雜性。此外,如果模型在GPU上運行,則到GPU的數據傳輸也會對性能產生影響。建議部署更為復雜,只需進行計算和完整的系統級分析就可以了解部署的端到端性能。
Wide & Deep
寬深網絡的主要組成部分是一個稠密神經網絡(DNN)和一個線性模型,其輸出被求和以創建交互概率。分類變量被嵌入到連續向量空間中,然后通過學習的或用戶確定的嵌入被輸入到DNN中。使該模型在推薦任務中如此成功的是,提供了兩種數據學習模式的途徑,“深”和“淺”。復雜的非線性DNN能夠學習數據中關系的豐富表示,但是需要看到這些關系的許多示例才能很好地實現。另一方面,線性部分能夠“記憶”簡單的關系,這些關系可能只在訓練集中出現幾次。
在組合中,這兩個表示通道通常最終提供的建模能力比單獨提供的任何一個都強。在Google關于架構的原始論文中,報告說,當使用Wide&Deep與DNN或單獨回歸相比時app store的收購率在統計學上有了顯著的提高。NVIDIA與許多行業合作伙伴合作,通過使用Wide&Deep替代更傳統的機器學習模型,報告了離線和在線指標的改進。
TensorFlow and DNNLinearCombinedClassifier
既然已經決定使用一個廣度和深度的模型來提出建議,就產生了如何實現的問題。也就是說,如何在代碼中定義從原始數據映射到正在尋找的0-1預測的所有小數學函數,更不用說定義更新和訓練過程所需的所有微積分函數了。
雖然有很多流行的深度學習框架來實現這些模型,但是選擇關注TensorFlow,特別是在DNNLinearCombinedClassifier類中預先構建的Wide&deep實現,這是的估計器API的一個實例。之所以選擇將注意力集中在這里,并不是因為必然是一個更好的選擇(盡管確實提供了強大的抽象功能,使數據科學家的工作更輕松),但由于看到被廣泛應用于大型消費性互聯網公司的生產規模推薦系統,有幸與之合作并從中學習。希望通過在用戶熟悉和熟悉的框架內工作,可以降低實現快速和可擴展推薦系統的障礙。
總結
以上是生活随笔為你收集整理的GPU加速:宽深度推理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NVIDIA TensorRT:可编程推
- 下一篇: TensorRT 加速性能分析