機(jī)器學(xué)習(xí)系統(tǒng)設(shè)計(jì)

可以根據(jù)數(shù)據(jù)約束和任務(wù)要求設(shè)計(jì)機(jī)器學(xué)習(xí)系統(tǒng)的不同方式。 ## Intuition 在本課程中朴译,將討論處理特征沸伏、從中學(xué)習(xí)、對(duì)模型進(jìn)行試驗(yàn)和為它們提供服務(wù)的不同選項(xiàng)动分。還將討論基礎(chǔ)架構(gòu)編排和擴(kuò)展它們的不同選項(xiàng)毅糟。 ## 任務(wù) 在討論 ML 任務(wù)所需的基礎(chǔ)架構(gòu)之前,需要先討論一下 ML 任務(wù)的基本類型澜公。 ### 靜止的 一項(xiàng)任務(wù)可能涉及不隨時(shí)間變化的特征姆另。例如喇肋,如果 API 對(duì)上傳的圖片進(jìn)行分類,則所有輸入特征都來自用戶剛剛上傳的圖片迹辐。如果稍后上傳相同的圖像并使用相同的模型蝶防,則預(yù)測將保持不變。 ### 動(dòng)態(tài)的 任務(wù)還可能涉及隨時(shí)間變化的特征明吩。例如间学,如果您想預(yù)測用戶是否會(huì)喜歡一部電影,您需要檢索該用戶行為的最新可用數(shù)據(jù)印荔。使用完全相同的模型低葫,您的預(yù)測會(huì)隨著用戶特征的變化而變化。 > 當(dāng)涉及到如何存儲(chǔ)仍律、處理和檢索數(shù)據(jù)(例如數(shù)據(jù)庫嘿悬、特征存儲(chǔ)、流等)時(shí)水泉,這種細(xì)微的差異可以推動(dòng)關(guān)鍵的架構(gòu)選擇善涨。 ## 服務(wù) 第一個(gè)決定是通過批處理還是實(shí)時(shí)提供預(yù)測,這完全基于特征空間(有限與無限制)草则。從這里開始倒退钢拧,因?yàn)檫@個(gè)決定將決定許多關(guān)于處理、學(xué)習(xí)和實(shí)驗(yàn)的上游決定炕横。 ### 批量服務(wù) 可以對(duì)一組有限的輸入進(jìn)行批量預(yù)測源内,然后將其寫入數(shù)據(jù)庫以進(jìn)行低延遲推理。當(dāng)用戶或下游進(jìn)程實(shí)時(shí)發(fā)出推理請(qǐng)求時(shí)看锉,會(huì)返回來自數(shù)據(jù)庫的緩存結(jié)果(通常通過對(duì) API 的請(qǐng)求以[查詢](https://franztao.github.io/2022/10/01/RESTful_API/)[數(shù)據(jù)庫](https://franztao.github.io/2022/10/01/RESTful_API/#request))。 ![批量服務(wù)](https://upload-images.jianshu.io/upload_images/27840083-0c5a6e6aa6214d5f.png) - ? 生成和緩存預(yù)測塔鳍,以便為用戶提供非巢常快速的推理。 - ? 該模型不需要作為它自己的服務(wù)進(jìn)行旋轉(zhuǎn)轮纫,因?yàn)樗鼜奈磳?shí)時(shí)使用腔寡。 - ? 如果用戶開發(fā)了當(dāng)前預(yù)測所基于的舊數(shù)據(jù)未捕獲的新興趣,則預(yù)測可能會(huì)變得陳舊掌唾。 - ? 輸入特征空間必須是有限的放前,因?yàn)樾枰谛枰獙?shí)時(shí)預(yù)測之前生成所有預(yù)測。 > 批量服務(wù)任務(wù) > > 哪些任務(wù)適合批量服務(wù)糯彬? > > > 顯示答案 > > > > _根據(jù)現(xiàn)有_用戶的觀看歷史推薦他們喜歡的內(nèi)容凭语。然而,在第二天處理他們的歷史記錄之前撩扒,_新用戶可能只會(huì)收到一些基于他們明確興趣的通用推薦似扔。_即使不進(jìn)行批量服務(wù),緩存非常流行的輸入特征集(例如,明確興趣的組合導(dǎo)致某些推薦內(nèi)容)可能仍然有用炒辉,以便可以更快地提供這些預(yù)測豪墅。 ### 實(shí)時(shí)服務(wù) 還可以提供實(shí)時(shí)預(yù)測,其中輸入特征被實(shí)時(shí)饋送到模型以檢索預(yù)測黔寇。 ![實(shí)時(shí)服務(wù)](https://upload-images.jianshu.io/upload_images/27840083-556b7b4a4b4ce2d6.png) - ? 可以產(chǎn)生更多最新的預(yù)測偶器,從而產(chǎn)生更有意義的用戶體驗(yàn)等。 - ? 需要托管微服務(wù)來處理請(qǐng)求流量缝裤。 - ? 需要實(shí)時(shí)監(jiān)控屏轰,因?yàn)檩斎肟臻g是無限的,這可能會(huì)產(chǎn)生錯(cuò)誤的預(yù)測倘是。 > 實(shí)時(shí)服務(wù)任務(wù) > > 在上面的批量服務(wù)示例任務(wù)中亭枷,實(shí)時(shí)服務(wù)如何顯著改善內(nèi)容推薦? > > > 顯示答案 > > > > 通過批處理搀崭,使用用戶的歷史記錄為離線用戶生成內(nèi)容推薦叨粘。在使用更新的用戶功能在第二天處理批次之前,這些建議不會(huì)改變瘤睹。但是用戶的口味在一天中會(huì)發(fā)生顯著變化(例如升敲,用戶正在搜索要觀看的恐怖電影)。通過實(shí)時(shí)服務(wù)轰传,可以使用這些最近的功能根據(jù)即時(shí)搜索推薦高度相關(guān)的內(nèi)容驴党。 > 除了將模型包裝為單獨(dú)的、可擴(kuò)展的微服務(wù)之外获茬,還可以擁有一個(gè)專門構(gòu)建的[模型服務(wù)器](https://franztao.github.io/2022/10/01/RESTful_API/#model-server)來無縫地檢查港庄、更新、服務(wù)恕曲、回滾等多個(gè)版本的模型鹏氧。 ## 加工 還可以控制用于生成實(shí)時(shí)預(yù)測的特征。 用例不一定涉及隨時(shí)間變化的實(shí)體特征佩谣,因此只有一個(gè)處理管道是有意義的把还。但是,并非 ML 應(yīng)用程序中的所有實(shí)體都以這種方式工作茸俭。使用內(nèi)容推薦示例吊履,給定用戶可以具有隨時(shí)間更新的某些特征,例如最喜歡的流派调鬓、點(diǎn)擊率等艇炎。正如將在下面看到的,可以選擇在以前的時(shí)間為用戶批處理特征或者可以在流中處理可用的特征腾窝,并使用它們進(jìn)行相關(guān)預(yù)測冕臭。 > [在綜合數(shù)據(jù)堆棧課程](https://franztao.github.io/2022/11/10/Data_stack/)中了解有關(guān)下面提到的不同數(shù)據(jù)系統(tǒng)的更多信息腺晾,以及如何在[編排課程](https://franztao.github.io/2022/11/10/Orchestration/)中負(fù)責(zé)任地交付高質(zhì)量數(shù)據(jù)。 ### 批量處理 給定實(shí)體在前一個(gè)時(shí)間點(diǎn)的批處理特征辜贵,稍后用于生成實(shí)時(shí)預(yù)測悯蝉。 ![批量處理](https://upload-images.jianshu.io/upload_images/27840083-e9828f39610ae576.png) - ? 可以離線執(zhí)行繁重的特征計(jì)算,并準(zhǔn)備好進(jìn)行快速推理托慨。 - ? 功能可能會(huì)過時(shí)鼻由,因?yàn)樗鼈兪乔耙欢螘r(shí)間預(yù)先確定的。當(dāng)您的預(yù)測取決于最近發(fā)生的事件時(shí)厚棵,這可能是一個(gè)巨大的劣勢蕉世。(例如,盡快發(fā)現(xiàn)欺詐交易)婆硬。 ### 流處理 _使用給定實(shí)體的近乎_實(shí)時(shí)的流式特征對(duì)給定的一組輸入進(jìn)行推理狠轻。 ![流處理](https://upload-images.jianshu.io/upload_images/27840083-e223498ea618e886.png) - ? 可以通過向模型提供實(shí)時(shí)、流式傳輸?shù)奶卣鱽砩筛玫念A(yù)測彬犯。 - ? 維護(hù)數(shù)據(jù)流存儲(chǔ)([Kafka](https://kafka.apache.org/)向楼、[Kinesis](https://aws.amazon.com/kinesis/)等)和流處理(例如,使用[Beam](https://beam.apache.org/) \[Java谐区、Python湖蜕、Go、SQL\] 組合批處理/流式處理管道并在[Flink](https://flink.apache.org/)宋列、[Spark](https://spark.apache.org/)等運(yùn)行器上執(zhí)行它們所需的額外基礎(chǔ)設(shè)施)[數(shù)據(jù)流](https://cloud.google.com/dataflow)等)昭抒。 > 根據(jù)用戶生成的實(shí)時(shí)歷史推薦內(nèi)容。請(qǐng)注意炼杖,使用相同的模型灭返,但輸入數(shù)據(jù)可以更改和增長。 如果無限減少每個(gè)批處理事件之間的時(shí)間坤邪,將[有效地進(jìn)行](https://www.ververica.com/blog/batch-is-a-special-case-of-streaming)流(實(shí)時(shí))處理熙含,因?yàn)檫@些功能將始終是最新的。 > tip > > 即使應(yīng)用程序需要流處理罩扇,如果技術(shù)上更容易婆芦,最好先用批處理實(shí)現(xiàn)系統(tǒng)怕磨。如果任務(wù)是高風(fēng)險(xiǎn)的并且即使對(duì)于初始部署也需要流處理喂饥,仍然可以嘗試對(duì)內(nèi)部版本進(jìn)行批處理。這可以讓開始收集反饋肠鲫,生成更多數(shù)據(jù)來標(biāo)記员帮,等等。 ## 學(xué)習(xí) 到目前為止导饲,雖然可以選擇使用批處理/流式功能并提供批處理/實(shí)時(shí)預(yù)測捞高,但一直保持模型固定氯材。然而,這是必須根據(jù)用例和基礎(chǔ)設(shè)施允許的情況做出的另一個(gè)決定硝岗。 ### 線下學(xué)習(xí) 傳統(tǒng)的方法是離線訓(xùn)練模型氢哮,然后將它們部署到推理中。隨著新數(shù)據(jù)被標(biāo)記型檀、驗(yàn)證等冗尤,可能會(huì)定期離線重新訓(xùn)練它們,并在評(píng)估后部署它們胀溺。如果在[監(jiān)控](https://franztao.github.io/2022/10/27/monitoring/)過程中發(fā)現(xiàn)漂移等問題裂七,也可能會(huì)加快再培訓(xùn)。 ![離線學(xué)習(xí)](https://upload-images.jianshu.io/upload_images/27840083-68c84a6291342791.png) - ? 無需擔(dān)心為計(jì)算配置資源仓坞,因?yàn)樗l(fā)生在離線狀態(tài)背零。 - ? 不急于立即標(biāo)記和驗(yàn)證最近的數(shù)據(jù)。 - ? 模型可能會(huì)變得陳舊无埃,并且可能無法適應(yīng)最近的變化徙瓶,直到某些監(jiān)控警報(bào)觸發(fā)重新訓(xùn)練川蒙。 ### 在線學(xué)習(xí) 為了真正提供最明智的預(yù)測还最,應(yīng)該有一個(gè)基于最新數(shù)據(jù)訓(xùn)練的模型。然而韭邓,不是使用昂貴的無狀態(tài)批量學(xué)習(xí)澎埠,而是采用有狀態(tài)和增量學(xué)習(xí)方法虽缕。在這里,模型像往常一樣在初始數(shù)據(jù)集上離線訓(xùn)練蒲稳,然后隨著新數(shù)據(jù)的可用在單個(gè)實(shí)例或小批量級(jí)別隨機(jī)更新氮趋。這消除了與對(duì)相同過去數(shù)據(jù)進(jìn)行傳統(tǒng)無狀態(tài)、冗余訓(xùn)練相關(guān)的計(jì)算成本江耀。 ![在線學(xué)習(xí)](https://upload-images.jianshu.io/upload_images/27840083-89558241162d49b6.png) - ? 模型了解分布變化剩胁,可以快速適應(yīng)以提供高度知情的預(yù)測。 - ? 有狀態(tài)訓(xùn)練可以顯著降低計(jì)算成本并提供更快的收斂速度祥国。 - ? 可用于發(fā)生事件為標(biāo)簽的任務(wù)(用戶點(diǎn)擊昵观、時(shí)間序列等) - ? 對(duì)于涉及明確標(biāo)記或延遲結(jié)果的任務(wù)可能無法執(zhí)行。 - ? 當(dāng)模型從惡意的實(shí)時(shí)生產(chǎn)數(shù)據(jù)中學(xué)習(xí)時(shí)(通過監(jiān)控和回滾來緩解)舌稀,容易發(fā)生災(zāi)難性的推斷啊犬。 - ? 模型可能會(huì)遭受[災(zāi)難性遺忘](https://en.wikipedia.org/wiki/Catastrophic_interference),因?yàn)闀?huì)繼續(xù)使用新數(shù)據(jù)對(duì)其進(jìn)行更新壁查。 > 那么新的特征值呢觉至? > > 通過在線學(xué)習(xí),如何在不從頭開始重新訓(xùn)練的情況下編碼新的特征值睡腿? > > > 顯示答案 > > > > 可以使用巧妙的技巧來表示詞匯外的特征值语御,例如基于映射特征值或散列的編碼峻贮。例如,可能想對(duì)幾家餐廳的名稱進(jìn)行編碼应闯,但編碼器并未明確映射纤控。相反,可以選擇根據(jù)其位置碉纺、美食等來表示餐廳嚼黔,因此任何具有這些特征值的新餐廳都可以以與在訓(xùn)練期間可用的餐廳類似的方式表示。類似地惜辑,散列可以映射 OOV 值唬涧,但請(qǐng)記住,這是一種單向編碼(無法反轉(zhuǎn)散列以查看值是什么)盛撑,必須選擇足夠大的散列大小以避免沖突(<10% )碎节。 ## 基礎(chǔ)設(shè)施 處理特征和提供預(yù)測的方式?jīng)Q定了如何部署應(yīng)用程序。根據(jù)管道組件抵卫、規(guī)模等狮荔,有幾種不同的部署方式。 ### 計(jì)算引擎 AWS EC2介粘、Google Compute殖氏、Azure VM、on-prem 等計(jì)算引擎可以跨多個(gè)工作人員啟動(dòng)應(yīng)用程序姻采。 - **優(yōu)點(diǎn)**:易于部署和管理這些單一實(shí)例雅采。 - **缺點(diǎn)**:當(dāng)確實(shí)需要擴(kuò)展時(shí),單獨(dú)管理這些實(shí)例并不容易慨亲。 ### 容器編排 通過[Kubernetes](https://kubernetes.io/) (K8s) 進(jìn)行容器編排婚瓜,用于托管部署、擴(kuò)展等刑棵。有幾個(gè)特定于 ML 的平臺(tái)可以幫助通過[Seldon](https://www.seldon.io/tech/)巴刻、[KFServing](https://www.kubeflow.org/docs/components/kfserving/kfserving/)等控制平面對(duì) K8s 進(jìn)行**自我管理**。但是蛉签,也有**完全托管的**解決方案胡陪,例如如[SageMaker](https://aws.amazon.com/sagemaker/)、[Cortex](https://www.cortex.dev/)碍舍、[BentoML](https://www.bentoml.ai/)等柠座。其中許多工具還具有附加功能,例如實(shí)驗(yàn)跟蹤乒验、監(jiān)控等愚隧。 ![容器編排](https://upload-images.jianshu.io/upload_images/27840083-1e96c15a8d5b9312.png) - **優(yōu)點(diǎn)**:非常容易擴(kuò)展服務(wù)蒂阱,因?yàn)樗泄芾砥鞫季哂羞m當(dāng)?shù)慕M件(負(fù)載平衡器锻全、控制平面等) - **缺點(diǎn)**:可能會(huì)引入過多的復(fù)雜性開銷狂塘。 ### 無服務(wù)器 無服務(wù)器選項(xiàng),例如[AWS Lambda](https://aws.amazon.com/lambda/)鳄厌、[Google Cloud Functions](https://cloud.google.com/functions)等荞胡。 - **優(yōu)點(diǎn)**:無需管理任何服務(wù)器,它會(huì)根據(jù)請(qǐng)求流量自動(dòng)擴(kuò)展了嚎。 - **缺點(diǎn)**:函數(shù)存儲(chǔ)泪漂、有效負(fù)載等的大小限制基于提供者,通常沒有加速器(GPU歪泳、TPU 等) > 請(qǐng)務(wù)必探索與這些部署和服務(wù)選項(xiàng)相關(guān)的[CI/CD 工作流程](https://franztao.github.io/2022/10/26/cicd/#serving)萝勤,以便您可以進(jìn)行持續(xù)的培訓(xùn)、驗(yàn)證和服務(wù)流程呐伞。 ___ 更多干貨敌卓,第一時(shí)間更新在以下微信公眾號(hào): ![](https://raw.githubusercontent.com/franztao/blog_picture/main/marktext/2022-12-03-12-49-27-weixin.png) 您的一點(diǎn)點(diǎn)支持,是我后續(xù)更多的創(chuàng)造和貢獻(xiàn) ![](https://upload-images.jianshu.io/upload_images/27840083-98f632fd2905c4af.png) 轉(zhuǎn)載到請(qǐng)包括本文地址 更詳細(xì)的轉(zhuǎn)載事宜請(qǐng)參考[文章如何轉(zhuǎn)載/引用](https://franztao.github.io/2022/12/04/%E6%96%87%E7%AB%A0%E5%A6%82%E4%BD%95%E8%BD%AC%E8%BD%BD%E5%92%8C%E5%BC%95%E7%94%A8/) 本文主體源自以下鏈接: ``` @article{madewithml, author = {Goku Mohandas}, title = { Made With ML }, howpublished = {\url{https://madewithml.com/}}, year = {2022} } ``` 本文由[mdnice](https://mdnice.com/?platform=6)多平臺(tái)發(fā)布
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末伶氢,一起剝皮案震驚了整個(gè)濱河市趟径,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌癣防,老刑警劉巖蜗巧,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蕾盯,居然都是意外死亡幕屹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門级遭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來香嗓,“玉大人,你說我怎么就攤上這事装畅】坑椋” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵掠兄,是天一觀的道長像云。 經(jīng)常有香客問我,道長蚂夕,這世上最難降的妖魔是什么迅诬? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮婿牍,結(jié)果婚禮上侈贷,老公的妹妹穿的比我還像新娘。我一直安慰自己等脂,他們只是感情好俏蛮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布撑蚌。 她就那樣靜靜地躺著,像睡著了一般搏屑。 火紅的嫁衣襯著肌膚如雪争涌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天辣恋,我揣著相機(jī)與錄音亮垫,去河邊找鬼。 笑死伟骨,一個(gè)胖子當(dāng)著我的面吹牛饮潦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播携狭,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼害晦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了暑中?” 一聲冷哼從身側(cè)響起壹瘟,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鳄逾,沒想到半個(gè)月后稻轨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雕凹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年殴俱,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枚抵。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡线欲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汽摹,到底是詐尸還是另有隱情李丰,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布逼泣,位于F島的核電站趴泌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拉庶。R本人自食惡果不足惜嗜憔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望氏仗。 院中可真熱鬧吉捶,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至滋早,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砌们,已是汗流浹背杆麸。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浪感,地道東北人昔头。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像影兽,于是被迫代替她去往敵國和親揭斧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容