當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]導(dǎo)讀:汽車之家機(jī)器學(xué)習(xí)平臺是為算法工程師打造的一站式機(jī)器學(xué)習(xí)服務(wù)平臺,集數(shù)據(jù)導(dǎo)入、數(shù)據(jù)處理、模型開發(fā)、模型訓(xùn)練、模型評估、服務(wù)上線等功能于一體,提供一站式全方位的機(jī)器學(xué)習(xí)建模流程,快速打造智能業(yè)務(wù)。本文主要介紹汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)和實(shí)

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

導(dǎo)讀:汽車之家機(jī)器學(xué)習(xí)平臺是為算法工程師打造的一站式機(jī)器學(xué)習(xí)服務(wù)平臺,集數(shù)據(jù)導(dǎo)入、數(shù)據(jù)處理、模型開發(fā)、模型訓(xùn)練、模型評估、服務(wù)上線等功能于一體,提供一站式全方位的機(jī)器學(xué)習(xí)建模流程,快速打造智能業(yè)務(wù)。本文主要介紹汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)和實(shí)現(xiàn)細(xì)節(jié),以及業(yè)務(wù)在平臺上的應(yīng)用,希望能為大家提供一些參考。

主要內(nèi)容包括:

  • 背景介紹

  • 機(jī)器學(xué)習(xí)平臺

  • 平臺成效與應(yīng)用

  • 平臺展望

01

背景介紹

汽車之家是國內(nèi)最早的將互聯(lián)網(wǎng)與汽車產(chǎn)業(yè)深入捆綁的汽車服務(wù)平臺,在2005年成立初期以垂直互聯(lián)網(wǎng)介入汽車行業(yè),迅速做成國內(nèi)規(guī)模最大的汽車垂直網(wǎng)絡(luò)媒體,并逐漸發(fā)展為"車媒體+車電商"的1.0模式。2016年以"數(shù)據(jù)+技術(shù)"打造車金融、車內(nèi)容、車生活以及車交易的數(shù)據(jù)平臺2.0模式,以便為用戶和客戶之間創(chuàng)造更有效的連接。目前,汽車之家利用 AI、大數(shù)據(jù)及云,以流量、銷售線索、內(nèi)容及數(shù)據(jù)等賦能汽車生態(tài)系統(tǒng)中各個(gè)參與方,加速邁向智能平臺3.0時(shí)代。汽車之家機(jī)器學(xué)習(xí)平臺在智能平臺3.0的背景下應(yīng)用而生,通過廣泛支持自然語言處理、圖像分析、語音識別、視頻分析、推薦、搜索、廣告等場景的 AI 服務(wù),有效提升了汽車之家 AI 的應(yīng)用效果,擴(kuò)展了 AI 的應(yīng)用范圍,提高了用戶看車,買車,用車的體驗(yàn)。

機(jī)器學(xué)習(xí)領(lǐng)域,最重要的三個(gè)環(huán)節(jié)如下圖,包括數(shù)據(jù)處理,模型訓(xùn)練和服務(wù)部署,每一環(huán)節(jié)包含的內(nèi)容很多,都可以單獨(dú)拿出來做一個(gè)平臺。

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

在早期,之家內(nèi)部算法團(tuán)隊(duì)在各自的服務(wù)器上進(jìn)行機(jī)器學(xué)習(xí)的訓(xùn)練和服務(wù)部署,造成了小作坊式的工作局面,各自重復(fù)著這三個(gè)環(huán)節(jié)來支持業(yè)務(wù)。在開始算力規(guī)模小的時(shí)候,這種小作坊方式保證了工作的靈活與創(chuàng)新突破,但是隨著業(yè)務(wù)的增加和算力的增長,逐漸顯示了這種方式的局限性。主要體現(xiàn)在兩個(gè)方面:

  • 昂貴的計(jì)算資源不能得到有效的調(diào)度,公司的投入產(chǎn)出效益越來越低。因此基于這種局面,公司急需一種平臺化的方式來統(tǒng)一調(diào)度計(jì)算資源。

  • 各個(gè)業(yè)務(wù)線包括團(tuán)隊(duì)內(nèi)部,業(yè)務(wù)不同,用的數(shù)據(jù)不盡相同,大部分的工程技術(shù)人員和業(yè)務(wù)人員都聚焦在業(yè)務(wù)領(lǐng)域的特征提取,算法選擇,參數(shù)調(diào)優(yōu)和模型驗(yàn)證上,因此一個(gè)方便高效的可視化建模平臺,對于降低用戶的機(jī)器學(xué)習(xí)學(xué)習(xí)曲線、提升工作效率顯得尤為重要。

由此汽車之家構(gòu)建了自己的機(jī)器學(xué)習(xí)平臺,該平臺同時(shí)支持深度學(xué)習(xí)和傳統(tǒng)機(jī)器學(xué)習(xí)建模、可視化建模、統(tǒng)一的計(jì)算資源和存儲資源管理、統(tǒng)一的部署平臺,力求達(dá)到以下目標(biāo):

開發(fā)通用化:一次開發(fā)重復(fù)使用,避免重復(fù)造輪子,提高工作效率。將算法工程師們從繁重的腳本開發(fā)工作中解放出來專注于算法效果的提升。

建模極簡化:用戶僅需根據(jù)自己的需求在頁面上通過拖拽的形式完成數(shù)據(jù)的導(dǎo)入,預(yù)處理,模型建模與評估等流程。這樣即使是對模型算法不甚了解的產(chǎn)品運(yùn)營同事在經(jīng)過簡單的了解后也可輕松上手,依據(jù)自身需求完成簡單數(shù)據(jù)處理或者建模任務(wù)。

數(shù)據(jù)可視化:可以支持輸入數(shù)據(jù)可視化,數(shù)據(jù)分析可視化、計(jì)算圖可視化、訓(xùn)練過程可視化、模型效果可視化。

02

機(jī)器學(xué)習(xí)平臺

1. 整體架構(gòu)

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

計(jì)算資源包括高性能 CPU 集群和云 GPU 集群,高性能 CPU 集群用于訓(xùn)練和部署傳統(tǒng)機(jī)器學(xué)習(xí)模型,云 GPU 集群用于訓(xùn)練和部署深度學(xué)習(xí)模型。

基于資源的不同,機(jī)器學(xué)習(xí)和深度學(xué)習(xí)底層采用了兩種不同類型的架構(gòu)方式,機(jī)器學(xué)習(xí)訓(xùn)練使用 Spark 做計(jì)算,通過 Yarn 來調(diào)度計(jì)算資源;深度學(xué)習(xí)訓(xùn)練使用 K8s 做調(diào)度,支持主流的 Tensorflow、PaddlePaddle、MxNet、Caffe 等深度學(xué)習(xí)框架,并且支持單機(jī)和分布式訓(xùn)練。

存儲層包括業(yè)務(wù)端通用的樣本庫、特征庫和模型庫,主要存放在 Hive 倉庫和 HDFS 上。

平臺抽象了算法組件包括機(jī)器學(xué)習(xí)的數(shù)據(jù)預(yù)處理、特征工程、統(tǒng)計(jì)分析、分類、聚類、回歸、評估、預(yù)測等100+個(gè)組件。

模塊對外提供了模型訓(xùn)練、模型評估、模型預(yù)測、模型管理和模型部署功能,滿足了算法人員的模型訓(xùn)練和部署模型服務(wù)的需求,同時(shí)還提供了交互式編程 Notebook,提高了開發(fā)人員的開發(fā)效率。

2. 機(jī)器學(xué)習(xí)建模流程

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

算法框架:

由于 Spark 選擇內(nèi)存存儲輸入數(shù)據(jù)、處理中間結(jié)果、和存儲最終結(jié)果,在大數(shù)據(jù)的場景中,很多計(jì)算都有循環(huán)往復(fù)的特點(diǎn),像 Spark 這樣允許在內(nèi)存中緩存輸入輸出,上一個(gè) job 的結(jié)果馬上可以被下一個(gè)使用。因此 Spark 有著高效的分布式計(jì)算能力。

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

此外 Spark 提供了更多靈活可用的數(shù)據(jù)操作,比如 filter、union、join 以及各種對 key value pair 的方便操作,甚至提供了一個(gè)通用接口,讓用戶根據(jù)需要開發(fā)定制的數(shù)據(jù)操作。Spark 本身作為平臺也開發(fā)了 streaming 處理框架 Spark streaming,SQL 處理框架 Dataframe,機(jī)器學(xué)習(xí)庫 MLlib 和圖處理庫 GraphX。更重要的是 Spark 可以提供面向 python 的開發(fā)接口,提高了開發(fā)效率。因此我們選擇 Spark 作為我們平臺的算法框架。

算法端流程:

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

  • 后端將用戶構(gòu)建的建模流程及配置的模型參數(shù)包裝至 json 調(diào)用算法端接口

  • 算法端通過 spark-submit 提交一個(gè) Spark 任務(wù)

  • ML Engine 負(fù)責(zé)這個(gè)任務(wù)的執(zhí)行,在 Driver 端會(huì)從 json 中獲取當(dāng)前試驗(yàn)的流程關(guān)系及對應(yīng)的參數(shù)。這些組件將依次運(yùn)行,涉及 RDD 相關(guān)的操作時(shí)會(huì)提交到 Spark Executor 進(jìn)行并行計(jì)算

3. 深度學(xué)習(xí)訓(xùn)練

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

以上為機(jī)器學(xué)習(xí)平臺-深度學(xué)習(xí)部分的邏輯架構(gòu)圖,平臺支持了深度模型的訓(xùn)練和服務(wù)部署功能。為了更好的管理計(jì)算資源,需要將所有的計(jì)算資源集中起來,尤其是 GPU 機(jī)器,做到按需分配,使資源的使用率盡量接近100%,這樣才能提高我們的生產(chǎn)力,節(jié)約公司成本。這就需要一個(gè)容器管理系統(tǒng)來管理我們的 GPU 集群。

① 技術(shù)選型

我們調(diào)研了 K8s 和 Yarn。Yarn 作為大數(shù)據(jù)平臺標(biāo)配的資源調(diào)度器,確實(shí)有很多優(yōu)點(diǎn)并且比較成熟,但是鑒于 Yarn 對在線服務(wù)的支持較弱,新版的 Yarn 才支持 GPU 調(diào)度,存在穩(wěn)定性風(fēng)險(xiǎn)。相對于 Yarn,K8s 現(xiàn)在社區(qū)比較強(qiáng)大,對 GPU 卡的調(diào)度有很好的支持,支持服務(wù)的自動(dòng)化部署,服務(wù)的運(yùn)維成本低,我們選擇用 K8s 做為平臺的容器管理系統(tǒng)。

存儲:

模型訓(xùn)練的訓(xùn)練樣本數(shù)據(jù)大多存儲在 HDFS 和 Hive 表中,平臺實(shí)現(xiàn)了與 Hadoop 集群的互通。任務(wù)在運(yùn)行前需要拉取數(shù)據(jù)到容器內(nèi)部,為了保證數(shù)據(jù)的持久化存儲和可擴(kuò)展性,需要外部存儲系統(tǒng)來支持,我們選擇了 Ceph。使用 Ceph 主要有以下幾個(gè)好處:

  • 可以支持較大的數(shù)據(jù)規(guī)模,較大的樣本數(shù)據(jù)可以達(dá)到幾百 G 甚至到幾 T,當(dāng)遇到集群節(jié)點(diǎn)故障,任務(wù)的 Pod 重啟,還能繼續(xù)訪問數(shù)據(jù)進(jìn)行訓(xùn)練。

  • Ceph 是一個(gè)統(tǒng)一的分布式存儲系統(tǒng),該系統(tǒng)擁有很好的性能、可靠性和可擴(kuò)展性。在單機(jī)訓(xùn)練中主要用到的是 Ceph 的塊存儲 RBD,在多機(jī)分布式訓(xùn)練中需要共享訓(xùn)練數(shù)據(jù)用到的是 CephFS,任務(wù)運(yùn)行結(jié)束,存儲資源根據(jù)用戶選擇決定是否釋放。

調(diào)度:

通過構(gòu)建 K8s 的 GPU 集群,來統(tǒng)一調(diào)度 GPU,CPU 和內(nèi)存資源,通過 Docker 保證環(huán)境完全隔離,任務(wù)之間不受影響,任務(wù)結(jié)束,占用的資源隨即得到釋放。同時(shí)基于 K8s 可以做靈活的調(diào)度策略。如現(xiàn)在集群有多種類型的 GPU 卡,用戶可以根據(jù)實(shí)際情況選擇卡的類型,具體做法通過對 GPU 節(jié)點(diǎn)打 label 的方式實(shí)現(xiàn),根據(jù)節(jié)點(diǎn)類型標(biāo)記對應(yīng)的 label,啟動(dòng)任務(wù)配置 nodeSelector 實(shí)現(xiàn)卡類型的精確分配;由于 k8s 分配最大資源是整個(gè)物理機(jī)的資源,有些復(fù)雜的訓(xùn)練任務(wù)在單機(jī)多卡方式下,為了能分到更多的 GPU 卡進(jìn)行訓(xùn)練,在訓(xùn)練集群使用 K8s 的節(jié)點(diǎn)親和性調(diào)度 nodeAffinity,可以使訓(xùn)練任務(wù)集中調(diào)度。K8s 支持通過插件的方式進(jìn)行自定義調(diào)度,如果現(xiàn)有的調(diào)度方式不滿足需求,可以通過自定義調(diào)度實(shí)現(xiàn)更靈活的調(diào)度策略。

② 建模訓(xùn)練

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

深度學(xué)習(xí)訓(xùn)練的細(xì)節(jié)如上圖,用戶通過 WEB 客戶端或 Shell 客戶端提交訓(xùn)練任務(wù),服務(wù)端拿到用戶提交參數(shù),組裝好 K8s 資源和配置 yaml 文件,提交到 K8s 集群。在啟動(dòng)任務(wù)之前,會(huì)通過集群里的 StorageClass 創(chuàng)建好 pvc 對象,作為訓(xùn)練任務(wù)掛盤對象,如果用戶使用的 Tensorflow 框架訓(xùn)練,平臺支持啟動(dòng) Tensorboard,方便查看訓(xùn)練的效果和進(jìn)度,此時(shí)也會(huì)創(chuàng)建 Tensorboard 的負(fù)載對象 Ingress 和 Service。前面準(zhǔn)備工作做完,K8s 會(huì)根據(jù)用戶指定的 GPU、CPU、內(nèi)存及卡類型參數(shù)在集群里通過調(diào)度分配訓(xùn)練任務(wù)到合適的節(jié)點(diǎn),沒有資源會(huì)處于等待狀態(tài),直到有資源可以調(diào)度啟動(dòng)任務(wù)。啟動(dòng)任務(wù)后,先進(jìn)行容器環(huán)境的初始化過程,主要包括配置 Hadoop 相關(guān)權(quán)限,訓(xùn)練數(shù)據(jù)和訓(xùn)練腳本的拉取,初始化工作完成后訓(xùn)練任務(wù)開始運(yùn)行,訓(xùn)練過程中,平臺支持導(dǎo)出中間的訓(xùn)練結(jié)果,訓(xùn)練結(jié)束后,最終結(jié)果會(huì)自動(dòng)輸出到用戶指定的輸出目錄。

③ 深度學(xué)習(xí)分布式訓(xùn)練

如果訓(xùn)練時(shí)間長或者樣本規(guī)模大,超過單臺服務(wù)器能力時(shí),需要支持分布式訓(xùn)練。以 Tensorflow 分布式為例,一個(gè) TensorFlow 分布式程序?qū)?yīng)一個(gè)抽象的集群,集群 ( cluster ) 由工作節(jié)點(diǎn) ( worker ) 和參數(shù)服務(wù)器 ( parameter server ) 組成。工作節(jié)點(diǎn) ( worker ) 承擔(dān)矩陣乘、向量加等具體計(jì)算任務(wù),計(jì)算出相應(yīng)參數(shù) ( weight 和 bias ),并把參數(shù)匯總到參數(shù)服務(wù)器;參數(shù)服務(wù)器 ( parameter server ) 把從眾多工作節(jié)點(diǎn)收集參數(shù)匯總并計(jì)算,并傳遞給相應(yīng)工作節(jié)點(diǎn),由工作節(jié)點(diǎn)進(jìn)行下一輪計(jì)算,如此循環(huán)往復(fù)。

對應(yīng)到平臺中,平臺提供了 Tensorflow 分布式的 ps 節(jié)點(diǎn)和 worker 節(jié)點(diǎn),平臺負(fù)責(zé)了 ps 節(jié)點(diǎn)和 worker 節(jié)點(diǎn)的網(wǎng)絡(luò)互通,構(gòu)建了 ClusterSpec,定義了2個(gè) ps 節(jié)點(diǎn),3個(gè) worker 節(jié)點(diǎn)。

tf.train.ClusterSpec({"worker": ["worker0.example.com:2222", "worker1.example.com:2222", "worker2.example.com:2222"], "ps": ["ps0.example.com:2222", "ps1.example.com:2222"]})

這些內(nèi)容用戶不需要進(jìn)行配置,只需要在 Tensorflow 組件參數(shù)中設(shè)置 ps 和 worker 的個(gè)數(shù),在啟動(dòng)命令里通過獲取 PS_HOSTS、WORKER_HOSTS、JOB_NAME 和 TASK_INDEX 環(huán)境變量初始化相關(guān)參數(shù),就可以快速啟動(dòng)分布式訓(xùn)練任務(wù),這樣簡化了用戶使用分布式訓(xùn)練的工作量。

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

平臺構(gòu)建分布式任務(wù)的具體實(shí)現(xiàn)方式時(shí)這樣的,如定義了 m 個(gè) ps,n 個(gè) worker,在 K8s 集群里定義 n 個(gè) Job 對應(yīng)為分布式任務(wù)的 worker,n 個(gè) Job 共享同一份數(shù)據(jù),然后定義 m 個(gè) Deployment 對應(yīng)為分布式任務(wù)的 ps,把每個(gè)角色的網(wǎng)絡(luò)連接方式放置在 ps 和 worker 的環(huán)境變量中供用戶初始化參數(shù)使用,任務(wù)結(jié)束后,訓(xùn)練結(jié)果從 worker-0 導(dǎo)出到 HDFS 中,計(jì)算資源釋放。

4. 模型部署管理

平臺上訓(xùn)練的機(jī)器學(xué)習(xí)模型通過 PMML 格式導(dǎo)出,統(tǒng)一存放在 HDFS 中進(jìn)行維護(hù),通過平臺一鍵部署預(yù)測服務(wù)。對于深度學(xué)習(xí)模型,平臺提供了 ModelZoo 功能,支持用戶上傳模型文件,通過平臺提供的公共深度學(xué)習(xí)框架的 Serving 鏡像啟動(dòng)預(yù)測服務(wù),同時(shí)平臺也支持用戶用自己構(gòu)建的鏡像來部署預(yù)測服務(wù),這樣簡化了算法工程師部署預(yù)測服務(wù)的流程,同時(shí)也不失靈活性。

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

借助于 K8s 對服務(wù)部署的支持,平臺提供了服務(wù)的伸縮,更新,使服務(wù)流量增長時(shí)能快速實(shí)現(xiàn)服務(wù)的擴(kuò)容,同時(shí)提供了服務(wù)的動(dòng)態(tài)伸縮功能,能做到服務(wù)流量突增時(shí)實(shí)現(xiàn)服務(wù)的自動(dòng)擴(kuò)容,服務(wù)流量下降時(shí)自動(dòng)縮進(jìn)實(shí)例,使服務(wù)端的 GPU 得到一個(gè)合理的利用。

03

平臺成效與應(yīng)用

針對之家算法工程師的實(shí)際業(yè)務(wù)場景需要,深度學(xué)習(xí)平臺支持了目前主流的深度學(xué)習(xí)框架 Tensorflow,Caffe,PaddlePaddle,PyTorch,Keras,Kaldi 等,涉及到圖像、語音、NLP、視頻、推薦、廣告等多個(gè)業(yè)務(wù)領(lǐng)域。如語音的 DeepSpeech 模型,圖像的 ResNet、AlexNet、EfficientNet 模型,NLP 的 bert 模型,推薦廣告的 DeepFM、DCN、DIEN 模型。 

平臺上線后,機(jī)器的供需矛盾得到很好的解決,機(jī)器利用率得到很大的提升。上線前算法工程師可用的機(jī)器只有申請的有限的幾臺機(jī)器,上線后可用的是整個(gè)集群的資源,即來即用,不用釋放,平臺對集群里的機(jī)器資源使用進(jìn)行了全方位的監(jiān)控,能實(shí)時(shí)查看計(jì)算資源的使用情況。同時(shí)平臺很好的支持了模型部署,線上環(huán)境隔離,多版本部署,快速啟動(dòng),使機(jī)器學(xué)習(xí)服務(wù)上線效率得到很大提升。

1. 購車意愿模型在機(jī)器學(xué)習(xí)平臺上的應(yīng)用

作為全球訪問量最大的汽車網(wǎng)站,如何從海量的用戶訪問瀏覽行為中發(fā)掘用戶購車的意向或中意的車系車型,一直是汽車之家算法工程人員研究的重點(diǎn)課題。

下面介紹通過 GBDT 模型對用戶的購車意愿進(jìn)行預(yù)測建模。

① 數(shù)據(jù)集介紹

數(shù)據(jù)截圖如下:

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

② 數(shù)據(jù)探索流程

實(shí)驗(yàn)流程圖如下:

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

數(shù)據(jù)源準(zhǔn)備

輸入數(shù)據(jù):

  • 用戶瀏覽行為數(shù)據(jù)集:共16503613條數(shù)據(jù)型,包括 "duration"、"freqs_rank" 等特征,"label" 為是否買車。

  • 數(shù)據(jù)來源:汽車之家數(shù)據(jù)倉庫 ( hive )

數(shù)據(jù)預(yù)處理

利用類型轉(zhuǎn)換組建,將數(shù)據(jù)集中的 string 類型轉(zhuǎn)為 float 類型方便后續(xù)的計(jì)算,再利用拆分組建將數(shù)據(jù)集劃分為訓(xùn)練集 ( 占總數(shù)據(jù)集的85% ) 和測試集 ( 占總數(shù)據(jù)集的15% )。

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

模型訓(xùn)練及預(yù)測

使用機(jī)器學(xué)習(xí)組建中的 GBDT 算法對數(shù)據(jù)集進(jìn)行訓(xùn)練并生成回歸模型,在預(yù)測組件中利用二分類評估組建對預(yù)測集數(shù)據(jù)進(jìn)行了預(yù)測。結(jié)果如下圖所示。

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

特征重要性評估

通過特征重要性評估組件對模型中的各個(gè)特征進(jìn)行評估計(jì)算出該特征的重要性權(quán)重,評估結(jié)果如下圖所示。

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

2. 推薦排序模型在機(jī)器學(xué)習(xí)平臺上的應(yīng)用

下面主要從推薦排序模型如何借助機(jī)器學(xué)習(xí)平臺進(jìn)行數(shù)據(jù)接入、數(shù)據(jù)處理、建模、訓(xùn)練等四個(gè)方面進(jìn)行分別闡述。

① 數(shù)據(jù)接入

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

機(jī)器學(xué)習(xí)平臺支持多種數(shù)據(jù)源接入,目前推薦業(yè)務(wù)的離線數(shù)據(jù)存放在 HDFS 上,實(shí)時(shí)數(shù)據(jù)通過 Flink 接入。

② 數(shù)據(jù)處理

機(jī)器學(xué)習(xí)平臺對常見的數(shù)據(jù)處理方式進(jìn)行了封裝,不僅支持對某些特征的異常值檢測、數(shù)據(jù)分析等功能,還支持對特征數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化、歸一化、降維、分桶等常見的數(shù)據(jù)處理方式,同時(shí)還可以通過自定義sql的方式提供一站式的數(shù)據(jù)處理以及數(shù)據(jù)可視化分析。

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

③ 建模

機(jī)器學(xué)習(xí)平臺目前支持上百種組件,對推薦排序場景提供了全方位的支持。其中模型不僅支持 LR、GBDT、XGB 等傳統(tǒng)的機(jī)器學(xué)習(xí)模型,同時(shí)還支持常見的深度學(xué)習(xí)模型,如 FM、Wide&Deep、DeepFM、DCN 等,下圖將展示 online DeepFM 在機(jī)器學(xué)習(xí)上應(yīng)用的實(shí)例。

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

建模過程中,傳統(tǒng)的機(jī)器學(xué)習(xí)模型可以通過自動(dòng)化的調(diào)參方式進(jìn)行主要參數(shù)設(shè)置,常見的深度學(xué)習(xí)模型提供了部分參數(shù)的配置,如網(wǎng)絡(luò)層數(shù),dense embedding 的維數(shù),學(xué)習(xí)率衰減系數(shù)等,這為模型的訓(xùn)練帶來很大的便利。

④ 訓(xùn)練

之家的推薦排序模型經(jīng)歷了從傳統(tǒng)的機(jī)器學(xué)習(xí)模型 LR、xgb 到 FM 、Wide&Deep、DeepFM、DIN、MMOE 等深度學(xué)習(xí)模型的迭代演進(jìn)。之家首頁推薦每天會(huì)產(chǎn)生上億條日志數(shù)據(jù),經(jīng)過數(shù)據(jù)清理后,訓(xùn)練樣本數(shù)據(jù)量達(dá)到百 G 甚至 T 級別,面對如此大規(guī)模的數(shù)據(jù),如何有效的縮短算法的訓(xùn)練時(shí)間成為了關(guān)鍵。

傳統(tǒng)的機(jī)器學(xué)習(xí)模型如 LR,XGB 等基于 Spark 進(jìn)行分布式的訓(xùn)練,訓(xùn)練時(shí)間在小時(shí)級別,較為可控。但是深度學(xué)習(xí)模型對于大數(shù)據(jù)量,訓(xùn)練時(shí)間相對較長,K80 單卡訓(xùn)練需要近一周的時(shí)間,V100 單卡訓(xùn)練需要4天。為了縮短訓(xùn)練時(shí)間,快速迭代模型,我們采用了多機(jī)多卡式的訓(xùn)練方式 ,以 Tensorflow 為例,采用 Multi Worker MirroredStrategy 的方式,Multi Worker MirroredStrategy不需要 Parameter server,只需要設(shè)置一系列的 TF_CONFIG 環(huán)境變量,這樣降低了多機(jī)多卡的調(diào)試難度,實(shí)例如下:

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

同時(shí)機(jī)器學(xué)習(xí)平臺深度學(xué)習(xí)部分可以靈活的選擇訓(xùn)練方式以及參數(shù)設(shè)置,如下圖所示:

采用多機(jī)多卡訓(xùn)練的方式將深度學(xué)習(xí)模型如 DeepFM、Wide&deep 等訓(xùn)練時(shí)間壓縮在 24h 內(nèi),基本處于可接受范圍內(nèi)。

為了讓模型能夠分鐘級迭代,并能實(shí)時(shí)的反饋給推薦系統(tǒng),機(jī)器學(xué)習(xí)平臺提供了分鐘級實(shí)時(shí)訓(xùn)練功能,并對訓(xùn)練好的模型進(jìn)行評估指標(biāo)的驗(yàn)證和更新上線。實(shí)時(shí)訓(xùn)練的流程主要是通過 Flink 接入實(shí)時(shí)日志數(shù)據(jù),將每十分鐘收集的數(shù)據(jù)存放在 HDFS 上,然后在機(jī)器學(xué)習(xí)平臺上制定定時(shí)任務(wù),進(jìn)行特征工程和模型訓(xùn)練,訓(xùn)練完畢后經(jīng)過評估指標(biāo)的驗(yàn)證判斷是否進(jìn)行模型更新,具體流程圖如下:

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

機(jī)器學(xué)習(xí)平臺為推薦排序提供了一站式的全流程支持,從數(shù)據(jù)處理、建模、訓(xùn)練、模型評估以及模型上線,實(shí)現(xiàn)了分鐘級迭代模型。平臺的建立大大提高了推薦排序模型的迭代速度,提升了算法工程師的工作效率,為之家推薦排序業(yè)務(wù)的發(fā)展提供了有力保障。

04

平臺展望

1. 增加算法組件

平臺經(jīng)過兩個(gè)版本的迭代,解決了資源利用率低和算法工作重復(fù)的問題,隨著接入用戶和業(yè)務(wù)的增加,對平臺也提出了更高的要求。如推薦業(yè)務(wù)里,在線機(jī)器學(xué)習(xí)幾乎是繞不開的話題,為了更好的支持在線機(jī)器學(xué)習(xí),我們接下來會(huì)融入在線機(jī)器學(xué)習(xí)的組件。類似這種業(yè)務(wù)場景會(huì)越來越多,我們會(huì)根據(jù)業(yè)務(wù)需要加入更多的算法組件。

2. GPU卡共享

無論是訓(xùn)練任務(wù)還是服務(wù)部署,用到的 GPU 卡都是獨(dú)享的,訓(xùn)練任務(wù)的 GPU 卡利用率一般都比較高,大部分在50%以上,部署的服務(wù)隨著 TPS 的增長而增長,GPU 卡的實(shí)際利用率都不高,為了提升服務(wù)實(shí)例的 GPU 卡利用率就要提供 GPU 卡的共享。解決方式一般有兩種,一種是 GPU 虛擬化,像虛擬機(jī)的 CPU 一樣,目前 Nvidia 提供這種虛擬化服務(wù),但是 License 費(fèi)用昂貴;另外一種方式通過修改 K8s 的調(diào)度策略,來支持非整數(shù)卡的調(diào)度分配。后面會(huì)基于第二種方式嘗試實(shí)現(xiàn) GPU 卡的共享。

今天的分享就到這里,謝謝大家。

文章作者:

田董濤,汽車之家高級算法工程師。2017年加入汽車之家,汽車之家機(jī)器學(xué)習(xí)平臺負(fù)責(zé)人,目前在汽車之家負(fù)責(zé)機(jī)器學(xué)習(xí)平臺的架構(gòu)和開發(fā)工作。

王若愚,汽車之家算法工程師。2018年加入汽車之家,目前主要從事推薦排序和機(jī)器學(xué)習(xí)平臺相關(guān)工作。

方矩,汽車之家算法工程師。2018年加入汽車之家,目前主要從事推薦排序算法相關(guān)工作。

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

長按訂閱更多精彩▼

汽車之家機(jī)器學(xué)習(xí)平臺的架構(gòu)與實(shí)踐

如有收獲,點(diǎn)個(gè)在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉