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