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