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

導(dǎo)讀:汽車之家機器學(xué)習(xí)平臺是為算法工程師打造的一站式機器學(xué)習(xí)服務(wù)平臺,集數(shù)據(jù)導(dǎo)入、數(shù)據(jù)處理、模型開發(fā)、模型訓(xùn)練、模型評估、服務(wù)上線等功能于一體,提供一站式全方位的機器學(xué)習(xí)建模流程,快速打造智能業(yè)務(wù)。本文主要介紹汽車之家機器學(xué)習(xí)平臺的架構(gòu)和實現(xiàn)細(xì)節(jié),以及業(yè)務(wù)在平臺上的應(yīng)用,希望能為大家提供一些參考。
主要內(nèi)容包括:
背景介紹
機器學(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)中各個參與方,加速邁向智能平臺3.0時代。汽車之家機器學(xué)習(xí)平臺在智能平臺3.0的背景下應(yīng)用而生,通過廣泛支持自然語言處理、圖像分析、語音識別、視頻分析、推薦、搜索、廣告等場景的 AI 服務(wù),有效提升了汽車之家 AI 的應(yīng)用效果,擴展了 AI 的應(yīng)用范圍,提高了用戶看車,買車,用車的體驗。
機器學(xué)習(xí)領(lǐng)域,最重要的三個環(huán)節(jié)如下圖,包括數(shù)據(jù)處理,模型訓(xùn)練和服務(wù)部署,每一環(huán)節(jié)包含的內(nèi)容很多,都可以單獨拿出來做一個平臺。
在早期,之家內(nèi)部算法團隊在各自的服務(wù)器上進(jìn)行機器學(xué)習(xí)的訓(xùn)練和服務(wù)部署,造成了小作坊式的工作局面,各自重復(fù)著這三個環(huán)節(jié)來支持業(yè)務(wù)。在開始算力規(guī)模小的時候,這種小作坊方式保證了工作的靈活與創(chuàng)新突破,但是隨著業(yè)務(wù)的增加和算力的增長,逐漸顯示了這種方式的局限性。主要體現(xiàn)在兩個方面:
昂貴的計算資源不能得到有效的調(diào)度,公司的投入產(chǎn)出效益越來越低。因此基于這種局面,公司急需一種平臺化的方式來統(tǒng)一調(diào)度計算資源。
各個業(yè)務(wù)線包括團隊內(nèi)部,業(yè)務(wù)不同,用的數(shù)據(jù)不盡相同,大部分的工程技術(shù)人員和業(yè)務(wù)人員都聚焦在業(yè)務(wù)領(lǐng)域的特征提取,算法選擇,參數(shù)調(diào)優(yōu)和模型驗證上,因此一個方便高效的可視化建模平臺,對于降低用戶的機器學(xué)習(xí)學(xué)習(xí)曲線、提升工作效率顯得尤為重要。
由此汽車之家構(gòu)建了自己的機器學(xué)習(xí)平臺,該平臺同時支持深度學(xué)習(xí)和傳統(tǒng)機器學(xué)習(xí)建模、可視化建模、統(tǒng)一的計算資源和存儲資源管理、統(tǒng)一的部署平臺,力求達(dá)到以下目標(biāo):
開發(fā)通用化:一次開發(fā)重復(fù)使用,避免重復(fù)造輪子,提高工作效率。將算法工程師們從繁重的腳本開發(fā)工作中解放出來專注于算法效果的提升。
建模極簡化:用戶僅需根據(jù)自己的需求在頁面上通過拖拽的形式完成數(shù)據(jù)的導(dǎo)入,預(yù)處理,模型建模與評估等流程。這樣即使是對模型算法不甚了解的產(chǎn)品運營同事在經(jīng)過簡單的了解后也可輕松上手,依據(jù)自身需求完成簡單數(shù)據(jù)處理或者建模任務(wù)。
數(shù)據(jù)可視化:可以支持輸入數(shù)據(jù)可視化,數(shù)據(jù)分析可視化、計算圖可視化、訓(xùn)練過程可視化、模型效果可視化。
02
機器學(xué)習(xí)平臺
1. 整體架構(gòu)
計算資源包括高性能 CPU 集群和云 GPU 集群,高性能 CPU 集群用于訓(xùn)練和部署傳統(tǒng)機器學(xué)習(xí)模型,云 GPU 集群用于訓(xùn)練和部署深度學(xué)習(xí)模型。
基于資源的不同,機器學(xué)習(xí)和深度學(xué)習(xí)底層采用了兩種不同類型的架構(gòu)方式,機器學(xué)習(xí)訓(xùn)練使用 Spark 做計算,通過 Yarn 來調(diào)度計算資源;深度學(xué)習(xí)訓(xùn)練使用 K8s 做調(diào)度,支持主流的 Tensorflow、PaddlePaddle、MxNet、Caffe 等深度學(xué)習(xí)框架,并且支持單機和分布式訓(xùn)練。
存儲層包括業(yè)務(wù)端通用的樣本庫、特征庫和模型庫,主要存放在 Hive 倉庫和 HDFS 上。
平臺抽象了算法組件包括機器學(xué)習(xí)的數(shù)據(jù)預(yù)處理、特征工程、統(tǒng)計分析、分類、聚類、回歸、評估、預(yù)測等100+個組件。
模塊對外提供了模型訓(xùn)練、模型評估、模型預(yù)測、模型管理和模型部署功能,滿足了算法人員的模型訓(xùn)練和部署模型服務(wù)的需求,同時還提供了交互式編程 Notebook,提高了開發(fā)人員的開發(fā)效率。
2. 機器學(xué)習(xí)建模流程
算法框架:
由于 Spark 選擇內(nèi)存存儲輸入數(shù)據(jù)、處理中間結(jié)果、和存儲最終結(jié)果,在大數(shù)據(jù)的場景中,很多計算都有循環(huán)往復(fù)的特點,像 Spark 這樣允許在內(nèi)存中緩存輸入輸出,上一個 job 的結(jié)果馬上可以被下一個使用。因此 Spark 有著高效的分布式計算能力。
此外 Spark 提供了更多靈活可用的數(shù)據(jù)操作,比如 filter、union、join 以及各種對 key value pair 的方便操作,甚至提供了一個通用接口,讓用戶根據(jù)需要開發(fā)定制的數(shù)據(jù)操作。Spark 本身作為平臺也開發(fā)了 streaming 處理框架 Spark streaming,SQL 處理框架 Dataframe,機器學(xué)習(xí)庫 MLlib 和圖處理庫 GraphX。更重要的是 Spark 可以提供面向 python 的開發(fā)接口,提高了開發(fā)效率。因此我們選擇 Spark 作為我們平臺的算法框架。
算法端流程:
后端將用戶構(gòu)建的建模流程及配置的模型參數(shù)包裝至 json 調(diào)用算法端接口
算法端通過 spark-submit 提交一個 Spark 任務(wù)
ML Engine 負(fù)責(zé)這個任務(wù)的執(zhí)行,在 Driver 端會從 json 中獲取當(dāng)前試驗的流程關(guān)系及對應(yīng)的參數(shù)。這些組件將依次運行,涉及 RDD 相關(guān)的操作時會提交到 Spark Executor 進(jìn)行并行計算
3. 深度學(xué)習(xí)訓(xùn)練
以上為機器學(xué)習(xí)平臺-深度學(xué)習(xí)部分的邏輯架構(gòu)圖,平臺支持了深度模型的訓(xùn)練和服務(wù)部署功能。為了更好的管理計算資源,需要將所有的計算資源集中起來,尤其是 GPU 機器,做到按需分配,使資源的使用率盡量接近100%,這樣才能提高我們的生產(chǎn)力,節(jié)約公司成本。這就需要一個容器管理系統(tǒng)來管理我們的 GPU 集群。
① 技術(shù)選型
我們調(diào)研了 K8s 和 Yarn。Yarn 作為大數(shù)據(jù)平臺標(biāo)配的資源調(diào)度器,確實有很多優(yōu)點并且比較成熟,但是鑒于 Yarn 對在線服務(wù)的支持較弱,新版的 Yarn 才支持 GPU 調(diào)度,存在穩(wěn)定性風(fēng)險。相對于 Yarn,K8s 現(xiàn)在社區(qū)比較強大,對 GPU 卡的調(diào)度有很好的支持,支持服務(wù)的自動化部署,服務(wù)的運維成本低,我們選擇用 K8s 做為平臺的容器管理系統(tǒng)。
存儲:
模型訓(xùn)練的訓(xùn)練樣本數(shù)據(jù)大多存儲在 HDFS 和 Hive 表中,平臺實現(xiàn)了與 Hadoop 集群的互通。任務(wù)在運行前需要拉取數(shù)據(jù)到容器內(nèi)部,為了保證數(shù)據(jù)的持久化存儲和可擴展性,需要外部存儲系統(tǒng)來支持,我們選擇了 Ceph。使用 Ceph 主要有以下幾個好處:
可以支持較大的數(shù)據(jù)規(guī)模,較大的樣本數(shù)據(jù)可以達(dá)到幾百 G 甚至到幾 T,當(dāng)遇到集群節(jié)點故障,任務(wù)的 Pod 重啟,還能繼續(xù)訪問數(shù)據(jù)進(jìn)行訓(xùn)練。
Ceph 是一個統(tǒng)一的分布式存儲系統(tǒng),該系統(tǒng)擁有很好的性能、可靠性和可擴展性。在單機訓(xùn)練中主要用到的是 Ceph 的塊存儲 RBD,在多機分布式訓(xùn)練中需要共享訓(xùn)練數(shù)據(jù)用到的是 CephFS,任務(wù)運行結(jié)束,存儲資源根據(jù)用戶選擇決定是否釋放。
調(diào)度:
通過構(gòu)建 K8s 的 GPU 集群,來統(tǒng)一調(diào)度 GPU,CPU 和內(nèi)存資源,通過 Docker 保證環(huán)境完全隔離,任務(wù)之間不受影響,任務(wù)結(jié)束,占用的資源隨即得到釋放。同時基于 K8s 可以做靈活的調(diào)度策略。如現(xiàn)在集群有多種類型的 GPU 卡,用戶可以根據(jù)實際情況選擇卡的類型,具體做法通過對 GPU 節(jié)點打 label 的方式實現(xiàn),根據(jù)節(jié)點類型標(biāo)記對應(yīng)的 label,啟動任務(wù)配置 nodeSelector 實現(xiàn)卡類型的精確分配;由于 k8s 分配最大資源是整個物理機的資源,有些復(fù)雜的訓(xùn)練任務(wù)在單機多卡方式下,為了能分到更多的 GPU 卡進(jìn)行訓(xùn)練,在訓(xùn)練集群使用 K8s 的節(jié)點親和性調(diào)度 nodeAffinity,可以使訓(xùn)練任務(wù)集中調(diào)度。K8s 支持通過插件的方式進(jìn)行自定義調(diào)度,如果現(xiàn)有的調(diào)度方式不滿足需求,可以通過自定義調(diào)度實現(xiàn)更靈活的調(diào)度策略。
② 建模訓(xùn)練
深度學(xué)習(xí)訓(xùn)練的細(xì)節(jié)如上圖,用戶通過 WEB 客戶端或 Shell 客戶端提交訓(xùn)練任務(wù),服務(wù)端拿到用戶提交參數(shù),組裝好 K8s 資源和配置 yaml 文件,提交到 K8s 集群。在啟動任務(wù)之前,會通過集群里的 StorageClass 創(chuàng)建好 pvc 對象,作為訓(xùn)練任務(wù)掛盤對象,如果用戶使用的 Tensorflow 框架訓(xùn)練,平臺支持啟動 Tensorboard,方便查看訓(xùn)練的效果和進(jìn)度,此時也會創(chuàng)建 Tensorboard 的負(fù)載對象 Ingress 和 Service。前面準(zhǔn)備工作做完,K8s 會根據(jù)用戶指定的 GPU、CPU、內(nèi)存及卡類型參數(shù)在集群里通過調(diào)度分配訓(xùn)練任務(wù)到合適的節(jié)點,沒有資源會處于等待狀態(tài),直到有資源可以調(diào)度啟動任務(wù)。啟動任務(wù)后,先進(jìn)行容器環(huán)境的初始化過程,主要包括配置 Hadoop 相關(guān)權(quán)限,訓(xùn)練數(shù)據(jù)和訓(xùn)練腳本的拉取,初始化工作完成后訓(xùn)練任務(wù)開始運行,訓(xùn)練過程中,平臺支持導(dǎo)出中間的訓(xùn)練結(jié)果,訓(xùn)練結(jié)束后,最終結(jié)果會自動輸出到用戶指定的輸出目錄。
③ 深度學(xué)習(xí)分布式訓(xùn)練
如果訓(xùn)練時間長或者樣本規(guī)模大,超過單臺服務(wù)器能力時,需要支持分布式訓(xùn)練。以 Tensorflow 分布式為例,一個 TensorFlow 分布式程序?qū)?yīng)一個抽象的集群,集群 ( cluster ) 由工作節(jié)點 ( worker ) 和參數(shù)服務(wù)器 ( parameter server ) 組成。工作節(jié)點 ( worker ) 承擔(dān)矩陣乘、向量加等具體計算任務(wù),計算出相應(yīng)參數(shù) ( weight 和 bias ),并把參數(shù)匯總到參數(shù)服務(wù)器;參數(shù)服務(wù)器 ( parameter server ) 把從眾多工作節(jié)點收集參數(shù)匯總并計算,并傳遞給相應(yīng)工作節(jié)點,由工作節(jié)點進(jìn)行下一輪計算,如此循環(huán)往復(fù)。
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 的個數(shù),在啟動命令里通過獲取 PS_HOSTS、WORKER_HOSTS、JOB_NAME 和 TASK_INDEX 環(huán)境變量初始化相關(guān)參數(shù),就可以快速啟動分布式訓(xùn)練任務(wù),這樣簡化了用戶使用分布式訓(xùn)練的工作量。
平臺構(gòu)建分布式任務(wù)的具體實現(xiàn)方式時這樣的,如定義了 m 個 ps,n 個 worker,在 K8s 集群里定義 n 個 Job 對應(yīng)為分布式任務(wù)的 worker,n 個 Job 共享同一份數(shù)據(jù),然后定義 m 個 Deployment 對應(yīng)為分布式任務(wù)的 ps,把每個角色的網(wǎng)絡(luò)連接方式放置在 ps 和 worker 的環(huán)境變量中供用戶初始化參數(shù)使用,任務(wù)結(jié)束后,訓(xùn)練結(jié)果從 worker-0 導(dǎo)出到 HDFS 中,計算資源釋放。
4. 模型部署管理
平臺上訓(xùn)練的機器學(xué)習(xí)模型通過 PMML 格式導(dǎo)出,統(tǒng)一存放在 HDFS 中進(jìn)行維護,通過平臺一鍵部署預(yù)測服務(wù)。對于深度學(xué)習(xí)模型,平臺提供了 ModelZoo 功能,支持用戶上傳模型文件,通過平臺提供的公共深度學(xué)習(xí)框架的 Serving 鏡像啟動預(yù)測服務(wù),同時平臺也支持用戶用自己構(gòu)建的鏡像來部署預(yù)測服務(wù),這樣簡化了算法工程師部署預(yù)測服務(wù)的流程,同時也不失靈活性。
借助于 K8s 對服務(wù)部署的支持,平臺提供了服務(wù)的伸縮,更新,使服務(wù)流量增長時能快速實現(xiàn)服務(wù)的擴容,同時提供了服務(wù)的動態(tài)伸縮功能,能做到服務(wù)流量突增時實現(xiàn)服務(wù)的自動擴容,服務(wù)流量下降時自動縮進(jìn)實例,使服務(wù)端的 GPU 得到一個合理的利用。
03
平臺成效與應(yīng)用
針對之家算法工程師的實際業(yè)務(wù)場景需要,深度學(xué)習(xí)平臺支持了目前主流的深度學(xué)習(xí)框架 Tensorflow,Caffe,PaddlePaddle,PyTorch,Keras,Kaldi 等,涉及到圖像、語音、NLP、視頻、推薦、廣告等多個業(yè)務(wù)領(lǐng)域。如語音的 DeepSpeech 模型,圖像的 ResNet、AlexNet、EfficientNet 模型,NLP 的 bert 模型,推薦廣告的 DeepFM、DCN、DIEN 模型。
平臺上線后,機器的供需矛盾得到很好的解決,機器利用率得到很大的提升。上線前算法工程師可用的機器只有申請的有限的幾臺機器,上線后可用的是整個集群的資源,即來即用,不用釋放,平臺對集群里的機器資源使用進(jìn)行了全方位的監(jiān)控,能實時查看計算資源的使用情況。同時平臺很好的支持了模型部署,線上環(huán)境隔離,多版本部署,快速啟動,使機器學(xué)習(xí)服務(wù)上線效率得到很大提升。
1. 購車意愿模型在機器學(xué)習(xí)平臺上的應(yīng)用
作為全球訪問量最大的汽車網(wǎng)站,如何從海量的用戶訪問瀏覽行為中發(fā)掘用戶購車的意向或中意的車系車型,一直是汽車之家算法工程人員研究的重點課題。
下面介紹通過 GBDT 模型對用戶的購車意愿進(jìn)行預(yù)測建模。
① 數(shù)據(jù)集介紹
數(shù)據(jù)截圖如下:
② 數(shù)據(jù)探索流程
實驗流程圖如下:
數(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ù)的計算,再利用拆分組建將數(shù)據(jù)集劃分為訓(xùn)練集 ( 占總數(shù)據(jù)集的85% ) 和測試集 ( 占總數(shù)據(jù)集的15% )。
模型訓(xùn)練及預(yù)測
使用機器學(xué)習(xí)組建中的 GBDT 算法對數(shù)據(jù)集進(jìn)行訓(xùn)練并生成回歸模型,在預(yù)測組件中利用二分類評估組建對預(yù)測集數(shù)據(jù)進(jìn)行了預(yù)測。結(jié)果如下圖所示。
特征重要性評估
通過特征重要性評估組件對模型中的各個特征進(jìn)行評估計算出該特征的重要性權(quán)重,評估結(jié)果如下圖所示。
2. 推薦排序模型在機器學(xué)習(xí)平臺上的應(yīng)用
下面主要從推薦排序模型如何借助機器學(xué)習(xí)平臺進(jìn)行數(shù)據(jù)接入、數(shù)據(jù)處理、建模、訓(xùn)練等四個方面進(jìn)行分別闡述。
① 數(shù)據(jù)接入
機器學(xué)習(xí)平臺支持多種數(shù)據(jù)源接入,目前推薦業(yè)務(wù)的離線數(shù)據(jù)存放在 HDFS 上,實時數(shù)據(jù)通過 Flink 接入。
② 數(shù)據(jù)處理
機器學(xué)習(xí)平臺對常見的數(shù)據(jù)處理方式進(jìn)行了封裝,不僅支持對某些特征的異常值檢測、數(shù)據(jù)分析等功能,還支持對特征數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化、歸一化、降維、分桶等常見的數(shù)據(jù)處理方式,同時還可以通過自定義sql的方式提供一站式的數(shù)據(jù)處理以及數(shù)據(jù)可視化分析。
③ 建模
機器學(xué)習(xí)平臺目前支持上百種組件,對推薦排序場景提供了全方位的支持。其中模型不僅支持 LR、GBDT、XGB 等傳統(tǒng)的機器學(xué)習(xí)模型,同時還支持常見的深度學(xué)習(xí)模型,如 FM、Wide&Deep、DeepFM、DCN 等,下圖將展示 online DeepFM 在機器學(xué)習(xí)上應(yīng)用的實例。
建模過程中,傳統(tǒng)的機器學(xué)習(xí)模型可以通過自動化的調(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)的機器學(xué)習(xí)模型 LR、xgb 到 FM 、Wide&Deep、DeepFM、DIN、MMOE 等深度學(xué)習(xí)模型的迭代演進(jìn)。之家首頁推薦每天會產(chǎn)生上億條日志數(shù)據(jù),經(jīng)過數(shù)據(jù)清理后,訓(xùn)練樣本數(shù)據(jù)量達(dá)到百 G 甚至 T 級別,面對如此大規(guī)模的數(shù)據(jù),如何有效的縮短算法的訓(xùn)練時間成為了關(guān)鍵。
傳統(tǒng)的機器學(xué)習(xí)模型如 LR,XGB 等基于 Spark 進(jìn)行分布式的訓(xùn)練,訓(xùn)練時間在小時級別,較為可控。但是深度學(xué)習(xí)模型對于大數(shù)據(jù)量,訓(xùn)練時間相對較長,K80 單卡訓(xùn)練需要近一周的時間,V100 單卡訓(xùn)練需要4天。為了縮短訓(xùn)練時間,快速迭代模型,我們采用了多機多卡式的訓(xùn)練方式 ,以 Tensorflow 為例,采用 Multi Worker MirroredStrategy 的方式,Multi Worker MirroredStrategy不需要 Parameter server,只需要設(shè)置一系列的 TF_CONFIG 環(huán)境變量,這樣降低了多機多卡的調(diào)試難度,實例如下:
同時機器學(xué)習(xí)平臺深度學(xué)習(xí)部分可以靈活的選擇訓(xùn)練方式以及參數(shù)設(shè)置,如下圖所示:
采用多機多卡訓(xùn)練的方式將深度學(xué)習(xí)模型如 DeepFM、Wide&deep 等訓(xùn)練時間壓縮在 24h 內(nèi),基本處于可接受范圍內(nèi)。
為了讓模型能夠分鐘級迭代,并能實時的反饋給推薦系統(tǒng),機器學(xué)習(xí)平臺提供了分鐘級實時訓(xùn)練功能,并對訓(xùn)練好的模型進(jìn)行評估指標(biāo)的驗證和更新上線。實時訓(xùn)練的流程主要是通過 Flink 接入實時日志數(shù)據(jù),將每十分鐘收集的數(shù)據(jù)存放在 HDFS 上,然后在機器學(xué)習(xí)平臺上制定定時任務(wù),進(jìn)行特征工程和模型訓(xùn)練,訓(xùn)練完畢后經(jīng)過評估指標(biāo)的驗證判斷是否進(jìn)行模型更新,具體流程圖如下:
機器學(xué)習(xí)平臺為推薦排序提供了一站式的全流程支持,從數(shù)據(jù)處理、建模、訓(xùn)練、模型評估以及模型上線,實現(xiàn)了分鐘級迭代模型。平臺的建立大大提高了推薦排序模型的迭代速度,提升了算法工程師的工作效率,為之家推薦排序業(yè)務(wù)的發(fā)展提供了有力保障。
04
平臺展望
1. 增加算法組件
平臺經(jīng)過兩個版本的迭代,解決了資源利用率低和算法工作重復(fù)的問題,隨著接入用戶和業(yè)務(wù)的增加,對平臺也提出了更高的要求。如推薦業(yè)務(wù)里,在線機器學(xué)習(xí)幾乎是繞不開的話題,為了更好的支持在線機器學(xué)習(xí),我們接下來會融入在線機器學(xué)習(xí)的組件。類似這種業(yè)務(wù)場景會越來越多,我們會根據(jù)業(yè)務(wù)需要加入更多的算法組件。
2. GPU卡共享
無論是訓(xùn)練任務(wù)還是服務(wù)部署,用到的 GPU 卡都是獨享的,訓(xùn)練任務(wù)的 GPU 卡利用率一般都比較高,大部分在50%以上,部署的服務(wù)隨著 TPS 的增長而增長,GPU 卡的實際利用率都不高,為了提升服務(wù)實例的 GPU 卡利用率就要提供 GPU 卡的共享。解決方式一般有兩種,一種是 GPU 虛擬化,像虛擬機的 CPU 一樣,目前 Nvidia 提供這種虛擬化服務(wù),但是 License 費用昂貴;另外一種方式通過修改 K8s 的調(diào)度策略,來支持非整數(shù)卡的調(diào)度分配。后面會基于第二種方式嘗試實現(xiàn) GPU 卡的共享。
今天的分享就到這里,謝謝大家。
文章作者:
田董濤,汽車之家高級算法工程師。2017年加入汽車之家,汽車之家機器學(xué)習(xí)平臺負(fù)責(zé)人,目前在汽車之家負(fù)責(zé)機器學(xué)習(xí)平臺的架構(gòu)和開發(fā)工作。
王若愚,汽車之家算法工程師。2018年加入汽車之家,目前主要從事推薦排序和機器學(xué)習(xí)平臺相關(guān)工作。
方矩,汽車之家算法工程師。2018年加入汽車之家,目前主要從事推薦排序算法相關(guān)工作。
特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:
長按訂閱更多精彩▼
如有收獲,點個在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!