發(fā)布于:2021-01-28 14:32:57
0
234
0
數(shù)據(jù)科學(xué)家擅長創(chuàng)建表示和預(yù)測真實(shí)世界數(shù)據(jù)的模型,但有效地部署機(jī)器學(xué)習(xí)模型與其說是科學(xué),不如說是一門藝術(shù)。部署需要軟件工程和DevOps中更常見的技能。Venturebeat報告說,87%的數(shù)據(jù)科學(xué)項目從未投入生產(chǎn),而redapt聲稱這是90%。兩者都強(qiáng)調(diào)了成功與失敗之間的一個關(guān)鍵因素是團(tuán)隊協(xié)作和迭代的能力。
建立機(jī)器學(xué)習(xí)模型的目的是解決一個問題,而機(jī)器學(xué)習(xí)模型只有在生產(chǎn)和消費(fèi)者積極使用時才能做到這一點(diǎn)。因此,模型部署和模型構(gòu)建一樣重要。正如Redapt指出的,IT和數(shù)據(jù)科學(xué)之間可能存在“脫節(jié)”。它傾向于專注于使事物變得可用和穩(wěn)定。他們不惜一切代價想要正常運(yùn)行時間。另一方面,數(shù)據(jù)科學(xué)家則專注于迭代和實(shí)驗(yàn)。彌合這兩個世界之間的鴻溝是確保你有一個好的模型并能實(shí)際投入生產(chǎn)的關(guān)鍵。
大多數(shù)數(shù)據(jù)科學(xué)家認(rèn)為,模型部署是一項軟件工程任務(wù),應(yīng)該由軟件工程師來處理,因?yàn)樗璧募寄芘c他們的日常工作更為密切相關(guān)。雖然這在某種程度上是正確的,但學(xué)習(xí)這些技能的數(shù)據(jù)科學(xué)家將具有優(yōu)勢,尤其是在精益組織中。像TFX、Mlflow和Kubeflow這樣的工具可以簡化模型部署的整個過程,數(shù)據(jù)科學(xué)家可以(而且應(yīng)該)快速地學(xué)習(xí)和使用它們。
模型部署和管理中的困難產(chǎn)生了一個新的、專門的角色:機(jī)器學(xué)習(xí)工程師。機(jī)器學(xué)習(xí)工程師比典型的數(shù)據(jù)科學(xué)家更接近軟件工程師,因此,他們是將模型投入生產(chǎn)的理想人選。但并不是每個公司都能奢侈地雇傭?qū)iT的工程師來部署模型。對于今天的精益工程車間,數(shù)據(jù)科學(xué)家學(xué)習(xí)如何將他們的模型投入生產(chǎn)是明智的。
在所有這一切中,另一個問題浮現(xiàn)出來?-?什么是將機(jī)器學(xué)習(xí)模型投入生產(chǎn)的最有效方法?
這個問題很關(guān)鍵,因?yàn)闄C(jī)器學(xué)習(xí)為企業(yè)帶來了巨大的潛力,任何能夠快速有效地將模型投入生產(chǎn)的公司都可以超越競爭對手。
在本文中,我將討論一些有助于在生產(chǎn)中獲得機(jī)器學(xué)習(xí)模型的實(shí)踐和方法。我將討論不同的技術(shù)和用例,以及每種方法的優(yōu)缺點(diǎn)。
所以不要再浪費(fèi)時間了,我們開始吧!
從模型到生產(chǎn)
許多團(tuán)隊在沒有生產(chǎn)計劃的情況下開始機(jī)器學(xué)習(xí)項目,這種方法在部署時往往會導(dǎo)致嚴(yán)重的問題。創(chuàng)建模型既昂貴又耗時,如果沒有計劃將其投入生產(chǎn),則不應(yīng)投資于ML項目,當(dāng)然,在進(jìn)行純研究時除外。有了一個計劃,你不會對任何可能使你的發(fā)射脫軌的陷阱感到驚訝。
在開始任何ML項目之前,您的團(tuán)隊需要考慮三個關(guān)鍵領(lǐng)域:
數(shù)據(jù)存儲和檢索
框架和工具
反饋和迭代
數(shù)據(jù)存儲與檢索
如果機(jī)器學(xué)習(xí)模型沒有任何相關(guān)數(shù)據(jù),那么它對任何人都沒有用處。你可能會有訓(xùn)練,評估,測試,甚至預(yù)測數(shù)據(jù)集。你需要回答以下問題:
您的訓(xùn)練數(shù)據(jù)是如何存儲的?
您的數(shù)據(jù)有多大?
您將如何檢索培訓(xùn)數(shù)據(jù)?
您將如何檢索用于預(yù)測的數(shù)據(jù)?
這些問題很重要,因?yàn)樗鼈儗⒅笇?dǎo)您使用什么框架或工具,如何解決您的問題,以及如何設(shè)計您的ML模型。在機(jī)器學(xué)習(xí)項目中做任何事情之前,先考慮一下這些數(shù)據(jù)問題
數(shù)據(jù)可以存儲在本地存儲、云存儲或兩者的混合存儲中。將數(shù)據(jù)存儲在模型培訓(xùn)和服務(wù)結(jié)果的地方是有意義的:本地模型培訓(xùn)和服務(wù)最適合本地數(shù)據(jù),尤其是在數(shù)據(jù)較大的情況下,而存儲在云存儲系統(tǒng)(如GCS、AWS S3或Azure存儲)中的數(shù)據(jù)應(yīng)與云ML培訓(xùn)和服務(wù)相匹配。
數(shù)據(jù)的大小也很重要。如果數(shù)據(jù)集很大,那么在預(yù)處理步驟和模型優(yōu)化階段需要更多的計算能力。這意味著,如果您在本地操作,就必須計劃更多的計算,或者從一開始就在云環(huán)境中設(shè)置自動伸縮。請記住,如果您沒有仔細(xì)考慮您的數(shù)據(jù)需求,這兩種方法中的任何一種都可能會變得昂貴,因此請預(yù)先計劃,確保您的預(yù)算能夠通過培訓(xùn)和生產(chǎn)來支持模型。
即使將訓(xùn)練數(shù)據(jù)與要訓(xùn)練的模型一起存儲,也仍然需要考慮如何檢索和處理這些數(shù)據(jù)。在這里,我們想到了批量與實(shí)時數(shù)據(jù)檢索的問題,在設(shè)計ML系統(tǒng)之前必須考慮到這一點(diǎn)。批量數(shù)據(jù)檢索是指從存儲系統(tǒng)中分塊檢索數(shù)據(jù),而實(shí)時數(shù)據(jù)檢索是指在數(shù)據(jù)可用時立即檢索數(shù)據(jù)。
除了訓(xùn)練數(shù)據(jù)檢索,您還需要考慮預(yù)測數(shù)據(jù)檢索。您的預(yù)測數(shù)據(jù)是TK(相對于訓(xùn)練數(shù)據(jù)進(jìn)行定義),很少像訓(xùn)練數(shù)據(jù)那樣整齊地打包,因此您需要考慮與模型在推斷時如何接收數(shù)據(jù)相關(guān)的更多問題:
您是否從網(wǎng)頁中獲取推斷數(shù)據(jù)?
您是否收到來自API的預(yù)測請求?
您是批量預(yù)測還是實(shí)時預(yù)測?
如果你從網(wǎng)頁上獲取數(shù)據(jù),那么問題是什么類型的數(shù)據(jù)?網(wǎng)頁中來自用戶的數(shù)據(jù)可以是結(jié)構(gòu)化數(shù)據(jù)(CSVs、JSON)或非結(jié)構(gòu)化數(shù)據(jù)(圖像、視頻、聲音),推理引擎應(yīng)該足夠健壯,能夠檢索、處理和做出預(yù)測。來自網(wǎng)頁的推斷數(shù)據(jù)可能對用戶非常敏感,因此,您必須考慮隱私和道德等因素。在這里,可以考慮像聯(lián)邦學(xué)習(xí)這樣的框架,將模型帶到數(shù)據(jù)中,并且數(shù)據(jù)永遠(yuǎn)不會離開網(wǎng)頁/用戶。
這里的另一個問題與數(shù)據(jù)質(zhì)量有關(guān)。用于推斷的數(shù)據(jù)通常與訓(xùn)練數(shù)據(jù)非常不同,特別是當(dāng)數(shù)據(jù)直接來自最終用戶而不是api時。因此,您必須提供必要的基礎(chǔ)設(shè)施,以完全自動化對更改的檢測以及對這些新數(shù)據(jù)的處理。
與檢索一樣,您需要考慮推理是批量進(jìn)行還是實(shí)時進(jìn)行。這兩種情況需要不同的方法,因?yàn)樗婕暗募夹g(shù)/技能可能不同。對于批處理推斷,您可能希望將預(yù)測請求保存到中心存儲,然后在指定的時間段后進(jìn)行推斷,而在實(shí)時情況下,只要推斷請求完成,就立即執(zhí)行預(yù)測制造。知道這將使您能夠有效地計劃何時以及如何調(diào)度計算資源,以及使用什么工具。
提出和回答與數(shù)據(jù)存儲和檢索相關(guān)的問題是很重要的,這將使您思考設(shè)計ML項目的正確方法。
框架和工具
你的模型不會自行訓(xùn)練、運(yùn)行和部署。為此,您需要框架和工具、軟件和硬件來幫助您有效地部署ML模型。這些可以是Tensorflow、Pytorch和Scikit等框架,用于培訓(xùn)模型、Python、Java和Go等編程語言,甚至可以是AWS、GCP和Azure等云環(huán)境。
在檢查并準(zhǔn)備好使用數(shù)據(jù)之后,下一個思路應(yīng)該考慮使用什么樣的框架和工具組合。
框架的選擇非常重要,因?yàn)樗梢詻Q定模型的連續(xù)性、維護(hù)和使用。在此步驟中,您必須回答以下問題:
對于手頭的任務(wù),什么是最好的工具?
工具的選擇是開源的還是封閉的?
有多少平臺/目標(biāo)支持該工具?
為了幫助確定任務(wù)的最佳工具,您應(yīng)該研究并比較執(zhí)行相同任務(wù)的不同工具的結(jié)果。例如,您可以根據(jù)以下條件比較這些工具:
效率:框架或工具在生產(chǎn)中的效率如何?如果一個框架或工具能夠最佳地使用內(nèi)存、CPU或時間等資源,那么它就是有效的??紤]您打算使用的框架或工具的效率是很重要的,因?yàn)樗鼈冎苯佑绊懙巾椖康男阅?、可靠性和穩(wěn)定性
受歡迎程度:該工具在開發(fā)人員社區(qū)中的受歡迎程度如何?受歡迎通常意味著它工作良好,正在積極使用,并有很多支持。還值得一提的是,可能有一些較新的工具不那么流行,但比流行的工具更有效,特別是對于封閉源代碼的專有工具。在選擇一個專用工具時,你需要權(quán)衡一下。一般來說,在開源項目中,您會傾向于流行的和更成熟的工具,原因我將在下面討論
支持:如何支持框架或工具?如果它是開源的,它背后是否有一個充滿活力的社區(qū),或者它是否對封閉源代碼工具有很好的支持?在實(shí)際項目中,您能以多快的速度找到提示、技巧、教程和其他用例?
接下來,您還需要知道您選擇的工具或框架是否是開源的。這有利弊之分,答案將取決于預(yù)算、支持、連續(xù)性、社區(qū)等因素。有時,您可以獲得開放源代碼軟件的專有版本,這意味著您可以獲得開放源代碼和高級支持的好處
您需要回答的另一個問題是,您選擇的框架支持多少個平臺/目標(biāo)?也就是說,您選擇的框架是否支持流行的平臺,如web或移動環(huán)境?它是在Windows、Linux還是Mac操作系統(tǒng)上運(yùn)行的?在這個目標(biāo)環(huán)境中定制或?qū)崿F(xiàn)起來容易嗎?這些問題很重要,因?yàn)橛性S多工具可用于研究和試驗(yàn)項目,但很少有工具能夠在生產(chǎn)過程中充分支持您的模型
反饋與迭代
ML項目從來不是靜態(tài)的。這是工程和設(shè)計的一部分,必須從一開始就加以考慮。在這里,您應(yīng)該回答以下問題:
我們?nèi)绾螐纳a(chǎn)中的模型中獲得反饋?
如何設(shè)置連續(xù)交貨?
從生產(chǎn)中的模型獲得反饋是非常重要的。主動跟蹤和監(jiān)視模型狀態(tài)可以在模型性能下降/衰退、偏差蠕變甚至數(shù)據(jù)傾斜和漂移的情況下向您發(fā)出警告。這將確保這些問題在最終用戶注意到之前得到迅速解決。
考慮如何在生產(chǎn)中對新模型進(jìn)行試驗(yàn)、再培訓(xùn)和部署,而不必關(guān)閉該模型或以其他方式中斷其操作。一個新模型在用來代替舊模型之前應(yīng)該經(jīng)過適當(dāng)?shù)臏y試。這種在不中斷現(xiàn)有模型過程的情況下連續(xù)測試和部署新模型的思想稱為連續(xù)集成。
當(dāng)一個模型投入生產(chǎn)時,還有許多其他問題,這篇文章不是法律,但是我相信你會問的大多數(shù)問題都屬于上面提到的一類。
機(jī)器學(xué)習(xí)部署示例
現(xiàn)在,我將引導(dǎo)您完成一個示例ML項目。在這個項目中,您是一個從事有前途的項目的ML工程師,您希望設(shè)計一個能夠有效地放置、監(jiān)視、跟蹤和部署ML模型的防故障系統(tǒng)。
以Adstocrat為例,Adstocrat是一家為在線公司提供高效廣告跟蹤和監(jiān)控的廣告公司。他們與大公司合作,最近獲得了一份合同,將建立一個機(jī)器學(xué)習(xí)系統(tǒng),以預(yù)測客戶是否會點(diǎn)擊網(wǎng)頁上顯示的廣告。承包商在Google云存儲(GCS)存儲桶中有一個大容量的數(shù)據(jù)集,并希望Adstocrat為他們開發(fā)一個端到端的ML系統(tǒng)。
作為主管工程師,你必須在項目開始前提出設(shè)計方案。要解決此問題,請詢問前面提出的每個問題,并為此端到端系統(tǒng)開發(fā)設(shè)計。
數(shù)據(jù)問題
首先,我們來談?wù)剶?shù)據(jù)。您的訓(xùn)練數(shù)據(jù)是如何存儲的?
數(shù)據(jù)存儲在GCS存儲桶中,有兩種形式。第一個是描述廣告的CSV文件,第二個是廣告的相應(yīng)圖像。數(shù)據(jù)已經(jīng)在云中,所以最好在云中構(gòu)建ML系統(tǒng)。您將獲得更好的I/O延遲,隨著數(shù)據(jù)變得更大(數(shù)百GB)而易于擴(kuò)展,以及任何額外GPU和TPU的快速設(shè)置和配置。
您的數(shù)據(jù)有多大?
承包商每月提供數(shù)百萬條廣告,每個月底數(shù)據(jù)被聚合并存儲在云存儲桶中。因此,現(xiàn)在您知道您的數(shù)據(jù)很大(數(shù)百GB的圖像),因此您在云中構(gòu)建系統(tǒng)的預(yù)感更強(qiáng)。
您將如何檢索培訓(xùn)數(shù)據(jù)?
由于數(shù)據(jù)存儲在GCS bucket中,因此在Google云平臺上構(gòu)建的模型可以輕松地檢索和使用這些數(shù)據(jù)。所以現(xiàn)在你知道該使用哪個云提供商了
您將如何檢索數(shù)據(jù)進(jìn)行預(yù)測?
關(guān)于推斷數(shù)據(jù),承包商通知您推斷將由其內(nèi)部API請求,因?yàn)橛糜陬A(yù)測的此類數(shù)據(jù)將由restapi調(diào)用。這使您了解項目的目標(biāo)平臺
項目框架和工具
在這個階段,您可以使用多種工具組合,其中一種工具的選擇可能會影響其他工具。在原型、模型構(gòu)建和部署的編程語言方面,您可以根據(jù)您的研究結(jié)果決定為這三個階段選擇相同的語言或使用不同的語言。例如,Java是一種非常有效的后端編程語言,但在機(jī)器學(xué)習(xí)方面,它無法與Python這樣的通用語言相比。
經(jīng)過考慮,您決定使用Python作為您的編程語言,Tensorflow用于模型構(gòu)建,因?yàn)槟鷮⑹褂靡粋€包含圖像的大型數(shù)據(jù)集,以及Tensorflow Extended(TFX),一個在Google內(nèi)部發(fā)布和使用的開源工具,用于構(gòu)建管道。模型構(gòu)建的其他方面,如模型分析、監(jiān)控、服務(wù)等,又如何呢?你在這里用什么工具?好吧,TFX幾乎涵蓋了一切!
TFX提供了一系列框架、庫和組件,用于在生產(chǎn)環(huán)境中定義、啟動和監(jiān)視機(jī)器學(xué)習(xí)模型。TFX中可用的組件允許您構(gòu)建高效的ML管道,這些管道專門設(shè)計為從一開始就可以擴(kuò)展。這些組件具有對ML建模、培訓(xùn)、服務(wù)甚至管理到不同目標(biāo)的部署的內(nèi)置支持。
TFX還與我們選擇的編程語言(Python)以及您選擇的深度學(xué)習(xí)模型構(gòu)建器(Tensorflow)兼容,這將鼓勵整個團(tuán)隊的一致性。另外,由于TFX和Tensorflow是由Google構(gòu)建的,因此它在Google云平臺上擁有一流的支持。記住,你的數(shù)據(jù)存儲在地面軍事系統(tǒng)中。
工具的選擇是開源的還是封閉的?
Python、TFX和Tensorflow都是開源的,它們是構(gòu)建系統(tǒng)的主要工具。在計算能力和存儲方面,您使用的都是GCP,這是一種付費(fèi)和托管的云服務(wù)。這有其優(yōu)點(diǎn)和缺點(diǎn),也可能取決于您的用例。在考慮使用托管云服務(wù)時需要考慮的一些優(yōu)點(diǎn)包括:
它們具有成本效益。
快速設(shè)置和部署。
高效備份和恢復(fù)。
一些缺點(diǎn)是:
安全問題,尤其是敏感數(shù)據(jù)的安全問題。
互聯(lián)網(wǎng)連接可能會影響工作,因?yàn)橐磺卸际窃诰€運(yùn)行的。
經(jīng)常性成本。
對工具的控制有限。
一般來說,對于像初創(chuàng)公司這樣的小型企業(yè)來說,在項目中使用托管云服務(wù)通常更便宜、更好。
有多少平臺/目標(biāo)支持該工具?
TFX和Tensorflow可以在Python運(yùn)行的任何地方運(yùn)行,這是很多地方。此外,使用Tensorflow構(gòu)建的模型可以很容易地保存并在瀏覽器中使用Tensorflow.js公司,在使用Tensorflow lite的移動設(shè)備和物聯(lián)網(wǎng)中,在云中,甚至在網(wǎng)上。
反饋和迭代問題
我們?nèi)绾螐纳a(chǎn)中的模型獲得反饋?
TFX支持一種反饋機(jī)制,可以輕松地用于管理模型版本控制以及推出新模型??梢試@此工具建立自定義反饋,以有效地跟蹤生產(chǎn)中的模型。一個名為TensorFlow模型分析(TFMA)的TFX組件允許您在部署之前輕松地根據(jù)當(dāng)前模型評估新模型。
回顧上面的答案,您已經(jīng)可以開始想象您的最終ML系統(tǒng)設(shè)計將是什么樣子。在建?;驍?shù)據(jù)探索之前獲得這一部分是非常重要的。
結(jié)論
如果在開始一個項目之前勾選了所有的框,那么有效地將ML模型投入生產(chǎn)并不困難。這是非常重要的在一個ML項目,你將著手和應(yīng)優(yōu)先考慮!
雖然這篇文章并不詳盡,但我希望它為您提供了一個指導(dǎo)和直覺,告訴您如何處理一個ML項目以將其投入生產(chǎn)。
感謝閱讀!下次再見