訓練吞吐量提高6倍!飛槳彈性計算推薦系統ElasticCTR 1.0發佈

現在,睡前刷刷新聞、視頻已經成了大多數人的習慣,有人認爲能夠適當緩解壓力、打發時間、有趣好玩, 甚至已經成爲生活中「不可或缺」的部分。爲何你們會以爲有趣呢?這後面很大程度是「推薦系統」在起做用。推薦系統經常使用的一種推薦策略,就是根據用戶的歷史喜愛推薦新的內容,讓用戶喜歡看,從而增長用戶粘性。python

 

推薦是如何實現的?git

目前在推薦系統領域,應用深度學習模型來實現推薦,能夠取得很是好的效果,是將來的發展趨勢。以一個新聞推薦的簡單例子來看,用戶訪問APP時,會對推送的新聞條目點擊(正樣本)或是滑過不點擊(負樣本),這些點擊行爲信息、加上用戶信息、新聞條目信息通過特徵提取之後,能夠獲得用戶特徵和新聞特徵之間的匹配度,匹配度越高說明用戶對這條新聞越感興趣。所以再推送新的新聞時,就能夠從清單中選擇匹配度最高的新聞推送給用戶。github

下載安裝命令

## CPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

## GPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

看起來問題的處理不算複雜,但實現開發這樣一套推薦系統,開發者會面臨諸多問題:服務器

 

圖:推薦系統的Workflow多線程

  1. 須要作繁雜的數據預處理:實際環境中數據集可能有成千上萬個特徵,但並不是每一個條目都有全部的特徵,也並不是每一個特徵都有必要參與訓練,須要處理後才能參與訓練;同時數據集的來源是原始的日誌信息,還須要作必定的格式轉換。架構

  2. 須要高速的數據集傳輸設計:推薦系統須要處理的日誌數據很是龐大,單機或是本地文件系統很難做爲日誌數據的載體,須要有分佈式的文件系統。並且在讀取文件的過程當中,須要設計高效的機制提高數據讀寫效率和併發處理效率,多隊列併發的IO組件尤其重要。併發

  3. 須要複雜的分佈式計算架構:龐大的數據集須要強有力的分佈式訓練框架支持,而完成分佈式計算的任務,開發者須要在繁雜的機器集羣之間配置,既繁瑣又容易出錯 。框架

  4. 須要精細的模型加載和配送系統:對於推薦系統來講,千萬甚至億級別的稀疏特徵做爲模型輸入十分常見,稀疏參數的規模動輒超過單機內存,所以實現分佈式稀疏參數查詢,而且可以對海量稀疏參數作精確裁剪、分片,是必不可少的工做。異步

  5. 須要吞吐量高的客戶端服務端交互:模型的部署上線難度取決於兩個方面,第一個是模型的大小,過大的模型須要作分割,分割以後的稀疏參數須要有專屬的高速KV服務器來索引;第二個是響應速度,客戶端、服務端、稀疏參數索引之間的通訊應當儘量快速高效。分佈式

以上每一個問題,對開發者來講都是一座大山,闖過一個個關卡以後,才能打通整個推薦系統。好在打怪升級的道路上並不寂寞,百度飛槳近期發佈了一套彈性計算推薦系統套件ElasticCTR,可實現端到端的推薦系統部署,爲廣大AI開發者又增添一套強勁的武器裝備。接下來咱們就來了解一下ElastcCTR都有哪些武器裝備。

ElasticCTR是什麼?

ElasticCTR,即飛槳彈性計算推薦系統,是基於Kubernetes的企業級推薦系統開源解決方案。該方案融合了百度業務場景下持續打磨的高精度CTR模型、飛槳開源框架的大規模分佈式訓練能力、工業級稀疏參數彈性調度服務,幫助用戶在Kubernetes環境中一鍵完成推薦系統部署,具有高性能、工業級部署、端到端體驗的特色,而且做爲開源套件,知足二次深度開發的需求。

ElasticCTR有哪些特點?

1. 端到端部署套件,免去繁瑣的中間處理環節,助力推薦系統快速上線

推薦排序的workflow複雜而瑣碎,開發者會面臨不一樣組件間難以整合的問題。例如:HDFS的分佈式文件系統,難以被訓練組件全內存多線程高效讀取;訓練組件產出模型後,因爲模型中的稀疏參數體積過大,須要在部署模型時作分割處理;推理組件須要對體積過大的稀疏參數作分片存儲處理,而且還需實現高效的遠程調用。所以有一套端到端的方案實現一站式部署,對開發者來講能夠大大提高工做效率。

 

百度在推薦系統領域有多年的成熟經驗,在這些經驗的加持下,ElasticCTR打通了端到端的部署流程,用戶只需配置好數據集,經過一個elastic_control.sh啓動工具,便可用簡單幾行命令,啓動高性能的分佈式訓練和在線預測服務PaddleServing等組件。中間的繁瑣步驟、模型配送等流程都不須要額外操做。

 

圖:ElasticCTR的Workflow示意

此外,在接下來幾個月,ElasticCTR還將繼續完善召回、向量檢索等其餘功能,也將整合更多的推薦模型,全方位的打造端到端推薦系統部署方案,幫助開發者快速上線推薦業務。

 

2. 彈性調度,全異步多線程分佈式訓練,訓練吞吐量提高6倍

對於不一樣規模的數據集和訪問需求,ElasticCTR提供了資源彈性分配機制,在保證高效的同時儘量節省資源消耗。在實際生產環境下,一套分佈式系統的搭建已經十分繁雜,更不用說在其基礎上彈性的增減資源,而ElasticCTR就給出了這樣的解決方案,爲開發者排憂解難。依託Kubernetes的彈性分配能力,以及百度開源的各個組件對彈性調度的大力支持,用戶在訓練前配置訓練的參數服務器和訓練節點的數量等參數後,便可啓動啓動訓練。

經驗證,使用Criteo數據集訓練CTR-DNN模型,訓練吞吐量相比同類框架可提高6倍。事實上,Criteo數據集只是一個簡單的例子,在實際應用中會有更大規模的稀疏參數,ElasticCTR的訓練和部署優點會更加顯著。

圖:CTR-DNN模型訓練效果對比

3. 流式訓練,實現自動、分批、按時訓練和配送模型

常見的深度學習訓練方式中,一般是固定數據集進行多輪次迭代,可是在推薦系統中,因爲日誌數據的時效性,數據集需分時段加載,訓練好的模型也需按時段配送。在實際生產環境中每每是分日期、分時段保存用戶點擊信息的日誌,ElasticCTR支持流式訓練方式,它的意義在於用戶能夠按照自定義的時段來訓練模型,也能夠監聽存放數據集的HDFS上是否有增量的數據集參與訓練,訓練好的模型亦可定時增量配送。

在分佈式文件系統上,按照必定的格式,例如yyyyMMdd/hh的格式將每一個時間段的數據集準備好,經過配置文件指定,就能夠把對應時間段裏的模型所有訓練,而且按時配送。若是沒有設定終止時間,就是在線訓練,時刻等待新的數據集。

4. 工業級全組件開源,知足二次深度開發訴求

ElasticCTR採用全開源組件,知足開發者二次深度開發的需求。在數據讀取和預處理環節,採用HDFS的存儲,全內存多線程讀取,打破數據傳輸的各類可能瓶頸;在訓練環節,採用飛槳核心框架的分佈式訓練能力,全異步多線程分佈式訓練,訓練速度可達到同類框架6倍之多;在部署環節,採用飛槳在線部署框架PaddleServing簡單易用的部署服務,並結合百度推薦場景成熟應用多年的稀疏參數索引服務Cube,確保了超大規模模型的快速部署和高效服務;此外,爲充分利用Kubernetes的彈性調度和資源分配機制以加強可用性,引入了Kubernetes的job管理框架Volcano。

 

如何用ElasticCTR

來搭建推薦系統?

接下來實戰演練一下ElasticCTR。咱們以Criteo廣告數據集爲輸入,採用ElasticCTR構建一個完整的推薦系統,實現廣告的推薦。Criteo廣告數據集一共有27個維度的稀疏參數,每一條樣本均有一個label來表示用戶是否點擊了這條廣告。

1 建立k8s集羣

ElasticCTR是基於Kubernetes(即k8s)環境的,因此須要先建立k8s集羣,這裏推薦使用百度智能雲容器引擎CCE,可參考文檔百度智能雲CCE容器引擎幫助文檔-建立集羣:

https://cloud.baidu.com/doc/CCE/s/zjxpoqohb

,其餘雲平臺或是自建K8S集羣亦可部署ElasticCTR。在準備好K8S集羣以後,安裝volcano,具體步驟可參考 :

https://volcano.sh/docs/getting-started/

2. 克隆ElasticCTR代碼庫

ElasticCTR已在github上開源:

git clone https://github.com/PaddlePaddle/ElasticCTR

用戶能夠在操做 K8S集羣的開發機上下載代碼庫。

3. 準備數據集

部署一個HDFS集羣,並在HDFS上存放好Criteo數據集。具體可參考HDFS配置教程。

4.執行訓練

ElasticCTR經過工具elastic-control.sh配置訓練參數和啓動訓練,只需5條命令,便可搞定訓練和部署。

sh elastic-control.sh -r    #訓練參數配置
sh elastic-control.sh -a    #執行訓練
sh elastic-control.sh -l    #查看訓練進度
sh elastic-control.sh –c    #下載客戶端SDK
python bin/elastic_ctr.py $IP 8010 conf/slot.conf data/ctr_prediction/data.txt    #客戶端預測

( 1 )配置訓練參數:

    a、在項目的elastic-ctr-cli文件夾下,配置data.config文件,指定數據集的來源。

上圖可查看data.config的配置信息,包含HDFS的地址和路徑,以及訓練的起始時間(2019年12月2日0點)和終止時間(2019年12月2日0點,只訓練一個小時的數據)。

    b、執行以下命令,配置訓練參數:

sh elastic-control.sh -r -u 4 -m 20 -t 2 -p 2 -b 2 -s slot.conf -f data.config

該命令表示在此次訓練當中啓動每一個節點4個CPU 20GB的內存,2個訓練節點,2個參數服務器節點,2個稀疏參數索引服務節點,特徵信息存放在slot.conf,HDFS地址和流式訓練配置放在data.config。

 

( 2 )執行訓練

sh elastic-control.sh -a

以上信息說明組件所有啓動成功。

( 3 )查看訓練進度

sh elastic-control.sh -l

咱們能夠在上圖看到訓練結束,模型加載完成,此時就能夠在客戶端進行最後的驗證了。

 

5.在線預測

下載客戶端SDK,而後執行預測。

 

sh elastic-control.sh -c
python bin/elastic_ctr.py $IP 8010 conf/slot.conf data/ctr_prediction/data.txt

最終咱們能夠看到對於data.txt裏的每一條樣本,模型都會給出預估結果和機率,來預測用戶是否會點擊此廣告條目。

咱們在data.txt中存放了100條的數據,最終預測的AUC約爲0.68。

百度的使命是用科技讓複雜的世界變簡單,而ElasticCTR的使命是讓推薦系統的開發和使用變簡單。咱們也將繼續擁抱開源,博採衆長,升級並完善ElasticCTR的各項功能,讓推薦系統的工業應用更加便捷,開發者的工做更加容易。

更多ElasticCTR的應用方法,歡迎訪問項目地址:

 

GitHub:

https://github.com/PaddlePaddle/ElasticCTR

Gitee: https://gitee.com/paddlepaddle/elasticctr

 

若是您加入官方QQ羣,您將趕上大批志同道合的深度學習同窗。官方QQ羣:703252161

 

若是您想詳細瞭解更多飛槳的相關內容,請參閱如下文檔。

下載安裝命令

## CPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

## GPU版本安裝命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

官網地址:https://www.paddlepaddle.org.cn

 

飛槳開源框架項目地址:

GitHub: https://github.com/PaddlePaddle/Paddle

Gitee:  https://gitee.com/paddlepaddle/Paddle

>> 訪問 PaddlePaddle 官網,瞭解更多相關內容

相關文章
相關標籤/搜索