- MLOps實(shí)踐:機(jī)器學(xué)習(xí)從開(kāi)發(fā)到生產(chǎn)
- 李攀登
- 7986字
- 2023-02-28 19:14:01
1.3 ML的工程挑戰(zhàn)與MLOps解決方案
在實(shí)際ML工程實(shí)踐場(chǎng)景中,我們發(fā)現(xiàn)大量的工作停留在數(shù)據(jù)科學(xué)家/ML工程師的個(gè)人電腦中,自動(dòng)化程度幾乎為零,團(tuán)隊(duì)協(xié)作也是一團(tuán)糟,生產(chǎn)涉及的管道是用自制的及脆弱的腳本組合起來(lái)的。當(dāng)需要將模型從開(kāi)發(fā)環(huán)節(jié)通過(guò)部署和中心化處理過(guò)渡到生產(chǎn)環(huán)節(jié)時(shí),可視化操作和模型的運(yùn)維管理幾乎不存在,持續(xù)集成和持續(xù)部署在很多從業(yè)者的技術(shù)棧中也極少涉及,模型版本化、數(shù)據(jù)版本化及服務(wù)版本化對(duì)許多企業(yè)來(lái)說(shuō)甚至難以定義,嚴(yán)格的模型健康和性能監(jiān)測(cè)也極為罕見(jiàn),這樣的例子還有很多。
在傳統(tǒng)軟件工程領(lǐng)域,軟件工程團(tuán)隊(duì)的所有最佳實(shí)踐都集中在代碼上。同樣,ML工程師也需要處理大型代碼庫(kù),但除此之外,他們還需要處理數(shù)據(jù)和模型。ML團(tuán)隊(duì)面臨著類似的問(wèn)題,在Jupyter Notebook中運(yùn)行的概念驗(yàn)證(Proof of Concept,PoC)腳本與在生產(chǎn)環(huán)境中運(yùn)行的解決方案之間存在巨大的差異。具體來(lái)說(shuō),他們必須考慮:
● 存儲(chǔ)和跟蹤模型:跟蹤模型的訓(xùn)練過(guò)程和輸出用于比較的模型參數(shù),對(duì)訓(xùn)練好的模型來(lái)說(shuō)需要進(jìn)行持久化存儲(chǔ),這些都屬于ML工程的范疇,而在標(biāo)準(zhǔn)的軟件開(kāi)發(fā)中通常不會(huì)涉及。
● 大型且快速變化的數(shù)據(jù)集:雖然大多數(shù)軟件通過(guò)數(shù)據(jù)庫(kù)或其他來(lái)源與數(shù)據(jù)集成,但ML解決方案通常需要做更多的數(shù)據(jù)清洗和預(yù)處理,而且是在經(jīng)常更新的“實(shí)時(shí)”數(shù)據(jù)集上。ML工程師需要一個(gè)系統(tǒng)或模塊來(lái)監(jiān)控和執(zhí)行一系列相互關(guān)聯(lián)的處理步驟,并通知相關(guān)人員進(jìn)行相應(yīng)的迭代工作。這正是MLOps擅長(zhǎng)的地方,研究團(tuán)隊(duì)傾向于關(guān)注ML代碼而不是周圍的基礎(chǔ)設(shè)施。隨著協(xié)作、共享結(jié)果和在大型數(shù)據(jù)集上完成工作的需求不斷增加,研究團(tuán)隊(duì)很快就遇到了瓶頸。MLOps解決了這些問(wèn)題,并為研究團(tuán)隊(duì)實(shí)現(xiàn)他們的目標(biāo)提供了必要的基礎(chǔ)設(shè)施支持,盡管處理大型數(shù)據(jù)集、代碼和ML模型很復(fù)雜。
ML是一個(gè)全新的且令人興奮的學(xué)科,其工具和實(shí)踐正在快速發(fā)展。隨著ML從研究到應(yīng)用業(yè)務(wù)方案的成熟,我們也需要提高M(jìn)L運(yùn)維流程的成熟度,以實(shí)現(xiàn)ML應(yīng)用的閉環(huán)及快速迭代。
1.3.1 MLOps的定義
MLOps是一種ML工程文化和實(shí)踐,旨在于生產(chǎn)中統(tǒng)一ML模型開(kāi)發(fā)(Dev)和ML模型運(yùn)維(Ops)。
DevOps是一組有助于可靠地構(gòu)建、集成、測(cè)試和部署軟件的實(shí)踐。它可用于在開(kāi)發(fā)領(lǐng)域以最小的部署開(kāi)銷實(shí)現(xiàn)持續(xù)集成和交付。DevOps的成功實(shí)踐可以應(yīng)用于ML,以構(gòu)建強(qiáng)大的ML系統(tǒng)。不同的是,MLOps還需要數(shù)據(jù)工程,因?yàn)閿?shù)據(jù)是構(gòu)建ML的基石。數(shù)據(jù)采集、驗(yàn)證和特征工程等都是數(shù)據(jù)工程的關(guān)鍵組成部分。
通過(guò)借鑒DevOps的成功實(shí)踐經(jīng)驗(yàn)并將其應(yīng)用于ML系統(tǒng),MLOps的理念和方法可優(yōu)化整個(gè)ML生命周期的管理,減少M(fèi)L價(jià)值流中的摩擦和延遲,以縮短將業(yè)務(wù)需求轉(zhuǎn)化為ML服務(wù)所需的時(shí)間,確保ML算法和系統(tǒng)在生產(chǎn)中運(yùn)行良好。
MLOps倡導(dǎo)數(shù)據(jù)科學(xué)家、數(shù)據(jù)工程團(tuán)隊(duì)、軟件工程團(tuán)隊(duì)和運(yùn)維團(tuán)隊(duì)之間更好地合作。有了成熟的MLOps,團(tuán)隊(duì)就能更好地支持整個(gè)ML生命周期,涉及從業(yè)務(wù)需求和目標(biāo)可行性到模型實(shí)驗(yàn)和生產(chǎn)的方方面面。一個(gè)MLOps流程有助于消除手動(dòng)的、容易出錯(cuò)的節(jié)點(diǎn),并打破團(tuán)隊(duì)之間的“流程壁壘”,確保所部署的模型及數(shù)據(jù)在隨時(shí)間演變的過(guò)程中保持準(zhǔn)確。隨著MLOps實(shí)踐在企業(yè)中的應(yīng)用逐漸成熟,其自動(dòng)化程度也越來(lái)越高,比如,建立機(jī)制來(lái)自動(dòng)執(zhí)行流水線,并以此持續(xù)構(gòu)建、測(cè)試和部署ML管道。此外,ML模型的性能監(jiān)測(cè)不僅可以觸發(fā)新的部署管道,而且還可以產(chǎn)生新的實(shí)驗(yàn)。
MLOps的核心理念在于,促進(jìn)模型在生產(chǎn)中的快速迭代,完整的反饋回路是其基本要求,以根據(jù)從部署的模型中捕獲的行為來(lái)及時(shí)調(diào)整系統(tǒng)。由于所有活動(dòng)都聯(lián)系在了一起,MLOps還為人工智能的透明度和可解釋性提供了基礎(chǔ)。
需要注意的是,MLOps是一種文化和實(shí)踐,類似于我們都知道的DevOps實(shí)踐,而不是具體的工具。一個(gè)常見(jiàn)的錯(cuò)誤是,直接進(jìn)入MLOps工具領(lǐng)域,這是一個(gè)很容易迷失方向的領(lǐng)域。總之,工具應(yīng)該支持實(shí)踐,反之則不成立。
1.3.2 MLOps與其他Ops的區(qū)別
在傳統(tǒng)軟件開(kāi)發(fā)的世界里,一套被稱為DevOps的工程實(shí)踐使得在幾分鐘內(nèi)將軟件部署到生產(chǎn)中并保持其可靠運(yùn)行成為可能。DevOps依靠工具、自動(dòng)化和工作流程來(lái)抽象出軟件工程的復(fù)雜性,讓開(kāi)發(fā)人員專注于需要解決的實(shí)際問(wèn)題。這種方法如今已經(jīng)非常成熟,在軟件開(kāi)發(fā)領(lǐng)域已經(jīng)基本成為“標(biāo)配”,那么為什么這套方法論或經(jīng)驗(yàn)不能直接應(yīng)用到ML領(lǐng)域?
其原因在于,ML的跨領(lǐng)域特性延伸出了新的維度,比如,增加了一個(gè)額外的數(shù)據(jù)維度,而這個(gè)維度區(qū)分了ML和傳統(tǒng)軟件,也給開(kāi)發(fā)和運(yùn)維過(guò)程帶來(lái)了全新的挑戰(zhàn)。對(duì)于傳統(tǒng)軟件,幾乎可以即時(shí)體現(xiàn)代碼變化對(duì)結(jié)果的影響;但在ML中,想要看到代碼變化對(duì)結(jié)果的影響需要重新訓(xùn)練模型。若考慮額外數(shù)據(jù)維度的影響,情況會(huì)變得更復(fù)雜,數(shù)據(jù)維度的引入不僅改變了代碼在開(kāi)發(fā)過(guò)程中的工作方式,而且數(shù)據(jù)本身也是在時(shí)刻變化的。
在傳統(tǒng)軟件開(kāi)發(fā)中,一個(gè)版本的代碼產(chǎn)生一個(gè)版本的軟件,代碼的版本決定了軟件的版本。在版本控制系統(tǒng)的輔助下,我們可以在任何時(shí)候創(chuàng)建應(yīng)用程序的任意變體。而ML則不是這樣的,在ML中,開(kāi)發(fā)的結(jié)果不是代碼而是模型,而這個(gè)模型又是由創(chuàng)建和訓(xùn)練模型的代碼版本及其所使用的數(shù)據(jù)產(chǎn)生的。一個(gè)版本的代碼和一個(gè)版本的數(shù)據(jù)結(jié)合在一起產(chǎn)生了一個(gè)版本的ML模型。代碼和數(shù)據(jù)分別處在兩個(gè)平行的平面上,它們之間共享時(shí)間維度,但在所有的其他方面都是獨(dú)立的。這種處在不同平面的關(guān)系也給具體的開(kāi)發(fā)和應(yīng)用帶來(lái)了挑戰(zhàn),任何試圖將ML模型成功投入生產(chǎn)的從業(yè)者都會(huì)面臨這些挑戰(zhàn)。
● 在ML項(xiàng)目中,除了要保存不同版本的代碼,還需要一個(gè)地方來(lái)保存不同版本的數(shù)據(jù)和模型工件。ML涉及大量的實(shí)驗(yàn)。數(shù)據(jù)科學(xué)家使用各種數(shù)據(jù)集訓(xùn)練模型,并生成不同的輸出。因此,除了借鑒DevOps的代碼版本控制方案,MLOps還需要特定的工具來(lái)保存不同版本數(shù)據(jù)、模型工件和涉及的元數(shù)據(jù)信息,以方便后續(xù)的管理和運(yùn)維。
● 與代碼不同,模型性能會(huì)隨著時(shí)間的推移而衰退,這就需要監(jiān)控。在將訓(xùn)練好的模型部署到生產(chǎn)環(huán)境后,便開(kāi)始從真實(shí)數(shù)據(jù)中產(chǎn)生預(yù)測(cè)。在一個(gè)穩(wěn)定的環(huán)境中,模型的性能不會(huì)下降。但是,真實(shí)世界時(shí)刻在變化,我們的模型接收的實(shí)時(shí)數(shù)據(jù)也在變化,這導(dǎo)致的直接后果就是所謂的“模型衰退”(有時(shí)候也被稱作訓(xùn)練服務(wù)偏移)。換句話說(shuō),它的預(yù)測(cè)的準(zhǔn)確率可能會(huì)隨著時(shí)間的推移而下降。為了防止模型性能動(dòng)態(tài)衰退,我們需要持續(xù)地監(jiān)測(cè)模型,這在DevOps實(shí)踐中很少見(jiàn)。
● 訓(xùn)練永遠(yuǎn)不會(huì)結(jié)束。一旦發(fā)現(xiàn)模型性能下降,就需要用新的數(shù)據(jù)重新訓(xùn)練模型,并在再次投入生產(chǎn)前進(jìn)行驗(yàn)證。在MLOps實(shí)踐中,這種持續(xù)的訓(xùn)練和驗(yàn)證在一定程度上可以看作DevOps實(shí)踐中的持續(xù)測(cè)試。
為了應(yīng)對(duì)這些挑戰(zhàn),我們可以借鑒來(lái)自DevOps和數(shù)據(jù)工程的經(jīng)驗(yàn),增加一些MLOps特有的方案,以一種可控的方式在代碼和數(shù)據(jù)平面之間建立一座橋梁。
MLOps與DataOps
DataOps(數(shù)據(jù)運(yùn)維)與MLOps的概念幾乎是同時(shí)出現(xiàn)的,并且DataOps也從DevOps實(shí)踐中借鑒了很多經(jīng)驗(yàn),但DataOps的核心應(yīng)用對(duì)象是數(shù)據(jù)應(yīng)用。DataOps涵蓋了數(shù)據(jù)生命周期內(nèi)的所有步驟,從數(shù)據(jù)收集、處理到分析和報(bào)告,并盡可能地將其過(guò)程自動(dòng)化。它的目標(biāo)是提高數(shù)據(jù)的質(zhì)量和可靠性,同時(shí)盡量縮短提供數(shù)據(jù)應(yīng)用所需的時(shí)間。
這種方法對(duì)處理大型數(shù)據(jù)集和復(fù)雜數(shù)據(jù)工程管道的業(yè)務(wù)場(chǎng)景特別有幫助。DataOps也可以在一定程度上輔助ML項(xiàng)目,但只是在輔助的層面上,因?yàn)樗惶峁┕芾砟P蜕芷诘慕鉀Q方案,所以可以認(rèn)為MLOps是DataOps的延伸。
MLOps與AIOps
作為Ops中比較另類的一個(gè),從字面上理解,AIOps與MLOps很相似,這其實(shí)是誤解。2017年Gartner首次提出了該術(shù)語(yǔ),AIOps被定義為結(jié)合大數(shù)據(jù)和ML技術(shù)實(shí)現(xiàn)IT運(yùn)維流程的自動(dòng)化方案。
從本質(zhì)上講,AIOps的目標(biāo)是自動(dòng)發(fā)現(xiàn)日常IT運(yùn)維中的問(wèn)題,并利用AI主動(dòng)做出智能反應(yīng)和預(yù)警。簡(jiǎn)單地說(shuō),AIOps是AI在Ops領(lǐng)域中的應(yīng)用,應(yīng)用的主體是Ops;而MLOps則是Ops在ML領(lǐng)域中的應(yīng)用,應(yīng)用的主體是ML。
最后,表1-1總結(jié)了MLOps的主要實(shí)踐及與DevOps和DataOps實(shí)踐的關(guān)系,由于AIOps是將AI技術(shù)應(yīng)用于運(yùn)維領(lǐng)域的方案,不屬于嚴(yán)格意義上的Ops,所以表1-1中的對(duì)比僅涉及MLOps與DevOps和DataOps實(shí)踐的關(guān)系。
表1-1 MLOps與DevOps和DataOps實(shí)踐的對(duì)比

接下來(lái)的內(nèi)容將回到我們的核心主題,將更詳細(xì)地探討MLOps的基礎(chǔ)概念。
1.3.3 誰(shuí)在關(guān)注MLOps
在筆者與許多從業(yè)者交流時(shí),發(fā)現(xiàn)對(duì)MLOps感興趣的人員來(lái)自非常不同的群體。
第一類是傳統(tǒng)企業(yè)的中高層管理人員。通常情況下,他們幾乎沒(méi)有ML經(jīng)驗(yàn),因?yàn)樵谠S多公司內(nèi)ML(甚至是大數(shù)據(jù))仍然是相對(duì)較新的概念。他們并不完全了解什么是ML模型,以及數(shù)據(jù)科學(xué)家要做什么。但他們有著豐富的管理經(jīng)驗(yàn)且精通業(yè)務(wù),積極思考和應(yīng)對(duì)當(dāng)前的業(yè)務(wù)瓶頸,對(duì)數(shù)字化轉(zhuǎn)型有著濃厚的興趣,同時(shí)又對(duì)數(shù)字化轉(zhuǎn)型是否能夠幫助企業(yè)走出困境抱有疑問(wèn)。他們希望能夠快速PoC,以盡可能少的成本進(jìn)行快速驗(yàn)證。
第二類對(duì)MLOps感興趣的群體是IT技術(shù)人員和運(yùn)維人員。他們的工作職責(zé)本身就屬于Ops的范疇:ML模型的生產(chǎn)化和運(yùn)維管理。IT技術(shù)人員日常工作的KPI是以他們支持的業(yè)務(wù)和在確定的預(yù)算內(nèi)順利運(yùn)行系統(tǒng)的能力來(lái)衡量的。ML模型是一種新型的IT資產(chǎn),需要特定的部署和監(jiān)控程序。由于IT技術(shù)人員和運(yùn)維團(tuán)隊(duì)還沒(méi)有適當(dāng)?shù)墓芾砗捅O(jiān)控ML模型的經(jīng)驗(yàn),因此他們正在積極尋找新的和強(qiáng)大的方法論來(lái)解決ML模型的管理和監(jiān)控問(wèn)題。
最后一類群體,也是MLOps的直接受益群體,是由數(shù)據(jù)科學(xué)家、ML工程師和數(shù)據(jù)工程師組成的。當(dāng)他們開(kāi)發(fā)創(chuàng)新模型時(shí),他們希望確保他們的工作成果能成為有價(jià)值的商業(yè)資產(chǎn)。數(shù)據(jù)科學(xué)家是人工智能和算法方面的專家,但他們的軟件開(kāi)發(fā)能力通常不太深厚,他們希望利用一種方法或工具來(lái)促進(jìn)從構(gòu)思到部署階段的迭代進(jìn)程。不過(guò),隨著企業(yè)對(duì)ML生產(chǎn)化越來(lái)越重視,數(shù)據(jù)科學(xué)家也開(kāi)始被要求精通基本的軟件工程技能,如代碼模塊化、復(fù)用、測(cè)試和版本管理等。僅讓模型在本地離線的建模環(huán)境中正常運(yùn)行是不夠的,這也是為什么許多互聯(lián)網(wǎng)公司在招聘時(shí)會(huì)強(qiáng)調(diào)工程技能,并且務(wù)實(shí)的公司更傾向于聘用ML工程師。在許多情況下,ML工程師的工作實(shí)際上也是MLOps要實(shí)現(xiàn)并盡量自動(dòng)化的內(nèi)容。
近年來(lái),MLOps方法在行業(yè)中越來(lái)越受到重視,筆者也看到很多不同行業(yè)的公司都在積極研究和布局MLOps。雖然不同行業(yè)在實(shí)踐MLOps時(shí)關(guān)注點(diǎn)不同,但共同點(diǎn)是,他們都面臨著某種ML運(yùn)維的挑戰(zhàn),他們都希望從可復(fù)制的流程中受益,以支持他們的ML項(xiàng)目。
在ML社區(qū)中,人們對(duì)MLOps的興趣也越來(lái)越大。一方面,ML從業(yè)者正在尋找一個(gè)可復(fù)制的流程來(lái)自動(dòng)化他們的工作。另一方面,業(yè)務(wù)線管理者和決策者希望從人工智能獲益,并迅速將ML用于業(yè)務(wù)用例。在開(kāi)源社區(qū)日益流行的今天,有很多開(kāi)源的工具可以幫助團(tuán)隊(duì)快速搭建MLOps,但在考慮使用任何技術(shù)之前,重要的是退一步,先充分了解團(tuán)隊(duì)試圖解決的問(wèn)題。
1.3.4 為什么需要MLOps
在傳統(tǒng)意義上,ML是從單個(gè)科學(xué)實(shí)驗(yàn)的角度來(lái)處理的,這些實(shí)驗(yàn)主要是由數(shù)據(jù)科學(xué)家獨(dú)立執(zhí)行的。然而,隨著ML模型成為現(xiàn)實(shí)業(yè)務(wù)場(chǎng)景中解決方案的一部分,并對(duì)業(yè)務(wù)產(chǎn)生價(jià)值,我們將不得不轉(zhuǎn)變視角,在強(qiáng)調(diào)科學(xué)原理重要性的同時(shí),使ML模型更容易落地(投產(chǎn)),并支持可重復(fù)性和多方協(xié)作。
2020年5月,Valohai公司調(diào)研了330名來(lái)自業(yè)內(nèi)不同公司的數(shù)據(jù)科學(xué)家、ML工程師和管理人員,了解了他們未來(lái)3個(gè)月對(duì)ML領(lǐng)域的關(guān)注點(diǎn)及面臨的主要障礙。雖然20%的受訪者表示他們?nèi)匀桓P(guān)注ML實(shí)驗(yàn)和學(xué)習(xí)階段,但50%的受訪者表示他們專注于開(kāi)發(fā)生產(chǎn)用的模型,超過(guò)40%的受訪者表示他們將部署生產(chǎn)可用的ML模型。
對(duì)于大多數(shù)受訪者來(lái)說(shuō),他們?cè)谏a(chǎn)中還沒(méi)有實(shí)現(xiàn)模型的自動(dòng)化持續(xù)訓(xùn)練、部署和模型在生產(chǎn)中的持續(xù)監(jiān)控,這說(shuō)明生產(chǎn)中的ML對(duì)大多數(shù)人來(lái)說(shuō)相對(duì)較新。然而,從搜索引擎的搜索量和新聞報(bào)道可以看出,近年來(lái)MLOps的熱度在穩(wěn)步上升,說(shuō)明MLOps在實(shí)踐中變得越來(lái)越重要。生產(chǎn)模型帶來(lái)了新的挑戰(zhàn),不僅對(duì)數(shù)據(jù)科學(xué)家,還對(duì)工程師、產(chǎn)品經(jīng)理和運(yùn)維人員組成的擴(kuò)展團(tuán)隊(duì)提出了新的挑戰(zhàn),這些挑戰(zhàn)需要這些不同團(tuán)隊(duì)的協(xié)作來(lái)應(yīng)對(duì),而MLOps給這種協(xié)作提供了可行的方案。
在實(shí)際應(yīng)用中,底層數(shù)據(jù)不斷變化,需要重新訓(xùn)練模型,甚至需要重建整個(gè)ML管道以解決數(shù)據(jù)變化帶來(lái)的模型漂移問(wèn)題,數(shù)據(jù)變化可能是業(yè)務(wù)或用戶行為的變化導(dǎo)致的。對(duì)于ML模型的搭建,以實(shí)現(xiàn)根據(jù)輸入數(shù)據(jù)輸出預(yù)測(cè)結(jié)果,做到這一點(diǎn)很容易。但是,搭建一個(gè)可靠、快速、可迭代且可供大量用戶使用的ML模型卻很困難。而這恰恰是MLOps擅長(zhǎng)的,MLOps是關(guān)于模型產(chǎn)品化的,幫助從業(yè)者將模型從研究環(huán)境部署到生產(chǎn)環(huán)境。進(jìn)一步地,我們把搭建MLOps(平臺(tái)/框架)的必要性總結(jié)如下。
● 對(duì)于一個(gè)典型的ML項(xiàng)目,其開(kāi)發(fā)過(guò)程是從數(shù)據(jù)工程開(kāi)始的,包括數(shù)據(jù)采集、清洗、預(yù)處理,緊接著需要進(jìn)行特征提取,這是一個(gè)迭代過(guò)程,為了高效和安全地完成這個(gè)過(guò)程,需要有可重復(fù)使用的管道和斷點(diǎn)檢查。
● 下一步是建立模型,這需要進(jìn)行實(shí)驗(yàn)。隨著實(shí)驗(yàn)的進(jìn)行,有必要跟蹤實(shí)驗(yàn)中模型的參數(shù)、評(píng)估指標(biāo)和超參數(shù),這有助于我們進(jìn)一步調(diào)整參數(shù)。
● 一旦模型開(kāi)發(fā)完成,就需要被部署到某個(gè)環(huán)境(如開(kāi)發(fā)環(huán)境)中,在其中可以進(jìn)行模型驗(yàn)證。
● 如果驗(yàn)證成功,模型將會(huì)被部署到生產(chǎn)環(huán)境中,在其中需要監(jiān)控模型性能,以及數(shù)據(jù)漂移、模型漂移等情況。
1.3.5 MLOps給企業(yè)帶來(lái)的增益
MLOps對(duì)企業(yè)能提供什么幫助呢?在20世紀(jì)90年代初期,軟件工程是孤立的和低效的。在那個(gè)年代,軟件的發(fā)布需要幾個(gè)月的時(shí)間,且主要由手動(dòng)完成。而現(xiàn)在,隨著DevOps技術(shù)的不斷發(fā)展和實(shí)踐,軟件可以在分鐘級(jí)(甚至秒級(jí))內(nèi)發(fā)布,這是因?yàn)樯婕暗牟襟E是模塊化和自動(dòng)化的。當(dāng)前,對(duì)于很多企業(yè),尤其是傳統(tǒng)企業(yè)來(lái)說(shuō),他們使用ML的情況與20世紀(jì)90年代的軟件類似:模型的創(chuàng)建是孤立的、低效的,需要幾個(gè)月的時(shí)間才能投入生產(chǎn),并且涉及大量人工參與的步驟。最近幾年,隨著業(yè)界對(duì)人工智能關(guān)注度逐步提高(尤其是大量傳統(tǒng)企業(yè)開(kāi)始在數(shù)字化轉(zhuǎn)型上大舉投資),軟件工程的DevOps所帶來(lái)的便利也開(kāi)始被借鑒到ML的應(yīng)用中,MLOps有助于為那些希望從數(shù)字化轉(zhuǎn)型中獲得更多價(jià)值的企業(yè)降低轉(zhuǎn)型的門檻。
● 為數(shù)據(jù)科學(xué)家節(jié)省更多的時(shí)間來(lái)開(kāi)發(fā)新模型。對(duì)于很多企業(yè),為了實(shí)現(xiàn)ML模型的落地,通常需要ML工程師或數(shù)據(jù)科學(xué)家配合其他團(tuán)隊(duì)來(lái)實(shí)現(xiàn)模型的生產(chǎn)化。而有了MLOps后,ML模型的生產(chǎn)化過(guò)程更像流水線,數(shù)據(jù)科學(xué)家在使用MLOps工具開(kāi)發(fā)模型后會(huì)自動(dòng)流轉(zhuǎn)到下一個(gè)環(huán)節(jié),然后像車間流水線一樣一個(gè)環(huán)節(jié)扣著一個(gè)環(huán)節(jié),直至模型進(jìn)入生產(chǎn)環(huán)境。MLOps輔助實(shí)現(xiàn)ML工程化的環(huán)節(jié),而數(shù)據(jù)科學(xué)家可以專注于他們的核心算法任務(wù)。
● 縮短ML模型的上市時(shí)間。MLOps方案會(huì)將模型訓(xùn)練和持續(xù)訓(xùn)練過(guò)程自動(dòng)化,將持續(xù)集成和持續(xù)部署功能模塊化,用于部署和更新ML流水線。因此,基于MLOps的解決方案可以將ML模型更快地投入生產(chǎn)。
● 更好的用戶體驗(yàn)。由于MLOps實(shí)踐,如持續(xù)訓(xùn)練和模型監(jiān)控,由ML驅(qū)動(dòng)的應(yīng)用可以得到及時(shí)更新,加快策略的迭代優(yōu)化,可以有效提高客戶滿意度。
● 預(yù)測(cè)的質(zhì)量更高。MLOps的模型監(jiān)控功能負(fù)責(zé)數(shù)據(jù)和模型的驗(yàn)證,評(píng)估模型在生產(chǎn)中的性能,并為持續(xù)訓(xùn)練及時(shí)發(fā)送信號(hào)。這將有助于消除建模時(shí)的錯(cuò)誤理解和模型衰退產(chǎn)生的風(fēng)險(xiǎn),并確保可以充分信任迭代后的模型所產(chǎn)生的結(jié)果。
MLOps可以成功應(yīng)用于商業(yè),由于數(shù)據(jù)科學(xué)家一般不具備工程師的專業(yè)知識(shí)來(lái)實(shí)現(xiàn)模型投產(chǎn)過(guò)程中的工程部分,使用MLOps可以降低數(shù)據(jù)科學(xué)家的工作難度,這在實(shí)際項(xiàng)目中會(huì)有很大的意義,為數(shù)據(jù)科學(xué)家節(jié)省大量的時(shí)間。在科研領(lǐng)域MLOps也可以同樣發(fā)揮價(jià)值,如實(shí)現(xiàn)學(xué)術(shù)上的結(jié)果可重復(fù)性便是一個(gè)痛點(diǎn)。舉個(gè)例子,某學(xué)者在期刊雜志上發(fā)表的文章的實(shí)證部分公開(kāi)了數(shù)據(jù)和算法細(xì)節(jié),但在使用文章中的信息自行實(shí)現(xiàn)時(shí),讀者會(huì)發(fā)現(xiàn),結(jié)果與文章中給出的結(jié)果相差甚遠(yuǎn),這種情況可能是作者在運(yùn)算時(shí)做了大量的實(shí)驗(yàn)但并未記錄每次實(shí)驗(yàn)的信息,提交到文章中的結(jié)果可能是這些實(shí)驗(yàn)中表現(xiàn)較好的那次實(shí)驗(yàn)的結(jié)果。如果使用MLOps的實(shí)驗(yàn)跟蹤功能,這個(gè)問(wèn)題便可迎刃而解。
1.3.6 MLOps的工作流程
如圖1-5所示,MLOps的工作流程是由一系列ML管道(有時(shí)候也叫流水線)組成的,ML管道是處理數(shù)據(jù)集時(shí)所涉及步驟的序列。管道由步驟組成,每個(gè)步驟都是一個(gè)獨(dú)立的實(shí)體,每個(gè)實(shí)體都會(huì)接收輸入并在進(jìn)行相應(yīng)的處理后產(chǎn)生輸出,該輸出由執(zhí)行順序決定是否作為下一個(gè)步驟的輸入。
第一步,ML管道的工作通常從數(shù)據(jù)準(zhǔn)備開(kāi)始,然后將準(zhǔn)備好的數(shù)據(jù)存儲(chǔ)到相應(yīng)的存儲(chǔ)設(shè)備上。
第二步,在接下來(lái)的特征工程步驟中,將會(huì)從數(shù)據(jù)存儲(chǔ)設(shè)備中獲取準(zhǔn)備好的數(shù)據(jù),進(jìn)行缺失數(shù)據(jù)填補(bǔ)、特征提取、特征轉(zhuǎn)換、降維、樣本分割等工程操作。
第三步,特征工程完成后會(huì)流轉(zhuǎn)到模型開(kāi)發(fā)步驟,即將特征工程步驟輸出的特征“喂給”模型來(lái)進(jìn)行開(kāi)發(fā)和訓(xùn)練。
第四步,進(jìn)行模型部署,向業(yè)務(wù)系統(tǒng)或第三方提供推理服務(wù)(通常以REST API的形式提供)。這里的服務(wù)指的是通過(guò)將模型部署為在線服務(wù)來(lái)接收實(shí)時(shí)請(qǐng)求并返回預(yù)測(cè)結(jié)果,模型投產(chǎn)從這一步驟開(kāi)始。
第五步,這也是ML項(xiàng)目周期的最后一步,在模型部署并上線發(fā)布后,將進(jìn)入模型監(jiān)控步驟,該步驟會(huì)對(duì)生產(chǎn)中的模型性能進(jìn)行評(píng)估,在模型衰退到性能的預(yù)設(shè)閾值時(shí),會(huì)觸發(fā)模型重新訓(xùn)練作業(yè),然后開(kāi)始新的周期。

圖1-5 MLOps的工作流程
在實(shí)踐中,通常會(huì)將模型的訓(xùn)練和部署過(guò)程分開(kāi)操作,在MLOps工作流程里,模型開(kāi)發(fā)訓(xùn)練及之前的步驟屬于“ML”的范疇,模型部署及之后的步驟屬于“Ops”的范疇。
當(dāng)我們?cè)谏a(chǎn)中部署一個(gè)模型時(shí),通常會(huì)部署訓(xùn)練階段產(chǎn)生的結(jié)果。比如,特征工程沉淀下來(lái)的規(guī)則及訓(xùn)練好的模型,有時(shí)候還需要對(duì)實(shí)時(shí)特征與存量特征進(jìn)行合并和計(jì)算。當(dāng)數(shù)據(jù)分布發(fā)生偏移或生產(chǎn)中的模型性能下降到一定程度時(shí),我們還需要收集最新數(shù)據(jù)來(lái)進(jìn)行模型的更新,生產(chǎn)中通常的做法是對(duì)訓(xùn)練管道進(jìn)行離線更新,在模型部署環(huán)節(jié)則需要熱部署,即需要在工程上實(shí)現(xiàn)不停機(jī)的情況下更新模型服務(wù)。模型投產(chǎn)后還需要對(duì)數(shù)據(jù)分布、模型性能及服務(wù)狀態(tài)等方面進(jìn)行監(jiān)控,具體細(xì)節(jié)在后面的章節(jié)中會(huì)詳細(xì)介紹。
1.3.7 MLOps工程師需要具備的技能
與傳統(tǒng)軟件開(kāi)發(fā)工程師的技能要求相比,MLOps工程師除了需要具備堅(jiān)實(shí)的編程能力,還需要具備ML專業(yè)知識(shí),包括使用Scikit-Learn、TensorFlow、Keras等ML框架的經(jīng)驗(yàn)。
此外,MLOps工程師也要有ML管道的創(chuàng)建、擴(kuò)展及將ML模型生產(chǎn)化的經(jīng)驗(yàn),還要有幫助企業(yè)落實(shí)架構(gòu)、系統(tǒng)等的能力,以確保ML模型的順利部署。
要成功部署ML模型,很大程度上取決于代碼和數(shù)據(jù)這兩個(gè)關(guān)鍵因素。MLOps工程師需要了解這兩者的關(guān)系。數(shù)據(jù)是來(lái)自真實(shí)世界的信息,會(huì)不斷變化;代碼則是在受控的環(huán)境中開(kāi)發(fā)出來(lái)的架構(gòu)與系統(tǒng),而融合數(shù)據(jù)和代碼生產(chǎn)出對(duì)業(yè)務(wù)有價(jià)值的模型是ML流程的重要挑戰(zhàn)。
另外,企業(yè)的ML應(yīng)用是為了滿足業(yè)務(wù)需求,因此MLOps工程師也需要注意業(yè)務(wù)相關(guān)的KPI,需要密切跟蹤這類KPI,并優(yōu)化ML模型,確保對(duì)ML的投資能帶來(lái)足夠高的回報(bào)。
接下來(lái),從職責(zé)描述和技能要求的角度給出一些參考。
(1)職責(zé)描述
● 為ML模型的開(kāi)發(fā)、訓(xùn)練、部署、監(jiān)控、測(cè)試和評(píng)估提供基礎(chǔ)設(shè)施和平臺(tái)。
● 設(shè)計(jì)和研發(fā)ML實(shí)驗(yàn)跟蹤、模型注冊(cè)、模型一鍵部署等功能模塊。
● 為模型性能跟蹤提供監(jiān)控、預(yù)警、儀表盤和日志等功能。
● ML基礎(chǔ)設(shè)施的管理、監(jiān)控及故障排查。
(2)技能要求
● 有架構(gòu)、部署和維護(hù)生產(chǎn)型ML系統(tǒng)的經(jīng)驗(yàn)。
● 有云平臺(tái)上的ML開(kāi)發(fā)經(jīng)驗(yàn)。
● 了解現(xiàn)代軟件開(kāi)發(fā)技術(shù),如敏捷方法論和DevOps。
● 有現(xiàn)代深度學(xué)習(xí)架構(gòu)模型的設(shè)計(jì)和開(kāi)發(fā)經(jīng)驗(yàn)。
● 對(duì)API架構(gòu)和容器編排(如Kubernetes)有深刻的理解。
● 有自動(dòng)擴(kuò)展ML系統(tǒng)和大數(shù)據(jù)系統(tǒng)的經(jīng)驗(yàn)。
1.3.8 什么時(shí)候真正需要MLOps
MLOps在模型開(kāi)發(fā)和生產(chǎn)部署之間搭起了重要的橋梁,但這并不意味著數(shù)字化企業(yè)必須大量投資來(lái)將所有步驟拼接在一起并使其每項(xiàng)任務(wù)自動(dòng)化。谷歌給出了MLOps建設(shè)三個(gè)級(jí)別的標(biāo)準(zhǔn)參考,不同級(jí)別對(duì)應(yīng)不同的建設(shè)要求,投資策略的選擇取決于企業(yè)數(shù)字化規(guī)模和需要運(yùn)行ML模型的數(shù)量。企業(yè)可以根據(jù)當(dāng)前的ML應(yīng)用階段進(jìn)行決策和投資。
● 初級(jí),該階段表明公司已經(jīng)開(kāi)始使用ML,甚至已經(jīng)雇用了能構(gòu)建和部署模型的內(nèi)部數(shù)據(jù)科學(xué)家,但是ML的工作流程還是手動(dòng)的。該階段適合企業(yè)數(shù)字化轉(zhuǎn)型初期或?qū)δP蜆?gòu)建和模型迭代非常謹(jǐn)慎的金融類公司,這類公司的ML應(yīng)用特點(diǎn)是用于驗(yàn)證可行性或不需要頻繁迭代模型。
● 中級(jí),該階段開(kāi)始使用持續(xù)訓(xùn)練的ML管道,數(shù)據(jù)和模型會(huì)自動(dòng)驗(yàn)證,每當(dāng)模型性能下降或新樣本到位時(shí)都會(huì)自動(dòng)觸發(fā)重新訓(xùn)練信號(hào)。該階段適合企業(yè)數(shù)字化已經(jīng)進(jìn)展到穩(wěn)定時(shí)期,會(huì)不間斷地推出新ML項(xiàng)目,但ML項(xiàng)目的新增頻率不會(huì)很高。
● 高級(jí),當(dāng)ML模型的自動(dòng)訓(xùn)練和自動(dòng)部署開(kāi)始疊加CI/CD能力時(shí),MLOps的高級(jí)階段就出現(xiàn)了。該階段適合營(yíng)銷科技類公司,他們必須每天(甚至每小時(shí)或在更小的時(shí)間粒度內(nèi))重新訓(xùn)練模型,需要在分鐘級(jí)的時(shí)間內(nèi)更新模型,并同時(shí)管理數(shù)百甚至更多的模型及服務(wù)。處在該階段的公司將會(huì)重度依賴端到端的MLOps,該階段的MLOps功能更全面、自動(dòng)化程度也更高。
綜上所述,只有適合公司需求和發(fā)展階段的MLOps策略才能產(chǎn)生預(yù)期的成果。
- 精通COBOL:大型機(jī)商業(yè)編程技術(shù)詳解(修訂版)
- QTP自動(dòng)化測(cè)試最佳實(shí)踐
- 用戶體驗(yàn)四維度
- Android深度探索(卷1):HAL與驅(qū)動(dòng)開(kāi)發(fā)
- 移動(dòng)Web實(shí)現(xiàn)指南:面向移動(dòng)設(shè)備的網(wǎng)站優(yōu)化、開(kāi)發(fā)和設(shè)計(jì)
- SQL Server應(yīng)用與開(kāi)發(fā)范例寶典
- 建筑運(yùn)維智慧管控平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)
- 軟件測(cè)試之魂:核心測(cè)試設(shè)計(jì)精解
- 軟件質(zhì)量管理指南
- 偉大的小細(xì)節(jié):互聯(lián)網(wǎng)產(chǎn)品設(shè)計(jì)中的微創(chuàng)新思維
- 內(nèi)容理解:技術(shù)、算法與實(shí)踐
- 鳳凰項(xiàng)目:一個(gè)IT運(yùn)維的傳奇故事
- 云原生網(wǎng)關(guān)Traefik:入門、進(jìn)階與實(shí)戰(zhàn)
- 深入淺出Spring Boot 3.x
- Java核心技術(shù)·卷Ⅰ:基礎(chǔ)知識(shí)(原書(shū)第10版)