網(wǎng)易云音樂(lè)算法平臺(tái)研發(fā)專(zhuān)家黃彬:網(wǎng)易云音樂(lè)在線(xiàn)預(yù)估系統(tǒng)的實(shí)踐與思考
原創(chuàng) 精選嘉賓 | 黃彬
整理 | 涂承燁
日前,在51CTO主辦的AISummit 全球人工智能技術(shù)大會(huì)上,網(wǎng)易云音樂(lè)算法平臺(tái)研發(fā)專(zhuān)家黃彬帶來(lái)了主題演講《網(wǎng)易云音樂(lè)在線(xiàn)預(yù)估系統(tǒng)的實(shí)踐與思考》,從技術(shù)研發(fā)的視角分享了如何建設(shè)一套高性能、易用,且功能豐富的一個(gè)預(yù)估系統(tǒng)的相關(guān)實(shí)踐與思考。
現(xiàn)將演講內(nèi)容整理如下,希望對(duì)諸君有所啟發(fā)。
系統(tǒng)整體架構(gòu)
首先,我們來(lái)看一下整個(gè)預(yù)估系統(tǒng)的一個(gè)架構(gòu),如下圖所示:
系統(tǒng)整體架構(gòu)
中間的Predict Server,是預(yù)估系統(tǒng)的核心組件,包括查詢(xún)組件、特征處理組件,和模型計(jì)算組件。左側(cè)的監(jiān)控系統(tǒng)用于線(xiàn)網(wǎng)服務(wù)的監(jiān)控,確保系統(tǒng)網(wǎng)絡(luò)的暢通。右側(cè)的PushServer用于模型推送,把最新的模型推送進(jìn)線(xiàn)上預(yù)估系統(tǒng)進(jìn)行預(yù)測(cè)。
目標(biāo)是建設(shè)一套高性能、易用,且功能豐富的一個(gè)預(yù)估系統(tǒng)。
高性能計(jì)算
如何提升計(jì)算性能?我們常見(jiàn)的計(jì)算性能問(wèn)題有哪些,我從三個(gè)方面進(jìn)行闡述。
- 特征處理
在通用方案里,我們的特征計(jì)算和模型計(jì)算是分進(jìn)程部署的,這樣就會(huì)導(dǎo)致有大量的特征存在跨服務(wù)、跨語(yǔ)言的傳遞,會(huì)帶來(lái)多次編解碼和內(nèi)存拷貝,導(dǎo)致會(huì)存在比較大的性能開(kāi)銷(xiāo)。
- 模型更新
我們知道在模型更新時(shí),會(huì)有大塊類(lèi)型的申請(qǐng)和釋放。然而在一些通用方案里,它不會(huì)自帶模型預(yù)熱的方案,這樣就會(huì)導(dǎo)致模型更新的過(guò)程中有比較高的耗時(shí)抖動(dòng),無(wú)法支持模型的實(shí)時(shí)化更新。
- 計(jì)算調(diào)度
一般的框架使用的是同步機(jī)制,并發(fā)度不夠,CPU利用率比較低,無(wú)法滿(mǎn)足高并發(fā)的計(jì)算需求。
那么,我們?cè)陬A(yù)估系統(tǒng)里面是如何解決這些性能瓶頸呢?
1、無(wú)縫集成機(jī)器學(xué)習(xí)庫(kù)
我們?yōu)槭裁匆鲞@樣一個(gè)事情呢?因?yàn)樵趥鹘y(tǒng)方案里,我們都知道特征處理和模型計(jì)算分進(jìn)程部署,這樣就會(huì)帶來(lái)比較多的特定的跨網(wǎng)絡(luò)傳輸,序列化、反序化,還有頻繁的內(nèi)存申請(qǐng)和釋放。尤其是在推薦場(chǎng)景的特征量特別大時(shí),這樣就會(huì)帶來(lái)比較明顯的性能開(kāi)銷(xiāo)。下圖中,靠上方的流程圖就展示了通用方案里具體的情況。
無(wú)縫集成計(jì)器學(xué)習(xí)庫(kù)
為了解決上述問(wèn)題,我們就在預(yù)估系統(tǒng)里面將高性能計(jì)算學(xué)習(xí)框架集成到預(yù)估系統(tǒng)內(nèi)部,這樣的好處就是我們能夠確保特征處理和模型計(jì)算能夠同進(jìn)程部署,能夠以指針的形式去實(shí)現(xiàn)對(duì)特征的操作,避免序列化、反序列化以及網(wǎng)絡(luò)傳輸?shù)拈_(kāi)銷(xiāo),從而在特征計(jì)算以及特征處理這一塊帶來(lái)比較好的計(jì)算性能提升,這就是無(wú)縫集成機(jī)器學(xué)習(xí)帶來(lái)的好處。
2、架構(gòu)設(shè)計(jì)考量
首先,整個(gè)系統(tǒng)采用全異步的架構(gòu)設(shè)計(jì)。異步架構(gòu)帶來(lái)的好處就是外部調(diào)用是無(wú)堵塞等待的,所以異步機(jī)制可以確保在CPU高負(fù)載的情況下,例如在60%到70%的情況下,依舊保持線(xiàn)網(wǎng)服務(wù)的耗時(shí)穩(wěn)定性。
其次,訪(fǎng)存優(yōu)化。訪(fǎng)存優(yōu)化主要是基于服務(wù)器的NUMA架構(gòu),我們采用了綁核運(yùn)行的方式。通過(guò)這種方式能夠去解決之前NUMA架構(gòu)存在的遠(yuǎn)端內(nèi)存訪(fǎng)問(wèn)的問(wèn)題,從而提升了我們服務(wù)的計(jì)算性能。
第三,并行計(jì)算。我們對(duì)計(jì)算任務(wù)進(jìn)行分片的處理,采用多線(xiàn)程并發(fā)的方式做計(jì)算,這樣就能夠較大程度降低服務(wù)的時(shí)耗,提升資源的利用率。
架構(gòu)設(shè)計(jì)考量
以上就是我們?cè)陬A(yù)估系統(tǒng)的系統(tǒng)架構(gòu)考量上的實(shí)踐。
3、多級(jí)緩存
多級(jí)緩存,主要應(yīng)用在特征查詢(xún)階段和初級(jí)階段。我們封裝的緩存機(jī)制,一方面能夠降低查詢(xún)的外部調(diào)用,另一方面也能夠減少特征抽取導(dǎo)致反復(fù)無(wú)效的計(jì)算。
通過(guò)緩存的方式,可以極大程度的提升查詢(xún)和抽取的效率。尤其在查詢(xún)階段,我們根據(jù)特征的重要程度以及根據(jù)特征的量級(jí),我們封裝了多種組件,例如同步查詢(xún)、異步查詢(xún)以及特征批量導(dǎo)入等組件。
第一種是同步查詢(xún),主要適用于一些比較重要的特征,當(dāng)然同步查詢(xún)的性能沒(méi)有那么高效。
第二種是異步查詢(xún),主要針對(duì)一些“艾特維度”的特征,這些特征有可能重要程度不是那么高,那么就可以采用這種異步查詢(xún)的方式。
第三種是特征批量導(dǎo)入,主要適用于特征規(guī)模不是特別大的特征數(shù)據(jù)。我們將這些特征批量導(dǎo)入到進(jìn)程內(nèi)部,就可以實(shí)現(xiàn)特征的本地化查詢(xún),性能是非常高效的。
多級(jí)緩存
4、模型計(jì)算優(yōu)化
介紹完緩存機(jī)制之后,我們來(lái)看一下模型計(jì)算的行為優(yōu)化。模型計(jì)算,我們主要從模型輸入優(yōu)化、模型加載優(yōu)化以及內(nèi)核優(yōu)化,這三個(gè)方面進(jìn)行優(yōu)化。
- 模型輸入優(yōu)化
在模型輸入這一塊,大家都知道TF Servering采用的是Example的輸入。Example輸入會(huì)存在Example的構(gòu)造、Example的序列化反序化以及模型內(nèi)部調(diào)用Parse Example的情況,這樣就會(huì)存在比較明顯的耗時(shí)。
在下圖中,我們看【優(yōu)化前】的截圖展示了模型計(jì)算優(yōu)化前的數(shù)據(jù)統(tǒng)計(jì)情況。我們可以看到,有一個(gè)比較長(zhǎng)的Parse Example解析耗時(shí),并且在Parse Example解析完之前,其他op是沒(méi)有辦法執(zhí)行并行調(diào)度的。為了解決模型樹(shù)的性能問(wèn)題,我們?cè)陬A(yù)估系統(tǒng)里封裝了高性能的模型輸入方案。通過(guò)新的方案,我們能夠?qū)崿F(xiàn)特征輸入零拷貝,從而減少這種Example的構(gòu)造耗時(shí)以及解析耗時(shí)。
在下圖中,我們看【優(yōu)化后】的截圖展示了模型計(jì)算優(yōu)化之后的數(shù)據(jù)統(tǒng)計(jì)情況,我們可以看到,已經(jīng)沒(méi)有了Parse Example解析耗時(shí),就只剩下Example的解析耗時(shí)。
模型計(jì)算優(yōu)化
- 模型加載優(yōu)化
介紹完模型輸入優(yōu)化,我們來(lái)看一下模型加載的優(yōu)化。Tensorflow的模型加載是懶加載的模式,模型加載到內(nèi)部之后,它并不會(huì)進(jìn)行模型預(yù)熱,而是要等到線(xiàn)網(wǎng)正式請(qǐng)求來(lái)了之后才會(huì)進(jìn)行模型預(yù)熱,這樣就會(huì)導(dǎo)致模型加載之后會(huì)有比較嚴(yán)重的耗時(shí)抖動(dòng)。
為了解決這個(gè)問(wèn)題,我們?cè)陬A(yù)估系統(tǒng)內(nèi)部實(shí)現(xiàn)了自動(dòng)的模型預(yù)熱功能,并且實(shí)現(xiàn)了新舊模型的熱切換,還實(shí)現(xiàn)了舊模型的異步卸載和內(nèi)存釋放。這樣通過(guò)這些模型加載的一些優(yōu)化手段,實(shí)現(xiàn)模型的分鐘級(jí)更新能力。
- 內(nèi)核優(yōu)化
接下來(lái),我們看一下模型內(nèi)核的優(yōu)化。目前我們主要是對(duì)Tensorflow內(nèi)核做了一些內(nèi)核同步優(yōu)化,以及我們會(huì)根據(jù)模型去調(diào)整op間和op內(nèi)的一些線(xiàn)程池等等。
以上就是我們?cè)谀P陀?jì)算方面的一些性能優(yōu)化的嘗試。
通過(guò)介紹上面的性能優(yōu)化方案之后,我們來(lái)看一下最終的性能優(yōu)化成果。
性能優(yōu)化成果
這里我們使用預(yù)估系統(tǒng)和通用方案的系統(tǒng)做了一個(gè)對(duì)比。我們可以看到預(yù)估系統(tǒng)在CPU使用達(dá)到80%的情況下,整個(gè)服務(wù)的計(jì)算耗時(shí)以及超時(shí)率都非常穩(wěn)定,非常低。通過(guò)對(duì)比,我們可以得出新方案(預(yù)估系統(tǒng))在計(jì)算處理這一塊,性能是有提升兩倍,對(duì)CPU的榨取能力更強(qiáng),服務(wù)耗時(shí)更低。
得益于我們對(duì)系統(tǒng)的優(yōu)化,我們可以為業(yè)務(wù)算法提供更多模型的復(fù)雜度計(jì)算以及更多候選集的計(jì)算。
上圖中舉了一個(gè)例子,候選集從之前的300個(gè)候選集擴(kuò)充到1000個(gè)候選集,同時(shí)我們?cè)黾恿四P陀?jì)算復(fù)雜度以及使用了一些比較復(fù)雜的特征,分別在多個(gè)業(yè)務(wù)里帶來(lái)了比較好的效果提升。
以上就是預(yù)估系統(tǒng)在性能優(yōu)化上以及性能優(yōu)化成果的介紹。
如何提升開(kāi)發(fā)效率
1、系統(tǒng)分層設(shè)計(jì)
系統(tǒng)采用分層的架構(gòu)設(shè)計(jì)。我們將整個(gè)預(yù)估系統(tǒng)分成三層,分為底層架構(gòu)層、中間模板層和上層結(jié)構(gòu)層。
底層架構(gòu)層主要提供異步機(jī)制、任務(wù)隊(duì)列、并發(fā)調(diào)度、網(wǎng)絡(luò)通信等。
中間模板層主要提供模型計(jì)算相關(guān)的組件,包括查詢(xún)管理、緩存管理、模型加載管理以及模型計(jì)算管理。
上層接口層主要提供Highlevel的接口,業(yè)務(wù)僅需實(shí)現(xiàn)此層接口,大量減少代碼開(kāi)發(fā)。
通過(guò)系統(tǒng)的分層架構(gòu)設(shè)計(jì),不同業(yè)務(wù)之間完全可以復(fù)用底層和中間層的代碼,開(kāi)發(fā)只需要關(guān)注最上層的少量代碼開(kāi)發(fā)就可以。同時(shí),我們也在進(jìn)一步的思考,有沒(méi)有什么辦法能夠進(jìn)一步減少上層接口層的代碼開(kāi)發(fā)?下面我們來(lái)詳細(xì)介紹一下。
2、通用查詢(xún)封裝
通過(guò)基于動(dòng)態(tài)pb技術(shù)實(shí)現(xiàn)特征查詢(xún)和特征解析形成的通用化方案的封裝,能夠?qū)崿F(xiàn)僅通過(guò)XML配置表名、查詢(xún)KEY、緩存時(shí)間、查詢(xún)依賴(lài)等就能實(shí)現(xiàn)特征查詢(xún)、解析、緩存全流程。
如下圖所示,我們通過(guò)少量的幾行配置,就能夠?qū)崿F(xiàn)復(fù)雜的一個(gè)查詢(xún)邏輯。同時(shí),通過(guò)查詢(xún)封裝提升了查詢(xún)的效率。
3、特征計(jì)算封裝
特征計(jì)算可以說(shuō)是整個(gè)預(yù)估系統(tǒng)里面,代碼開(kāi)發(fā)復(fù)雜度最高的一個(gè)模塊,那么什么是特征計(jì)算呢?
特征計(jì)算包括離線(xiàn)過(guò)程和在線(xiàn)過(guò)程。離線(xiàn)過(guò)程其實(shí)就是離線(xiàn)樣本,通過(guò)處理得到離線(xiàn)訓(xùn)練平臺(tái)需要的一些格式,例如TF Recocd的格式。在線(xiàn)過(guò)程,主要是對(duì)在線(xiàn)的請(qǐng)求做一些特征計(jì)算,通過(guò)處理得到在線(xiàn)預(yù)測(cè)平臺(tái)需要的一些格式。離線(xiàn)過(guò)程和在線(xiàn)過(guò)程,其實(shí)對(duì)特征處理的計(jì)算邏輯是完全一樣的。但是因?yàn)殡x線(xiàn)過(guò)程和在線(xiàn)過(guò)程的計(jì)算平臺(tái)不一樣,使用的語(yǔ)言不一樣,就需要開(kāi)發(fā)多套代碼來(lái)實(shí)現(xiàn)特征計(jì)算,所以存在以下三個(gè)問(wèn)題。
- 一致性難以保障
一致性難以保證的根本原因是離線(xiàn)訓(xùn)練和在線(xiàn)預(yù)測(cè)對(duì)特征處理邏輯難以統(tǒng)一。一方面會(huì)影響到算法的效果,另外一方面會(huì)導(dǎo)致在開(kāi)發(fā)過(guò)程中帶來(lái)比較高昂的一次性校驗(yàn)成本。
- 效率低
如果要新加一個(gè)特征,就需要涉及到離線(xiàn)過(guò)程和在線(xiàn)過(guò)程的多套代碼的開(kāi)發(fā),導(dǎo)致開(kāi)發(fā)效率非常的低。
- 復(fù)用難
復(fù)用難,主要原因是框架缺乏對(duì)復(fù)用能力的支持,導(dǎo)致不同業(yè)務(wù)之間想要做到特征計(jì)算的復(fù)用,變得非常難。
以上就是特征計(jì)算框架存在的一些問(wèn)題。
為了解決這些問(wèn)題,我們將按照如下四點(diǎn)思路來(lái)逐步解決。
首先,我們提出算子的概念,將特征計(jì)算抽象成算子的封裝。其次,算子封裝之后,我們建立一個(gè)算子庫(kù),通過(guò)算子庫(kù)能夠提供業(yè)務(wù)之間算子的復(fù)用能力。然后,我們基于算子,定義特征計(jì)算描述語(yǔ)言DSL。通過(guò)這種描述語(yǔ)言,我們能夠完成特征計(jì)算的配置化表達(dá)。最后,就是前面介紹的,因?yàn)樵诰€(xiàn)過(guò)程和離線(xiàn)過(guò)程存在多套邏輯,會(huì)導(dǎo)致邏輯不一致的問(wèn)題,我們就需要解決特征一次性的問(wèn)題。
以上四點(diǎn),就是我們?nèi)绾螌?duì)特征計(jì)算框架進(jìn)行封裝的思路。
- 算子抽象
為了實(shí)現(xiàn)算子抽象,首先必須實(shí)現(xiàn)數(shù)據(jù)協(xié)議的統(tǒng)一。我們利用動(dòng)態(tài)pb的技術(shù),根據(jù)特征的原數(shù)據(jù)信息,將任意的一個(gè)特征按照統(tǒng)一的數(shù)據(jù)進(jìn)行處理,這樣就為我們的算子封裝提供了數(shù)據(jù)基礎(chǔ)。接下來(lái),我們對(duì)特征處理的過(guò)程進(jìn)行抽樣封裝,將特征計(jì)算過(guò)程抽象成解析、計(jì)算、組裝、異常處理幾個(gè)過(guò)程,并且統(tǒng)一計(jì)算過(guò)程API,從而實(shí)現(xiàn)了算子抽象。
- 建立算子庫(kù)
有了算子的抽象之后,我們就可以建立算子庫(kù)。算子庫(kù)分為平臺(tái)通用算子庫(kù)和業(yè)務(wù)自定義算子庫(kù)。平臺(tái)通用算子庫(kù)主要是實(shí)現(xiàn)公司級(jí)的復(fù)用。業(yè)務(wù)自定義算子庫(kù)主要是針對(duì)業(yè)務(wù)的一些自定義場(chǎng)景及特征,實(shí)現(xiàn)組內(nèi)的復(fù)用。我們通過(guò)算子的封裝以及算子庫(kù)的建設(shè),實(shí)現(xiàn)特征計(jì)算的多場(chǎng)景復(fù)用,提升開(kāi)發(fā)效率。
- 計(jì)算描述語(yǔ)言DSL
特征計(jì)算的配置化表達(dá),是指定義特征計(jì)算表達(dá)的配置化語(yǔ)言叫DSL。通過(guò)配置化語(yǔ)言,我們能夠?qū)崿F(xiàn)算子的多層嵌套表達(dá),能夠?qū)崿F(xiàn)四則運(yùn)算等等。下圖中的第一幅截圖展示了配置化語(yǔ)言的具體語(yǔ)法情況。
我們通過(guò)特征計(jì)算的配置化語(yǔ)言能夠帶來(lái)什么好處呢?
第一,我們能夠通過(guò)配置化完成整個(gè)特征計(jì)算,從而達(dá)到開(kāi)發(fā)效率的提升。
第二,我們能夠通過(guò)發(fā)布特征計(jì)算配置化表達(dá),實(shí)現(xiàn)特征計(jì)算的熱更新。
第三,訓(xùn)練和預(yù)測(cè)使用同一份特征計(jì)算的配置,從而實(shí)現(xiàn)線(xiàn)上線(xiàn)下一致性。
這就是特征計(jì)算表達(dá)帶來(lái)的好處。
- 特征一致性
前面說(shuō)到,特征計(jì)算分為離線(xiàn)過(guò)程和在線(xiàn)過(guò)程。因?yàn)殡x線(xiàn)和在線(xiàn)的多平臺(tái)原因,導(dǎo)致邏輯計(jì)算的不一致。為了解決這個(gè)問(wèn)題,我們?cè)谔卣饔?jì)算框架里,實(shí)現(xiàn)了特征計(jì)算框架的跨平臺(tái)運(yùn)行能力。核心邏輯采用C++開(kāi)發(fā),對(duì)外暴露的是C++接口以及Java接口。在打包構(gòu)建的過(guò)程中,能夠一鍵實(shí)現(xiàn)C++的so庫(kù)以及jar包,從而確保特征計(jì)算能夠運(yùn)行在線(xiàn)計(jì)算的C++平臺(tái)以及離線(xiàn)的Spark平臺(tái)或者說(shuō)Flink平臺(tái),并且用特征計(jì)算表達(dá),可以確保特征計(jì)算實(shí)現(xiàn)線(xiàn)上線(xiàn)下邏輯的一致性。
上面介紹的是特征計(jì)算的具體情況。下面我們來(lái)看一下特征計(jì)算目前已經(jīng)取得的一些成果。
我們現(xiàn)在已經(jīng)沉淀了120家的算子,通過(guò)特征計(jì)算的DSL語(yǔ)言能夠?qū)崿F(xiàn)配置化,完成整個(gè)特征計(jì)算。通過(guò)我們提供的跨平臺(tái)運(yùn)行能力,實(shí)現(xiàn)了線(xiàn)上線(xiàn)下邏輯不一致的問(wèn)題。
下圖中的截圖展示了通過(guò)少量的配置,就可以實(shí)現(xiàn)整個(gè)特征計(jì)算的過(guò)程,較大程度提高了特征計(jì)算的開(kāi)發(fā)性效率。
上述介紹了我們?cè)陂_(kāi)發(fā)效率提升的一個(gè)探索??偟脕?lái)說(shuō),我們通過(guò)系統(tǒng)的分層設(shè)計(jì),提高代碼的復(fù)用度,以及通過(guò)對(duì)查詢(xún)、對(duì)抽取、對(duì)模型計(jì)算的封裝,能夠?qū)崿F(xiàn)配置化的開(kāi)發(fā)流程。
4、模型計(jì)算封裝
模型計(jì)算同樣也是采用封裝的形式。通過(guò)配置化表達(dá)的形式,實(shí)現(xiàn)模型的加載、模型的輸入構(gòu)造、模型的計(jì)算等等,使用幾行配置,實(shí)現(xiàn)整個(gè)模型計(jì)算的表達(dá)過(guò)程。
模型實(shí)時(shí)化落地
下面我們來(lái)看一下模型實(shí)時(shí)化的落地案例。
1、實(shí)時(shí)化項(xiàng)目背景
我們?yōu)槭裁匆鲞@樣的模型實(shí)時(shí)化項(xiàng)目?
主要原因是傳統(tǒng)的推薦系統(tǒng)是天級(jí)別更新用戶(hù)推薦結(jié)果的系統(tǒng),它的實(shí)時(shí)性非常差,無(wú)法滿(mǎn)足這種實(shí)時(shí)性要求比較高的場(chǎng)景,例如我們的直播場(chǎng)景,或者說(shuō)其他一些實(shí)時(shí)性要求比較高的場(chǎng)景。
還有一個(gè)原因是傳統(tǒng)的樣本生產(chǎn)方式,是存在特征穿越的問(wèn)題。什么是特征穿越呢?下圖中展示了特征穿越產(chǎn)生的根本原因,是因?yàn)槲覀冊(cè)谧鰳颖酒唇拥倪^(guò)程中,我們采用的是“T-1”時(shí)刻的模型預(yù)估結(jié)構(gòu),和“T”時(shí)刻的特征進(jìn)行拼接,這樣就會(huì)出現(xiàn)特征穿越的問(wèn)題。特征穿越會(huì)非常大程度的影響線(xiàn)網(wǎng)推薦的效果。為了解決實(shí)時(shí)性的問(wèn)題,以及為了解決樣本穿越的問(wèn)題,我們就在預(yù)估系統(tǒng)里去落地這樣一個(gè)模型實(shí)時(shí)化的方案。
2、實(shí)時(shí)化方案介紹
模型實(shí)時(shí)化方案從三個(gè)維度進(jìn)行闡述。
- 樣本實(shí)時(shí)生成
- 模型增量訓(xùn)練
- 預(yù)估系統(tǒng)實(shí)時(shí)化
樣本實(shí)時(shí)生成。我們基于在線(xiàn)預(yù)估系統(tǒng),將預(yù)估系統(tǒng)的特征實(shí)時(shí)落地到Kafka,通過(guò)RACE ID的形式關(guān)聯(lián),這樣我們就能夠確保樣本實(shí)現(xiàn)秒級(jí)落盤(pán),并且能夠解決特征穿越的問(wèn)題。
模型增量訓(xùn)練。有了樣本的秒級(jí)落盤(pán)之后,我們就可以修改訓(xùn)練模塊,實(shí)現(xiàn)模型的增量訓(xùn)練,就能實(shí)現(xiàn)模型的分鐘級(jí)更新。
預(yù)估系統(tǒng)實(shí)時(shí)化。有了模型的分鐘級(jí)導(dǎo)出之后,我們通過(guò)模型推送服務(wù)Push Server,將最新的模型推送到線(xiàn)上預(yù)估系統(tǒng),能夠使得現(xiàn)場(chǎng)預(yù)估系統(tǒng)使用最新的模型進(jìn)行預(yù)測(cè)。
模型實(shí)時(shí)化方案總得來(lái)說(shuō),就是要實(shí)現(xiàn)樣本的秒級(jí)落盤(pán),實(shí)現(xiàn)模型的分鐘級(jí)訓(xùn)練和分鐘級(jí)線(xiàn)上更新。
我們現(xiàn)在的模型實(shí)時(shí)化方案,已經(jīng)在多個(gè)場(chǎng)景進(jìn)行了落地。通過(guò)模型實(shí)時(shí)化方案,在業(yè)務(wù)上有比較好的效果提升。
上圖中,主要展示了模型實(shí)時(shí)化方案的具體實(shí)驗(yàn)數(shù)據(jù)。我們可以看到增量訓(xùn)練,它的訓(xùn)練周期越短越好。通過(guò)具體的數(shù)據(jù),我們可知周期為15分鐘的效果遠(yuǎn)遠(yuǎn)大于2小時(shí)、10小時(shí)、一天的。現(xiàn)在的模型實(shí)時(shí)化方案已經(jīng)有一套規(guī)范化的接入流程,能夠批量為業(yè)務(wù)帶來(lái)比較好的效果提升。
上述介紹了預(yù)估系統(tǒng)如何提升計(jì)算性能,如何提升開(kāi)發(fā)效率,以及如何通過(guò)工程的手段帶來(lái)項(xiàng)目算法提升三個(gè)方面的探索和嘗試。
整個(gè)預(yù)估系統(tǒng)的平臺(tái)價(jià)值,或者說(shuō)整個(gè)預(yù)估系統(tǒng)的平臺(tái)目的,可以概括成三個(gè)字,就是“快、好、省”。
“快”就是前面介紹的應(yīng)用性建設(shè)。我們希望通過(guò)持續(xù)的應(yīng)用性建設(shè),使得業(yè)務(wù)的迭代能夠更加高效。
“好”就是希望通過(guò)工程手段,例如通過(guò)模型實(shí)時(shí)化方案,以及通過(guò)特征計(jì)算的線(xiàn)上線(xiàn)下邏輯一致性方案,能夠?yàn)闃I(yè)務(wù)帶來(lái)比較好的效果提升。
“省”就是使用預(yù)估系統(tǒng)的更高性能,能夠更加節(jié)省計(jì)算資源,以及節(jié)省計(jì)算成本。
未來(lái),我們會(huì)朝這三個(gè)目標(biāo)持續(xù)努力。
以上就是我對(duì)云音樂(lè)預(yù)估系統(tǒng)的介紹,我的分享到此為止就結(jié)束了,謝謝各位!