一站式機器學習平臺Deepthought的建設與初探

愛奇藝技術產品團隊發表於2020-07-15

發展起源

奇藝除了在音影片、推薦等深度學的AI應用以外,也有不少資料探勘、資料分析的傳統機器學習應用場景,例如使用者預測、風控等。統的研發模式的痛點,就是會給演算法人員和業務人員一些不便利,具體如下:

1. 使用者程式碼基於單機指令碼實現,處理環節長、耦合高,難以修改和擴充套件,長久以來可讀性降低;

2. 同一業務下多個場景、同一場景下多個模型,在資料處理、模型訓練等技術流程上類似,場景重複步驟和資料結果難以重複利用;

3. 場景不同導致存在週期訓練、定時預估、實時預估等需求,對業務人員和演算法人員的程式碼要求高,維護成本高;

4. 演算法人員和業務人員對分散式機器學習的開發存在技術壁壘,導致資料量和模型複雜度受單機資源限制;

基於以上痛點,愛奇藝開發了面向通用的機器學習場景的一站式機器學習平臺Deepthought,可實現視覺化互動,能更加直觀便捷的搭建適合業務場景需要的架構,以及實時預估服務,是演算法模型部署至實際業務的重要環節。

業務需求

Deepthought在開發之初即考慮了以下基本業務需求:

1. 核心演算法基於分散式機器學習框架封裝,以開源封裝為主、自研實現為輔,滿足快速上線基本演算法需求;

2. 對於機器學習和資料探勘各個環節解耦,滿足不同環節的輸出結果可複用;

3. 與大資料平臺通天塔深度融合,利用通天塔管理的專案、資料、排程實現機器學習任務的線上、離線場景的執行;

4. 減輕使用者程式碼開發壓力,透過視覺化互動和配置方式,實現機器學習任務的編排,提升演算法模型搭建效率。

總體架構與發展歷史
Deepthought至今已迭代到3.0版,具體詳情如下:

  • Deepthought v1.0版,面向具體業務的機器學習平臺

屬於反作弊業務使用的機器學習平臺主要將反作弊業務中的機器學習流程各個階段解耦合,同時管理反作弊業務中的業務資料,例如黑名單、樣本、特徵管理。Deepthought v1架構如下圖所示。

一站式機器學習平臺Deepthought的建設與初探

Deepthought基於Spark ML/MLLib封裝了業務常用二分類模型,以及常用資料預處理過程,例如缺失值填充、歸一化等。

Deepthought v1更多工作在特徵管理和資料配置中,更加偏向反作弊本身的業務。在v1對Spark的封裝和流程解耦串式排程執行的方式在後續Deepthought版本中繼承了下來。

  • Deepthoughtv2.0版,面向通用業務的機器學習平臺

在v1.0的經驗基礎上做了通用化改進,透過元件化替代配置化,實現了常見的機器學習需求,例如自動調參;繼承了v1核心實現的思路,把機器學習通用流程保留下來,並借鑑業界成熟的使用者體驗方式,對整體系統進行重構。主要更新如下:
元件化管理和排程

所有資料處理和演算法執行透過元件的方式管理和排程。演算法的擴充套件除了核心邏輯和排程指令碼外,所有元件資訊和配置項都可透過後臺配置管理完成,前端互動時動態渲染元件的所有配置資訊。

演算法擴充

在v2我們持續增加了多個機器學習演算法,其中包括監督學習二分類、多分類、迴歸演算法,非監督學習的聚類、圖類演算法,多種資料預處理演算法以及多種演算法評估和資料分析視覺化元件,基本滿足傳統機器學習所有場景的需要。

視覺化互動

每一個機器學習的步驟,以元件的方式管理和使用。使用者透過對元件的拖拉拽方式的互動操作,能更加直觀便捷的搭建適合業務場景需要的架構,可實現的業務場景也更加靈活開放。另外,前端也提供了一系列標註化的報表控制元件,系統即時讀取的報表資料可動態渲染成視覺化報表。

離線定時排程任務

與大資料平臺通天塔許可權打通,透過大資料平臺通天塔讀取Deepthought任務資訊並進行排程,實現任務的定時預測的場景。

Deepthought v2架構如下圖所示。

一站式機器學習平臺Deepthought的建設與初探

  • Deepthoughtv3.0版,支援實時預估服務

v3在v2基礎上進行了功能擴充,在v3中Deepthought支援了自動調參和實時預估服務,並且對超大規模資料和模型,支援引數伺服器訓練。

自動調參

v2實現了自動調參的功能,可透過多種調參演算法,對多個引數進行最佳化組合、並行訓練,最終找出最優評估效果的引數組合和最優模型。透過自動執行重複性任務提高使用者工作效率,使得使用者更多關注問題,而不是模型。

已經實現的調參方式包括隨機搜尋、網格搜尋、貝葉斯最佳化和進化演算法。

實時預估

實時預估服務是演算法模型部署至實際業務的重要環節,v3已經實現了多個常用模型的實時預估功能,並支援HTTP、RPC兩種協議。
實時預估服務透過QAE載入預估核心程式碼,並透過Skywalker/Dubbo釋出HTTP/RPC服務,並透過Hubble、Venus接入日誌監控。
核心程式碼透過初始化載入預處理模組,讀取模型後,開始監聽服務埠。為了最大化利用計算資源,降低預估時長,預測採用執行緒池+流水線方式,對單條請求多行資料拆分處理。

引數伺服器

由於一些內在原因,在基於Spark的機器學習無法支撐百萬級以上維度、億級以上行數的超大規模資料訓練。業界透過引數伺服器解決了超大規模資料訓練的問題。v3整合了開源引數伺服器,並在此基礎上實現了部分常用模型的引數伺服器版本。

Deepthought v3架構如下圖所示。

一站式機器學習平臺Deepthought的建設與初探

部分核心實現與封裝

下文將對平臺部分核心功能的實現和封裝簡要介紹。

Spark ML/MLLib封裝

Deepthought中演算法元件基於spark原生ml/mllib包進行封裝和改進,在繼承了其平行計算、通道流式處理等優點之外,還加入一系列提供使用者易用性的功能,同時增加了一些原生包中不存在的演算法。

例如gbdt編碼演算法。gbdt作為一個應用廣泛的機器學習基礎演算法,不僅可用在分類、迴歸上,還可以用在特徵構造上。透過訓練好的gbdt模型,可對原始資料進行離散化,最終輸出為類似於one-hot的形式,從而將輸出資料灌入fm,lr等模型進行進一步的訓練使用。
在Deepthought中,透過將ml中gbdt儲存功能最佳化,將每個樹詳情進行儲存。在gbdt編碼元件中,透過訓練好的gbdt模型和樹詳情,重構多棵樹併為每棵樹葉子節點進行編碼。最終將資料並行灌入所有的樹,並將最後結果拼接,從而得到對應的編碼結果。
Deepthought在滿足常用性的模型的基礎,豐富更多的模型,可以讓使用者在業務模型的構建上有更多的選擇,從而豐富了平臺的功能性。
資料預處理

Deepthought不僅僅是對Spark ML/MLLib做了封裝,也有很多基於實際業務和平臺化的開發。為了擴充套件和最佳化Deepthought的功能,Deepthought增加了資料預處理元件以及訓練元件中的標籤自動轉換功能。

使用者可以透過在透過拖動不同的預處理元件,Deepthought會根據其選擇的元件生成滿足使用者需求的可使用資料,比如分層抽樣、資料壓縮、資料編碼等。
為方便使用者,deepthough所有元件中都擁有標籤自動轉換功能,Deepthought會對輸入標籤進行map對映,根據標籤中各個標籤個數分別對映為從0開始的轉換標籤,並將該map儲存,從而使得預測元件保持一致,並且最終原樣輸出標籤。

loss實時輸出原理

一個良好的可用的機器學習模型,需要經過演算法工程師不斷的調優、嘗試;而模型的調優需要花費大量的時間和精力。

損失函式(loss function)在機器學習應用中,作為學習準則與最佳化問題相聯絡,即透過最小化損失函式求解和評估模型。而每一次迭代損失函式值的變化,預示著模型的與目標的距離變化。損失函式曲線及loss曲線,代表著模型訓練的收斂速度,演算法工程師可以透過曲線判別模型的損失函式、超參等設定是否合理,決定是否在中途停止模型訓練,從而節約調優時間,提升模型訓練效率。
Deepthought平臺演算法元件是基於spark中ml和mllib兩個庫改進封裝,而loss曲線輸出功能在兩個庫中並未提供。Deepthought為了使使用者在訓練時能同步檢視loss曲線(類似於tensorflow),基於spark訊息通訊和事件匯流排的方式,為演算法元件增加loss值輸出功能,從而實現了loss曲線的同步顯示功能。
實時預估熱載入改造

使用者線上上使用模型實時預估的過程中,需要定期使用新訓練的模型替換舊模型。在實時預估服務的早期版本中,預估服務程式碼在載入到QAE後,透過初始化一次性載入模型到記憶體裡。

這就導致如果需要更新模型時,我們需要透過kill QAE例項,逐漸替換QAE達到新模型替換舊模型的效果。這種方式存在缺陷是:

1. 使用者對切換過程不可知,無法追蹤某次響應具體是舊模型或新模型的預測結果;

2. 由於RPC是長連線,KILL一個QAE例項後會導致當前例項中的所有連結中斷。過程雖然短暫,但仍然會造成一定的請求抖動。

透過對已有服務進行熱載入改造,實現了模型熱載入,並可支援同一QAE例項下多模型共享資源,以及支援使用者顯式選擇指定版本訪問服務。
剝離HTTP和RPC框架本身後,我們將通用服務封裝成模型預測服務,提供預測通用預測介面和管理介面(載入模型和檢視模型)。被載入的模型封裝成物件,存放在全域性物件池中。預測服務內提供模型路由功能,透過解析使用者請求,檢測使用者是否顯式訪問指定模型和指定版本。如果使用者不顯式請求,路由器會指向物件池中的最新版本呼叫預估服務。

目前應用和後續工作

目前應用簡介

目前Deepthought已被流量反作弊、使用者行為分析、愛奇藝號、文學等多個團隊使用。下文簡要介紹目前已在Deepthought開展業務的一些典型場景。

流量反作弊業務

目前流量反作弊業務已全線使用Deepthought進行模型訓練和離線預測。

透過Deepthought提供的一些資料探勘工具,例如kmeans聚類和孤立森林異常檢測,反作弊同學可分析出異常流量特徵,透過圖分析工具,挖掘出團伙特徵。基於這些分析結果,透過大資料平臺通天塔工作流手動或半自動引入到特徵工程和標籤庫。

一站式機器學習平臺Deepthought的建設與初探
在具體模型引用上,反作弊常用二分類模型,例如LR、GBDT和XGBoost,對特徵資料分類。在實際應用中,透過大資料平臺通天塔定期執行Deepthought任務,實現週期性模型更新和離線預測。透過Deepthought自動調參功能自動最佳化模型超參,模型實際準確率和召回率均超過97%。
一站式機器學習平臺Deepthought的建設與初探
推薦業務

Deepthought在推薦業務中也受到的廣泛的應用和好評。

Deepthouht平臺致力於幫助推薦業務更加清晰明朗化了模型訓練過程,使得推薦業務的小夥伴能夠更加專注於模型的選擇,業務的理解等方面。
推薦團隊的同學可透過Deepthought平臺提供的gbdt編碼、sql自定義、lr、協同過濾、fm等演算法元件,實現推薦模型的構建和訓練。

一站式機器學習平臺Deepthought的建設與初探

在整個推薦業務中,Deepthought專注於模型的訓練,透過將大資料平臺通天塔準備好的資料給入到Deepthought平臺,使用者透過拉取元件的形式,構建一系列資料預處理,資料拆分,模型訓練、評估的流程,並在模型訓練完備之後部署到線上,從而進行實時的預估附。當整套流程第一次構建完成之後,使用者往後僅僅需要定時執行流程,實現模型的更新即可。

其中gbdt編碼+fm訓練的組合模型,是使用頻率最高的模型之一。推薦業務透過gbdt編碼將連續型資料轉換為離散型資料,在與已有離散型資料進行拼接,從而得到可用於fm模型訓練的資料。

一站式機器學習平臺Deepthought的建設與初探


當模型訓練完成,Deepthought透過公眾號和郵件的方式通知使用者模型的準確率、召回等詳情。當模型確認可用後,可透過Deepthought平臺將模型進行實時部署,從而滿足推薦業務的實時預測需求。

除此之外,為了解決推薦業務存在過多特徵組合拼接的問題,Deepthought提供了feature extract udf函式,使用者可透過配置檔案的方式,實現對原屬資料的拼接、相加、計算log等原子操作。並且Deepthought演算法元件中還提供idMap對映功能,使得對資料進行了編碼或map對映的團隊,依然可採用Deepthought平臺。
總結與後續規劃

Deepthought對大量機器學習封裝和平臺化開發,使使用者可透過簡單配置和拖動方式完成機器學習操作,協助非演算法業務同學能夠輕鬆使用機器學習,同時規範使用,大大減輕使用者在重複程式碼和演算法、模型管理上的工作量。同時,與大資料平臺通天塔深度合作,實現資料開發到模型訓練、離線、線上預測全流程閉環,是大資料團隊資料中臺重要組成部分。

Deepthought後續將繼續提高操作的便利性,系統穩定性;並且會在在實時預估服務上擴充套件已有模型的支援;演算法層面將繼續逐步豐富模型型別,並嘗試加入深度學習模型。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945252/viewspace-2704726/,如需轉載,請註明出處,否則將追究法律責任。

相關文章