DevOps在機(jī)器學(xué)習(xí)上有怎樣的應(yīng)用
數(shù)據(jù)科學(xué)家與DevOps工程師相互協(xié)作可以獲得更好的業(yè)務(wù)成果,但了解他們的不同需求是關(guān)鍵。
數(shù)據(jù)科學(xué)家與軟件開發(fā)人員有一些共同的實(shí)踐和需求。數(shù)據(jù)科學(xué)家和軟件工程師都計(jì)劃、構(gòu)建、編碼、迭代、測試和部署代碼來實(shí)現(xiàn)他們的目標(biāo)。對于軟件開發(fā)人員來說,這通常意味著自定義編碼應(yīng)用程序和微服務(wù);數(shù)據(jù)科學(xué)家實(shí)現(xiàn)與數(shù)據(jù)操作的數(shù)據(jù)集成,通過分析模型進(jìn)行預(yù)測,并創(chuàng)建儀表板以幫助最終用戶導(dǎo)航結(jié)果。
那些尋求自動(dòng)化,并與運(yùn)營工程師開展合作的Devops工程師應(yīng)該擴(kuò)大其業(yè)務(wù)范圍,并向數(shù)據(jù)科學(xué)家提供服務(wù)。
擁有多個(gè)數(shù)據(jù)科學(xué)團(tuán)隊(duì)的大型組織可能會(huì)投資于Alteryx Analytics、Databricks、Dataiku等數(shù)據(jù)科學(xué)平臺(tái),這些平臺(tái)提供了用于開發(fā)、測試和部署分析模型的混合工具。這些工具在數(shù)據(jù)集和分析功能、集成選項(xiàng)、治理、業(yè)務(wù)用戶工具和部署選項(xiàng)上展開激烈的競爭。
DevOps對數(shù)據(jù)科學(xué)家的要求與應(yīng)用程序開發(fā)人員不同
并非每個(gè)組織都對投資數(shù)據(jù)科學(xué)平臺(tái)做好了準(zhǔn)備,或者可能只需要基本操作能力的小型數(shù)據(jù)科學(xué)團(tuán)隊(duì)。在這些情況下,最好將DevOps最佳實(shí)踐應(yīng)用于數(shù)據(jù)科學(xué)團(tuán)隊(duì),而不是選擇和使用平臺(tái)。
為此,許多用于軟件開發(fā)團(tuán)隊(duì)的敏捷和開發(fā)范例可以應(yīng)用于數(shù)據(jù)科學(xué)工作流程,并進(jìn)行一些重大調(diào)整。雖然數(shù)據(jù)科學(xué)家的流程與開發(fā)人員的工作流程類似,但存在一些重要的區(qū)別。
?數(shù)據(jù)科學(xué)工作需要圍繞數(shù)據(jù)集、模型和配置進(jìn)行更多實(shí)驗(yàn)。這不是大多數(shù)軟件開發(fā)商發(fā)布管理實(shí)踐遵循的簡單計(jì)劃、構(gòu)建、測試、部署周期。
?開發(fā)和測試模型可能無法使用統(tǒng)一的計(jì)算堆棧。一些模型可以使用簡單的Python腳本實(shí)現(xiàn),而其他模型可以使用Apache Spark和其他大數(shù)據(jù)平臺(tái)。
?即使模型處于開發(fā)階段,計(jì)算需求也會(huì)有很大差異。例如,一位數(shù)據(jù)科學(xué)家想要針對一個(gè)大數(shù)據(jù)集測試一個(gè)模型的六個(gè)變體,與另一位在一個(gè)規(guī)模較小數(shù)據(jù)集測試一個(gè)模型的數(shù)據(jù)科學(xué)家相比,需要更多的計(jì)算能力和存儲(chǔ)容量。
?部署到生產(chǎn)中的模型也需要持續(xù)維護(hù),但除了更改底層代碼之外,還有更多變量。模型還需要使用更新的數(shù)據(jù)集進(jìn)行重新訓(xùn)練、重新配置操作參數(shù)以及調(diào)整基礎(chǔ)設(shè)施,所有這些都可能觸發(fā)新的部署。
?監(jiān)控數(shù)據(jù)管道通常需要更復(fù)雜的驗(yàn)證。知道數(shù)據(jù)操作過程正在運(yùn)行,并且模型正在處理數(shù)據(jù)是不夠的。這些工具一旦投入生產(chǎn),就必須對吞吐量、錯(cuò)誤條件、數(shù)據(jù)源異常以及可能影響下游結(jié)果的其他條件進(jìn)行監(jiān)控。
?要想取得成功,數(shù)據(jù)科學(xué)家必須與開發(fā)人員、工程師、業(yè)務(wù)負(fù)責(zé)人合作,這與在應(yīng)用程序開發(fā)中鞏固開發(fā)人員和操作人員之間的協(xié)作相比,可能是一項(xiàng)更艱巨的任務(wù)。此外,許多數(shù)據(jù)科學(xué)家和團(tuán)隊(duì)可能不會(huì)向IT組織報(bào)告,因此更難為這些組織制定標(biāo)準(zhǔn)和治理。
在開始采用DevOps實(shí)踐和解決方案之前,支持?jǐn)?shù)據(jù)科學(xué)家需要了解這些和其他差異。
從數(shù)據(jù)科學(xué)家的經(jīng)驗(yàn)開始
與應(yīng)用程序開發(fā)人員一樣,數(shù)據(jù)科學(xué)家最感興趣的是解決問題,他們非常關(guān)注配置工具,但對配置基礎(chǔ)設(shè)施的興趣往往更少。與軟件開發(fā)人員不同,數(shù)據(jù)科學(xué)家可能沒有相同的經(jīng)驗(yàn)和背景來充分配置他們的開發(fā)工作流程。這為DevOps工程師提供了一個(gè)將數(shù)據(jù)科學(xué)家視為客戶,幫助他們定義需求,以及擁有交付解決方案所有權(quán)的機(jī)會(huì)。
這可以從數(shù)據(jù)科學(xué)家需要的基礎(chǔ)設(shè)施開始。他們是用Python、R還是其他語言編寫代碼?他們使用什么工具(Jupyter、Tableau、Apache Kafka和NLTK)進(jìn)行分析和建模?他們使用哪些數(shù)據(jù)庫和云平臺(tái)作為數(shù)據(jù)源,用于存儲(chǔ)經(jīng)過訓(xùn)練的數(shù)據(jù),以及用于部署模型?
為此,DevOps工程師可以幫助數(shù)據(jù)科學(xué)家選擇和標(biāo)準(zhǔn)化開發(fā)環(huán)境。這通常可以在計(jì)算設(shè)備或虛擬桌面上完成。無論哪種方式,將他們的應(yīng)用程序和配置鏡像到開發(fā)環(huán)境是與數(shù)據(jù)科學(xué)家進(jìn)行合作的重要的第一步。
在此之后,DevOps工程師應(yīng)該檢查數(shù)據(jù)科學(xué)家存儲(chǔ)代碼的位置、代碼的版本控制方式,以及代碼如何為部署打包。例如,一些數(shù)據(jù)科學(xué)家對使用版本控制工具(如Git)相對較新;另一些數(shù)據(jù)科學(xué)家可能使用代碼庫,但沒有實(shí)現(xiàn)自動(dòng)化集成。實(shí)現(xiàn)持續(xù)集成是DevOps工程師幫助數(shù)據(jù)科學(xué)家的第二個(gè)方面,因?yàn)樗鼊?chuàng)建了標(biāo)準(zhǔn),并刪除了測試新算法的一些人工工作。
需要記住的一點(diǎn)是,某些SaaS和企業(yè)數(shù)據(jù)平臺(tái)可能具有內(nèi)置版本控制,并且不會(huì)自然地與為代碼設(shè)計(jì)的版本控制系統(tǒng)接口。其中許多平臺(tái)都有API來觸發(fā)集成和部署或其他可以模仿持續(xù)集成(CI)/持續(xù)交付(CD)管道的機(jī)制。
定義部署管道并配置基礎(chǔ)架設(shè)施
在開發(fā)環(huán)境和持續(xù)集成標(biāo)準(zhǔn)化的情況下,DevOps工程師應(yīng)該考慮自動(dòng)化測試和生產(chǎn)環(huán)境的其他方面。這可以通過使用Jenkins等工具引入部署管道,并使用Chef、Puppet、Ansible或其他工具將基礎(chǔ)設(shè)施配置為代碼來實(shí)現(xiàn)。
數(shù)據(jù)科學(xué)環(huán)境也是Docker等容器以及Kubernetes等容器管理和編排工具的有力候選者。數(shù)據(jù)科學(xué)環(huán)境通常是數(shù)據(jù)操作、數(shù)據(jù)管理和數(shù)據(jù)建模平臺(tái)的組合,這些平臺(tái)需要作為集成環(huán)境進(jìn)行部署和管理。
了解運(yùn)行數(shù)據(jù)集成、機(jī)器學(xué)習(xí)培訓(xùn)和其他數(shù)據(jù)分析工作的規(guī)模和頻率至關(guān)重要。DevOps工程師很可能會(huì)發(fā)現(xiàn)多種模式,因?yàn)閿?shù)據(jù)科學(xué)家混合了不同的工作負(fù)載,例如,對部分?jǐn)?shù)據(jù)集頻繁測試新模型、計(jì)劃運(yùn)行以重新培訓(xùn)生產(chǎn)機(jī)器學(xué)習(xí)模型,以及培訓(xùn)新分析模型的特殊工作。這些工作負(fù)載類型應(yīng)該幫助DevOps工程師決定如何最好地配置和擴(kuò)展云計(jì)算基礎(chǔ)設(shè)施,以滿足不同的計(jì)算和存儲(chǔ)需求。
開發(fā)人員、DevOps工程師和數(shù)據(jù)科學(xué)家還應(yīng)該就業(yè)務(wù)成果進(jìn)行協(xié)作。
實(shí)現(xiàn)DevOps的最重要方面是促進(jìn)具有沖突目標(biāo)的開發(fā)人員和DevOps工程師之間的協(xié)作。開發(fā)人員經(jīng)常面臨著更改應(yīng)用程序的壓力,DevOps工程師需要對生產(chǎn)工作流的性能和可靠性負(fù)責(zé)。讓開發(fā)人員和工程師在自動(dòng)化和標(biāo)準(zhǔn)化配置方面進(jìn)行協(xié)作可以實(shí)現(xiàn)這兩個(gè)目標(biāo)。
數(shù)據(jù)科學(xué)家是這次合作的第三方。他們經(jīng)常面臨向高管和業(yè)務(wù)經(jīng)理提供分析結(jié)果的壓力。其他時(shí)候,他們正在開發(fā)模型,希望開發(fā)人員在他們的應(yīng)用程序中使用這些模型。他們對可變?nèi)萘炕A(chǔ)設(shè)施有著強(qiáng)烈的需求,在試驗(yàn)新平臺(tái)、庫和基礎(chǔ)設(shè)施配置時(shí),他們可能比開發(fā)人員要求更高。
數(shù)據(jù)科學(xué)家需要與開發(fā)人員和工程師建立這種合作關(guān)系,以提供成功的分析成果。而了解他們的目標(biāo)、定義目標(biāo)以及在DevOps實(shí)現(xiàn)上進(jìn)行合作是這些團(tuán)隊(duì)如何協(xié)作和交付業(yè)務(wù)成果。