成功MLOps具有的五大共同特征
譯文譯者 | 李睿
審校 | 重樓
51CTO讀者成長(zhǎng)計(jì)劃社群招募,咨詢(xún)小助手(微信號(hào):TTalkxiaozhuli)
盡管人們對(duì)應(yīng)用機(jī)器學(xué)習(xí)的興趣越來(lái)越大,但企業(yè)在將機(jī)器學(xué)習(xí)集成到現(xiàn)實(shí)應(yīng)用方面仍然面臨著巨大的挑戰(zhàn)。大多數(shù)的機(jī)器學(xué)習(xí)項(xiàng)目或者在完成之前被放棄,或者無(wú)法兌現(xiàn)承諾。
應(yīng)用機(jī)器學(xué)習(xí)是一個(gè)年輕且不斷發(fā)展的領(lǐng)域。機(jī)器學(xué)習(xí)開(kāi)發(fā)與運(yùn)維(MLOps)是一個(gè)用于部署和維護(hù)機(jī)器學(xué)習(xí)模型的新興實(shí)踐領(lǐng)域,為機(jī)器學(xué)習(xí)管道提供了許多工具和平臺(tái)。然而,目前仍有許多工作要做。
加州大學(xué)伯克利分校的科學(xué)家最近發(fā)表的一份研究論文,揭示了在不同組織中運(yùn)行機(jī)器學(xué)習(xí)的最佳實(shí)踐。這篇論文基于對(duì)不同行業(yè)機(jī)器學(xué)習(xí)工程師的調(diào)查,包含了成功部署和維護(hù)機(jī)器學(xué)習(xí)模型的重要經(jīng)驗(yàn),并為未來(lái)MLOps工具的開(kāi)發(fā)提供了指導(dǎo)。
1、MLOps管道
MLOps管道是一個(gè)由四個(gè)任務(wù)組成的循環(huán):首先,機(jī)器學(xué)習(xí)團(tuán)隊(duì)必須收集、清理和存儲(chǔ)數(shù)據(jù)來(lái)訓(xùn)練模型。如果企業(yè)正在構(gòu)建一個(gè)有監(jiān)督的機(jī)器學(xué)習(xí)模型,他們必須人工或使用半自動(dòng)工具標(biāo)記數(shù)據(jù)。
然后,機(jī)器學(xué)習(xí)團(tuán)隊(duì)必須進(jìn)行特性工程和模型實(shí)驗(yàn)。在這個(gè)階段,機(jī)器學(xué)習(xí)工程師會(huì)嘗試采用不同的機(jī)器學(xué)習(xí)算法,并創(chuàng)建與這些模型對(duì)應(yīng)的特征。例如,深度神經(jīng)網(wǎng)絡(luò)可能只需要很少或不需要特征工程,但經(jīng)典的機(jī)器學(xué)習(xí)模型(如線(xiàn)性回歸或支持向量機(jī))可能需要額外的工程工作,例如使用降維來(lái)選擇相關(guān)特征的最小集。
第三步是評(píng)估和部署。機(jī)器學(xué)習(xí)工程師根據(jù)不同的機(jī)器學(xué)習(xí)模型在指定的驗(yàn)證數(shù)據(jù)集上的性能來(lái)比較它們。在應(yīng)用機(jī)器學(xué)習(xí)管道中,部署通常以分階段的方式完成:首先將模型推出給用戶(hù)子集,然后根據(jù)當(dāng)前的生產(chǎn)模型進(jìn)行評(píng)估。如果運(yùn)行良好,就將其擴(kuò)展到更多用戶(hù),并再次進(jìn)行測(cè)試,以此類(lèi)推。
最后,機(jī)器學(xué)習(xí)管道需要持續(xù)的監(jiān)控和響應(yīng)。機(jī)器學(xué)習(xí)團(tuán)隊(duì)必須持續(xù)監(jiān)控模型在不同用戶(hù)和數(shù)據(jù)子集上的性能,并尋找漂移、退化和其他問(wèn)題的跡象。與此同時(shí),工程師們需要工具來(lái)從用戶(hù)與模型的交互中收集新的數(shù)據(jù)。一旦機(jī)器學(xué)習(xí)模型的性能下降到某個(gè)水平以下,他們就需要重新啟動(dòng)管道,并收集數(shù)據(jù)集來(lái)訓(xùn)練、驗(yàn)證和部署模型的新版本。
2、MLOps的“3v”
基于對(duì)機(jī)器學(xué)習(xí)工程師的采訪(fǎng),加州大學(xué)伯克利分校的科學(xué)家定義了MLOps管道成功的三個(gè)標(biāo)準(zhǔn):速度(Velocity)、驗(yàn)證(Validation)和版本控制(Versioning)。他們稱(chēng)之為MLOps的“3v”。
速度是指機(jī)器學(xué)習(xí)團(tuán)隊(duì)迭代的速度。開(kāi)發(fā)機(jī)器學(xué)習(xí)模型是一個(gè)科學(xué)的過(guò)程,它需要不斷的觀(guān)察、假設(shè)、發(fā)展和測(cè)試。機(jī)器學(xué)習(xí)團(tuán)隊(duì)開(kāi)發(fā)、訓(xùn)練和測(cè)試新的機(jī)器學(xué)習(xí)原型的速度越快,就能越快地達(dá)到最佳解決方案。該論文稱(chēng),“機(jī)器學(xué)習(xí)工程師將他們的生產(chǎn)力歸功于優(yōu)先考慮更高的實(shí)驗(yàn)速度的開(kāi)發(fā)環(huán)境和允許他們快速測(cè)試假設(shè)的調(diào)試環(huán)境。”
驗(yàn)證是機(jī)器學(xué)習(xí)團(tuán)隊(duì)在模型中發(fā)現(xiàn)錯(cuò)誤的速度。當(dāng)在實(shí)際應(yīng)用程序中使用機(jī)器學(xué)習(xí)時(shí),企業(yè)希望最好在用戶(hù)接觸到錯(cuò)誤之前盡早發(fā)現(xiàn)并修復(fù)錯(cuò)誤。
最后,版本控制是保持機(jī)器學(xué)習(xí)模型的多個(gè)版本的能力。有時(shí),在驗(yàn)證數(shù)據(jù)集上工作良好的新機(jī)器學(xué)習(xí)模型最終在生產(chǎn)中表現(xiàn)較差。在這種情況下,機(jī)器學(xué)習(xí)團(tuán)隊(duì)必須能夠快速切換回老舊模型,直到他們能夠調(diào)試和更新新模型。
基于這些關(guān)鍵原則以及對(duì)機(jī)器學(xué)習(xí)工程師的采訪(fǎng),論文的作者為成功的MLOps管道提供了一些實(shí)際的見(jiàn)解。
3、高速迭代
與傳統(tǒng)的軟件開(kāi)發(fā)相比,機(jī)器學(xué)習(xí)工程更具實(shí)驗(yàn)性。因此,相當(dāng)一部分機(jī)器學(xué)習(xí)模型將無(wú)法投入生產(chǎn)是很自然的。
該論文的作者寫(xiě)道:“重要的是確保想法可以快速原型化和驗(yàn)證,這樣不好的想法就可以立即被剔除。”
在他們的研究中,記錄了一些可以幫助建立高速機(jī)器學(xué)習(xí)管道的有趣策略。一個(gè)例子是跨團(tuán)隊(duì)合作,數(shù)據(jù)科學(xué)家和主題專(zhuān)家共同合作,選擇最好的假設(shè)、特征和模型。這有助于在分配開(kāi)發(fā)和計(jì)算資源之前,在構(gòu)思階段拋棄不可行的假設(shè)。
在某些情況下,迭代數(shù)據(jù)比使用不同的機(jī)器學(xué)習(xí)算法和模型配置提供了更快的結(jié)果。
一些團(tuán)隊(duì)將他們的機(jī)器學(xué)習(xí)管道設(shè)置為在早期階段扼殺收益最小的想法,以避免浪費(fèi)未來(lái)的時(shí)間,并專(zhuān)注于在部署的早期階段獲得最大性能收益的想法。他們通過(guò)設(shè)置沙盒(通常是Jupyter Notebook)來(lái)實(shí)現(xiàn)這一點(diǎn),沙盒可以快速對(duì)他們的想法進(jìn)行壓力測(cè)試。
另一種有趣的方法是最小化代碼更改。為了做到這一點(diǎn),機(jī)器學(xué)習(xí)工程師開(kāi)發(fā)他們的機(jī)器學(xué)習(xí)模塊,通過(guò)修改配置文件而不是源代碼來(lái)切換模型。通過(guò)這種方式,他們可以創(chuàng)建多個(gè)版本的配置文件,并通過(guò)相同的代碼快速驗(yàn)證它們。
因?yàn)闄C(jī)器學(xué)習(xí)實(shí)驗(yàn)需要考慮很多因素才能得出正確的結(jié)果。研究人員在論文中寫(xiě)道,設(shè)置隨機(jī)種子,訪(fǎng)問(wèn)相同版本的代碼庫(kù),以及數(shù)據(jù)約束工程師只進(jìn)行配置更改,這些都可以減少錯(cuò)誤的數(shù)量。
4、動(dòng)態(tài)驗(yàn)證
機(jī)器學(xué)習(xí)模型必須不斷更新,以跟上環(huán)境數(shù)據(jù)、客戶(hù)需求和業(yè)務(wù)的變化。為了實(shí)現(xiàn)這一目標(biāo),企業(yè)需要能夠適應(yīng)不斷變化的世界的評(píng)估過(guò)程,避免重復(fù)失敗,并防止糟糕的機(jī)器學(xué)習(xí)模型投入生產(chǎn)環(huán)境。
與機(jī)器學(xué)習(xí)工程師面談的重要收獲之一是定期更新驗(yàn)證數(shù)據(jù)集。這與學(xué)術(shù)界的標(biāo)準(zhǔn)實(shí)踐有所不同,后者是針對(duì)固定的驗(yàn)證數(shù)據(jù)集測(cè)試模型。研究人員寫(xiě)道,“動(dòng)態(tài)驗(yàn)證集有兩個(gè)目標(biāo):(1)顯而易見(jiàn)的目標(biāo)是確保驗(yàn)證集盡可能多地反映實(shí)時(shí)數(shù)據(jù),并考慮到關(guān)于問(wèn)題的新知識(shí)和總體數(shù)據(jù)分布的變化;(2)另一個(gè)更微妙的目標(biāo)是解決了子群體可能經(jīng)歷的局部變化(例如,特定標(biāo)簽的準(zhǔn)確性較低)。”
一個(gè)有趣的策略是使用“影子階段”,在這個(gè)階段中,候選機(jī)器學(xué)習(xí)模型被集成到生產(chǎn)系統(tǒng)中,但其預(yù)測(cè)結(jié)果不會(huì)向用戶(hù)展示。這使得機(jī)器學(xué)習(xí)工程師能夠根據(jù)實(shí)時(shí)數(shù)據(jù)動(dòng)態(tài)驗(yàn)證他們的模型,而不會(huì)給業(yè)務(wù)帶來(lái)風(fēng)險(xiǎn)。需要注意的是,帶有用戶(hù)反饋循環(huán)的應(yīng)用程序(例如,推薦系統(tǒng))不支持影子部署。
最后成功的MLOps驗(yàn)證的一個(gè)重要部分是更新驗(yàn)證指標(biāo)以反映正確的業(yè)務(wù)目標(biāo)。隨著產(chǎn)品的發(fā)展,它們的關(guān)鍵性能指標(biāo)和增長(zhǎng)指標(biāo)也會(huì)發(fā)生變化。例如,在某一時(shí)刻,企業(yè)的目標(biāo)可能是增加活躍用戶(hù)的數(shù)量,而不考慮他們產(chǎn)生的收入。在之后的階段,同一家公司可能想要增加付費(fèi)用戶(hù)的份額,部署的機(jī)器學(xué)習(xí)模型必須基于它們對(duì)這些關(guān)鍵指標(biāo)的貢獻(xiàn)進(jìn)行評(píng)估。這需要機(jī)器學(xué)習(xí)、產(chǎn)品和業(yè)務(wù)團(tuán)隊(duì)之間的密切協(xié)調(diào)。
5、良好的軟件工程
根據(jù)加州大學(xué)伯克利分校研究團(tuán)隊(duì)采訪(fǎng)的機(jī)器學(xué)習(xí)工程師的經(jīng)驗(yàn),健壯的MLOps需要健全的軟件工程和DevOps實(shí)踐。
例如,定期對(duì)機(jī)器學(xué)習(xí)模型進(jìn)行再訓(xùn)練可以幫助團(tuán)隊(duì)保持他們的機(jī)器學(xué)習(xí)模型是最新自版本并避免漂移。這需要軟件和數(shù)據(jù)工程團(tuán)隊(duì)建立正確的管道,以持續(xù)收集和標(biāo)記新數(shù)據(jù)。對(duì)這種實(shí)踐的補(bǔ)充是擁有一個(gè)健壯的版本控制系統(tǒng),該系統(tǒng)跟蹤機(jī)器學(xué)習(xí)模型的不同版本及其性能指標(biāo)。這允許工程師設(shè)置自動(dòng)化或半自動(dòng)化流程,以便在生產(chǎn)模型的性能下降到某個(gè)閾值以下時(shí)恢復(fù)到舊版本。
在一些應(yīng)用程序中,軟件工程師不得不故意添加一層經(jīng)典的基于規(guī)則的啟發(fā)式來(lái)穩(wěn)定行為或機(jī)器學(xué)習(xí)模型。這在許多應(yīng)用程序中非常重要,在這些應(yīng)用程序中,機(jī)器學(xué)習(xí)模型可能會(huì)根據(jù)輸入向量特征中的錯(cuò)誤相關(guān)性進(jìn)行學(xué)習(xí)和行為。研究人員寫(xiě)道:“現(xiàn)代模型驅(qū)動(dòng)的機(jī)器學(xué)習(xí)和傳統(tǒng)基于規(guī)則的人工智能的結(jié)合表明,除了管理學(xué)習(xí)模型之外,還需要管理過(guò)濾器以及過(guò)濾器的版本。”
最后,成功的機(jī)器學(xué)習(xí)項(xiàng)目的一個(gè)共同主題是對(duì)簡(jiǎn)單性的偏好。雖然學(xué)術(shù)界的研究往往專(zhuān)注于突破最先進(jìn)技術(shù)的極限,但在應(yīng)用機(jī)器學(xué)習(xí)中,使用盡可能簡(jiǎn)單的模型是一種制勝策略。更簡(jiǎn)單的模型訓(xùn)練和運(yùn)行成本更低,而且它們通常更易于解釋。在一個(gè)有趣的案例中,機(jī)器學(xué)習(xí)工程師報(bào)告說(shuō)他們開(kāi)發(fā)了一種混合方法,其中他們使用神經(jīng)網(wǎng)絡(luò)創(chuàng)建一個(gè)特征嵌入層,然后將其用作幾個(gè)簡(jiǎn)單分類(lèi)器模型的輸入。
6、創(chuàng)建更好的MLOps工具
這篇論文是關(guān)于在現(xiàn)實(shí)應(yīng)用中實(shí)現(xiàn)機(jī)器學(xué)習(xí)的挑戰(zhàn)和教訓(xùn)的有趣研究。研究人員得出結(jié)論,成功的MLOps實(shí)踐圍繞著“更高速度,盡早地驗(yàn)證,并維護(hù)模型的多個(gè)版本以減少生產(chǎn)停機(jī)時(shí)間”這三個(gè)目標(biāo)進(jìn)行構(gòu)建。
因此,構(gòu)建MLOps堆棧時(shí)應(yīng)該以解決這三個(gè)v為目標(biāo)。
研究人員寫(xiě)道:“MLOps工具構(gòu)建者可能希望在其產(chǎn)品的開(kāi)發(fā)速度、盡早驗(yàn)證或版本控制方面優(yōu)先考慮更好的體驗(yàn)。”
原文鏈接:https://bdtechtalks.com/2022/12/12/successful-mlops/