机器学习平台的简单调研
1. MLOps簡介
在機器學(xué)習(xí)的任務(wù)過程中,可能面對以下幾個問題:
- 隨著項目體量增加,數(shù)據(jù)不足時,需要相關(guān)團隊來負責(zé)數(shù)據(jù)采集、標(biāo)注和清洗。然而,采集數(shù)據(jù)本身太復(fù)雜以至于需要多層級的組織來完成,例如當(dāng)采集的數(shù)據(jù)量暴增時又需要開發(fā)分布式系統(tǒng)。
- 將數(shù)據(jù)放入模型以后,可能會一直有新的模型迭代,因此需要不斷對同一份數(shù)據(jù)嘗試新的算法。每個模型又有非常多的超參,又需要調(diào)優(yōu)不同的超參數(shù)。
- 由于數(shù)據(jù)漂移、概念漂移,需要重新收集數(shù)據(jù),重新訓(xùn)練。
- 靜/動態(tài)學(xué)習(xí)時模型的評估、可視化、應(yīng)用、部署等步驟非常繁雜。
- …
面對這樣繁雜的數(shù)據(jù)、工作量,跨組織的、重復(fù)性的工作就迫切需要自動化的流水線設(shè)計,該類設(shè)計通常迫切需要快速開發(fā)迭代。
在軟件工程中,DevOps旨在為開發(fā)團隊縮短開發(fā)周期,提高部署速度。這對于一個流水線式機器學(xué)習(xí)的服務(wù)平臺開發(fā)具有非常大的幫助。近年來,DevOps逐漸向機器學(xué)習(xí)領(lǐng)域延伸,并逐漸形成一個新的概念—MLOps:應(yīng)用于管理大規(guī)模生產(chǎn)環(huán)境中機器學(xué)習(xí)和深度學(xué)習(xí)的平臺部署。兩者的本質(zhì)都是軟件系統(tǒng),因此DevOps的原理也適用于MLOps。但是,兩者仍然存在很多差異,例如前者的輸出主要包括源代碼、軟件等比較單調(diào)的成果,而后者不僅包含DevOps的所有輸出形式,還包括數(shù)據(jù)源、模型等。個人認為,MLOps的開發(fā)更加繁雜、更具有挑戰(zhàn)性。
MLOps的開發(fā)對象為機器學(xué)習(xí)平臺。機器學(xué)習(xí)平臺,顧名思義,為集成式機器學(xué)習(xí)環(huán)境而設(shè)計,方便缺乏領(lǐng)域知識的相關(guān)用戶實現(xiàn)流水線式機器學(xué)習(xí)任務(wù)。一個機器學(xué)習(xí)平臺的基礎(chǔ),是將最原始數(shù)據(jù)經(jīng)過數(shù)據(jù)處理(采集、標(biāo)注、清洗、特征工程等)后作為輸入數(shù)據(jù),然后在輸入和輸出的數(shù)據(jù)中應(yīng)用靈活可控的模型接口,最后部署、上線訓(xùn)練好的模型以實現(xiàn)應(yīng)用。在此過程中,數(shù)據(jù)處理、模型訓(xùn)練、模型預(yù)測、測試、部署等都可以抽象成獨立可執(zhí)行單元,實現(xiàn)模塊內(nèi)高內(nèi)聚、模塊間低耦合標(biāo)準(zhǔn),根據(jù)任務(wù)之間的依賴關(guān)系實現(xiàn)模塊的流水線設(shè)計。
2. 機器學(xué)習(xí)平臺應(yīng)具備的基礎(chǔ)功能
在學(xué)習(xí)了Google的MLOps指導(dǎo)及相關(guān)綜述后,對機器學(xué)習(xí)系統(tǒng)有了大概的理解。MLOps指導(dǎo)敘述了機器學(xué)習(xí)平臺的各個模塊功能及耦合關(guān)系,相當(dāng)全面。這里我從個人角度出發(fā),簡單列舉了目前認為機器學(xué)習(xí)平臺應(yīng)具備的必要功能。
2.1 數(shù)據(jù)接入
在開發(fā)機器學(xué)習(xí)平臺時,數(shù)據(jù)接入是一個重要且必不可少的階段。機器學(xué)習(xí)中具有非常多數(shù)據(jù)源,例如data warehouses, data lakes, data meshes等。這些數(shù)據(jù)的格式可能多樣性,需要統(tǒng)一規(guī)范化數(shù)據(jù)處理,以方便后續(xù)流水線式任務(wù)對接。
2.2 數(shù)據(jù)處理
原生數(shù)據(jù)很有可能不滿足模型或需求的輸入數(shù)據(jù)要求及形式,通常需要進一步數(shù)據(jù)處理操作。例如,大規(guī)模機器學(xué)習(xí)任務(wù)需要海量數(shù)據(jù)的引入及特征的有效表示,而現(xiàn)實世界的數(shù)據(jù)既缺乏標(biāo)簽(即缺乏訓(xùn)練的目標(biāo)),且存在屬性偏差、缺失、冗余、矛盾等問題,這些數(shù)據(jù)通常需要修訂或重定義,包括但是不限于:數(shù)據(jù)標(biāo)注、數(shù)據(jù)清洗、數(shù)據(jù)增強、特征工程等。針對這些流程,通常需要具備交互式的各類平臺及底層支持,例如Google MLOps指導(dǎo)中定義的數(shù)據(jù)&特征庫、數(shù)據(jù)處理接口及平臺、數(shù)據(jù)測試流水線等。相關(guān)領(lǐng)域中有大量文獻致力于解決數(shù)據(jù)處理中遇到的問題。
2.3 模型構(gòu)建
機器學(xué)習(xí)平臺的一個核心功能是完善的模型構(gòu)建流水線。開源機器學(xué)習(xí)庫如Tensorflow,pytorch等需要一定的技術(shù)門檻,但大大縮減了機器學(xué)習(xí)模型的開發(fā)難度。機器學(xué)習(xí)庫的多樣性同樣增加了機器學(xué)習(xí)規(guī)范化統(tǒng)一的難度,例如多用戶對不同語言的支持。針對于這一點,Google Vertex AI平臺在模型構(gòu)建階段提供了支持多類機器學(xué)習(xí)庫的自定義編程。
個人總結(jié)了機器學(xué)習(xí)平臺中模型構(gòu)建的3類的接口:
- A. 為毫無經(jīng)驗的/急需上線使用的/測試用戶提供全自動化預(yù)訓(xùn)練模型/API(效率高但缺乏可擴展性)
- B. 為缺乏領(lǐng)域知識的用戶提供操作簡便的構(gòu)建接口,如包含圖表、文本等可視化界面(效率高)
- C. 為算法工程師提供靈活的編程接口,如jupyter(靈活性高,門檻高)
機器學(xué)習(xí)平臺的一個目標(biāo)是降低機器學(xué)習(xí)項目部署的門檻,在模型部署方面,盡量避免過多模型編程的代碼(偏向于上述的A和B類)。因此,在模型構(gòu)建時,需提供完備的預(yù)訓(xùn)練模型、面向數(shù)據(jù)特征匹配的模型推薦、面向任務(wù)的模型篩選等;在模型訓(xùn)練時,需提供動態(tài)的訓(xùn)練可視化(如tensorboard)、超參數(shù)搜索、硬件資源調(diào)度支撐等。
2.4 模型驗證
在構(gòu)建模型之后,通常需要大量的測試之后才能部署上線使用。模型驗證階段的目標(biāo)是多方面的,因為機器學(xué)習(xí)模型應(yīng)該泛化未知的輸入,實現(xiàn)邊界情況的合理處理和整體健壯性,以及滿足所有功能需求。
模型驗證的形式很多,在模型質(zhì)量層面上,通??梢岳没跍y試用例的模型驗證方法+評估指標(biāo)的形式實現(xiàn)。機器學(xué)習(xí)平臺需要提供充足的測試用例,以輔助模型的開發(fā)。但其他形式的模型驗證內(nèi)容,我暫時了解不深,這里先不做敘述,以后再補充。
2.5 模型部署&服務(wù)
在數(shù)據(jù)及模型準(zhǔn)備好后,需要將模型及相關(guān)依賴資源打包、壓縮、甚至蒸餾等操作實現(xiàn)將模型到線上、app等平臺的部署。Flyte框架將所有依賴資源打包為Docker鏡像,但相對笨重。
2.6 模型監(jiān)控
模型監(jiān)控是機器學(xué)習(xí)平臺中模型質(zhì)量的保證。上線服務(wù)后,機器學(xué)習(xí)模型的輸入數(shù)據(jù)往往是動態(tài)的,例如用戶歌曲情感趨勢、購物傾向、網(wǎng)絡(luò)輿論等。這些數(shù)據(jù)可能在數(shù)據(jù)處理階段實現(xiàn)矯正,但仍然需要模型監(jiān)控階段有傾向性介入,實現(xiàn)數(shù)據(jù)糾正或進行重訓(xùn)練。對于重訓(xùn)練來說,需要綜合考慮模型效果變化,數(shù)據(jù)更新頻率,訓(xùn)練開銷,部署開銷,重新訓(xùn)練的精度提升幅度,重訓(xùn)練的觸發(fā)機制等。除此之外,也可拋棄了原始的靜態(tài)訓(xùn)練并支持模型參數(shù)的在線實時更新,實現(xiàn)對模型的調(diào)整與優(yōu)化。
2.7 其他
2.7.1 日志系統(tǒng)
作為軟件開發(fā)的一部分,完備的日志系統(tǒng)能夠記錄異常信息、操作規(guī)范等。
2.7.2 可視化模塊
可視化其實在各個行業(yè)中應(yīng)用非常廣泛,與機器學(xué)習(xí)最為相關(guān)的是VIS4AI,即用可視化的手段解釋AI中的黑匣子或幫助AI的開發(fā)探索。在數(shù)據(jù)處理階段,可視化能夠通過圖表的形式呈現(xiàn)數(shù)據(jù)的分布、異常的信息、特征的維度等;在模型構(gòu)架階段,可視化能夠輔助用戶構(gòu)建模型(例如阿里PAI平臺中交互式創(chuàng)建模型)、實現(xiàn)AI的可解釋性(幫助理解每個layer、特征及訓(xùn)練參數(shù));在模型驗證,可視化同樣可通過圖表形式呈現(xiàn)各類評估指標(biāo);在模型監(jiān)控階段,可視化能夠幫助實現(xiàn)歷史版本追蹤、模型質(zhì)量監(jiān)控等。
2.7.3 版本控制
傳統(tǒng)的Devlop中,只需要對代碼、文檔進行簡單的版本控制。機器學(xué)習(xí)平臺的實際需求擴大了版本控制的范圍。數(shù)據(jù)、模型、實驗、配置等是機器學(xué)習(xí)平臺中的重要維護對象,通常需要健壯穩(wěn)定的版本控制系統(tǒng)。
以實驗為例,在開發(fā)/使用過程中,實驗的歷史記錄也是也是相當(dāng)重要的。每個實驗可能有許多影響結(jié)果的各個組件,例如硬件(GPU)、平臺(操作系統(tǒng)和依賴的軟件版本)、源代碼(模型訓(xùn)練和預(yù)處理)、模型參數(shù)、訓(xùn)練數(shù)據(jù)(輸入數(shù)據(jù)和輸出數(shù)據(jù))以及模型狀態(tài)、訓(xùn)練模型的版本等。在模型確定的過程中,通常需要執(zhí)行并記錄大量的實驗(例如自動化超參搜索),這類實驗的所有信息都應(yīng)該進行詳細的版本控制。
3. 已有的機器學(xué)習(xí)平臺
3.1 開源平臺
現(xiàn)有一些開源機器學(xué)習(xí)平臺,能夠在一定程度上實現(xiàn)機器學(xué)習(xí)項目部署的靈活性和便捷性。
Kubeflow
文檔比較豐富。
MLFlow
機器學(xué)習(xí)生命周期管理平臺,主要提供實驗跟蹤、項目打包、模型部署,簡化機器學(xué)習(xí)應(yīng)用程序的訓(xùn)練、部署和管理。
Data Version Control (DVC)
采用類似于git的管理機制,實現(xiàn)對數(shù)據(jù)集、ML實驗、模型版本等控制。
Flyte
文檔簡陋,部署依賴于環(huán)境,具有一定門檻;
將所有模塊拆分為Task,將Task組裝成Workflow;
支持簡單的workflow可視化;
UI交互式管理界面;
具有強大的版本管理功能;
用于跟蹤和維護以及自動化 Kubernetes原生機器學(xué)習(xí)流水線;
通過跟蹤模型的更改、版本控制、將模型及依賴項通過容器化操作實現(xiàn)可重用性機器學(xué)習(xí);
支持Python、R、Scala。
3.2 非開源平臺
開源的平臺大多從軟件工程角度上維護機器學(xué)習(xí)平臺的開發(fā),例如系統(tǒng)維護、版本控制、打包部署等。然而,它們僅僅提供了腳手架,大量機器學(xué)習(xí)平臺所需要的功能仍需要從0開發(fā)。目前一些機器學(xué)習(xí)平臺逐漸商用化,例如Google Vertex AI、阿里PAI等。
Google Vertex AI
Vertex AI由2021年創(chuàng)建,旨在允許跨技能水平的開發(fā)人員和數(shù)據(jù)科學(xué)家快速訓(xùn)練模型,并提供管理模型整個生命周期等功能。該平臺著重采用了Google的Auto ML自動化搜索超參數(shù)。功能強大,具有一系列數(shù)據(jù)導(dǎo)入、數(shù)據(jù)處理、模型自動化選擇、模型部署、版本控制、可視化界面等常見功能。
優(yōu)點:
- 集成式開發(fā)環(huán)境:支持目前所有的機器學(xué)習(xí)python開發(fā)庫
- 可視化交互式數(shù)據(jù)處理:包括數(shù)據(jù)預(yù)處理、訓(xùn)練模型選擇、參數(shù)選擇等。
- 多樣性數(shù)據(jù)導(dǎo)入,例如SQL、csv中的dataset
- 版本控制
- 有桌面端軟件
缺點:
- 不易上手,具有一定門檻
- 有待補充
阿里PAI
PAI起初是服務(wù)于阿里巴巴集團內(nèi)部(例如淘寶、支付寶和高德)的機器學(xué)習(xí)平臺,致力于讓公司內(nèi)部開發(fā)者更高效、簡潔、標(biāo)準(zhǔn)地使用AI技術(shù)。隨著PAI的不斷發(fā)展,2018年P(guān)AI平臺正式商業(yè)化,目前已經(jīng)積累了數(shù)萬的企業(yè)客戶和個人開發(fā)者,是中國領(lǐng)先的云端機器學(xué)習(xí)平臺之一。
個人感覺阿里PAI的突出功能是可視化,以可視化為輔導(dǎo),創(chuàng)建數(shù)據(jù)標(biāo)注、處理、模型構(gòu)建等一系列流水線任務(wù)。PAI在模型測試、驗證、維護方面還具有一定的上升空間。
流水線1:傳統(tǒng)PAI實踐
流水線2:迅速部署上線的PAI實踐
PAI將機器學(xué)習(xí)任務(wù)拆分開,分別維護如下幾個模塊:
-
智能標(biāo)注(iTAG):該模塊支持圖像、文本、視頻、音頻等多種數(shù)據(jù)類型的標(biāo)注以及多模態(tài)的混合標(biāo)注。該模塊覆蓋面相對較廣,但缺乏深度用戶使用的功能。例如圖像標(biāo)注功能中只能實現(xiàn)簡單的規(guī)則多邊形,無法實現(xiàn)類似畫刷、蒙版等高階標(biāo)注任務(wù)。
-
可視化建模(PAI-Designer):支持大規(guī)模分布式的傳統(tǒng)機器學(xué)習(xí)、深度學(xué)習(xí)、強化學(xué)習(xí)訓(xùn)練,支持流批一體訓(xùn)練,該子模塊封裝了上百種機器學(xué)習(xí)算法,可以拖拽式建模、自動調(diào)參,從而無編程玩轉(zhuǎn)人工智能。該部分是PAI面向商用化用戶的核心功能,封裝大量機器學(xué)習(xí)算法并提供交互式拖拽定制功能。這種交互式拖拽的功能實現(xiàn)了無代碼式簡單的機器學(xué)習(xí)流水線布置工作,模塊間耦合度低,容易維護,類似于voreen,inviwo框架。
值得注意的是,DSG也提供了Auto ML的自助式機器學(xué)習(xí)組件,提供自動化調(diào)參及特征工程。在該功能完備的情況下,PAI的優(yōu)勢略比Vertex AI明顯。
但是,組件化的缺點也比較明顯,即無法自主式實現(xiàn)復(fù)雜的模型,且目前缺乏一些較大型深度學(xué)習(xí)模型的組件,例如目標(biāo)跟蹤、視頻處理、目標(biāo)分割等。基于此,交互式建模方式可稱為替代品。 -
交互式建模(PAI-DSW):PAI-DSW集成了JupyterLab,并以插件化的形式進行深度定制化開發(fā)。無需任何運維配置,即可進行Notebook編寫、調(diào)試及運行Python代碼。該模塊彌補了可視化建模中無法深度定制的缺點,并且能夠靈活調(diào)用遠程硬件資源,自定義實現(xiàn)數(shù)據(jù)導(dǎo)入、數(shù)據(jù)處理、模型構(gòu)建、模型部署等操作。除此之外,該模塊提供一些示例工程、官方鏡像等,確實比較方便。
-
模型在線服務(wù)(PAI-EAS):PAI針對在線推理場景提供了在線預(yù)測服務(wù),支持基于異構(gòu)硬件(CPU和GPU)的模型加載和數(shù)據(jù)請求的實時響應(yīng),能夠快速部署為RESTful API,實現(xiàn)模型在線服務(wù)。
-
推理優(yōu)化(PAI-Blade): PAI專門提供了模型的通用推理優(yōu)化工具,融合了計算圖優(yōu)化、TensorRT/oneDNN等vendor優(yōu)化庫、AI編譯優(yōu)化、Blade手工優(yōu)化算子庫、Blade混合精度及Blade Auto-Compression等多種優(yōu)化技術(shù),會先對模型進行分析,再對其部分或全部應(yīng)用優(yōu)化技術(shù)。該工具可以直接通過接口調(diào)用,不需修改模型代碼。Vertex AI中缺乏該功能。
總結(jié)
機器學(xué)習(xí)平臺是一種基于軟件工程與機器學(xué)習(xí)交叉的新興起方向,其每個功能都需要大量的探索和實踐。構(gòu)建機器學(xué)習(xí)平臺涵蓋了大量的工程工作,目前的需求及存在問題也非常明顯。機器學(xué)習(xí)平臺方興未艾,無論是面向集團內(nèi)部還是面向商用,都具有其獨特的用途和技術(shù)。
經(jīng)調(diào)研,機器學(xué)習(xí)平臺在各個開發(fā)階段中均具有非常大的挑戰(zhàn),簡單總結(jié)如下:
- 數(shù)據(jù)收集:數(shù)據(jù)分散存儲、數(shù)據(jù)格式多樣性;
- 數(shù)據(jù)處理:數(shù)據(jù)缺失、數(shù)據(jù)簡化、標(biāo)注等;
- 模型構(gòu)建:模型選擇、訓(xùn)練計算資源分配、超參數(shù)自動化搜索;
- 模型驗證:測試;
- 模型部署:機器學(xué)習(xí)平臺是一個更加復(fù)雜的軟件系統(tǒng),必須隨著時間的推移進行維護。在工程中有一個單獨的學(xué)科,稱為DevOps,重點是成功維護和支持現(xiàn)有生產(chǎn)系統(tǒng)所需的技術(shù)和工具,將其部署到機器學(xué)習(xí)平臺上事半功倍。模型部署階段,整合、監(jiān)控、更新等步驟均存在大量的工程性問題需要解決。
個人作為機器學(xué)習(xí)平臺的初學(xué)者,暫時缺乏更深層次的認知。文獻[8]和[9]詳細敘述了機器學(xué)習(xí)平臺開發(fā)的歷史進程及尚存在的技術(shù)難點,這里簡單展望一些機器學(xué)習(xí)平臺可錦上添花的部分功能:
- 模型搭建的可視化
考慮到無代碼式構(gòu)建,一些工作(如阿里PAI)直接將模型或算法封裝成常量接口,這在一定程度上降低了用戶的可操作空間。一直以來,深度學(xué)習(xí)模型相當(dāng)于黑匣子,從代碼層面上也無法理解其模型架構(gòu)。如今已有一些工作實現(xiàn)將模型架構(gòu)轉(zhuǎn)換為可視化圖表,方便用戶理解其架構(gòu)原理(例如TensorBoard)。該功能可提供對模型的直觀理解。另外,該過程的逆置,類似于交互式搭建機器學(xué)習(xí)流水線(阿里PAI),能夠為無編程經(jīng)驗的用戶修改或設(shè)計模型并驗證合理性提供幫助。 - 其他
參考資料
[1] [博客]MLOps簡介
[2] [課程]Software Engineering for AI-Enabled Systems (SE4AI)
[3] [課程]MLOps (Machine Learning Operations) Fundamentals
[4] [博客]機器學(xué)習(xí)開源平臺1
[5] [博客]機器學(xué)習(xí)開源平臺2
[6] [博客]機器學(xué)習(xí)云平臺應(yīng)具備哪些功能?
[7] [博客]為什么我們需要機器學(xué)習(xí)平臺?
[8] [論文]Giray, G?rkem. “A software engineering perspective on engineering machine learning systems: State of the art and challenges.” Journal of Systems and Software 180 (2021): 111031.
[9] [論文]Paleyes, Andrei, Raoul-Gabriel Urma, and Neil D. Lawrence. “Challenges in deploying machine learning: a survey of case studies.” arXiv preprint arXiv:2011.09926 (2020).
總結(jié)
以上是生活随笔為你收集整理的机器学习平台的简单调研的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 神奇的css3(2)动画
- 下一篇: CodeForces 903D Alm