成功MLOps具有的五大共同特征
譯文譯者 | 李睿
審校 | 重樓
51CTO讀者成長計劃社群招募,咨詢小助手(微信號:TTalkxiaozhuli)
盡管人們對應用機器學習的興趣越來越大,但企業在將機器學習集成到現實應用方面仍然面臨著巨大的挑戰。大多數的機器學習項目或者在完成之前被放棄,或者無法兌現承諾。
應用機器學習是一個年輕且不斷發展的領域。機器學習開發與運維(MLOps)是一個用于部署和維護機器學習模型的新興實踐領域,為機器學習管道提供了許多工具和平臺。然而,目前仍有許多工作要做。
加州大學伯克利分校的科學家最近發表的一份研究論文,揭示了在不同組織中運行機器學習的最佳實踐。這篇論文基于對不同行業機器學習工程師的調查,包含了成功部署和維護機器學習模型的重要經驗,并為未來MLOps工具的開發提供了指導。
1、MLOps管道
MLOps管道是一個由四個任務組成的循環:首先,機器學習團隊必須收集、清理和存儲數據來訓練模型。如果企業正在構建一個有監督的機器學習模型,他們必須人工或使用半自動工具標記數據。
然后,機器學習團隊必須進行特性工程和模型實驗。在這個階段,機器學習工程師會嘗試采用不同的機器學習算法,并創建與這些模型對應的特征。例如,深度神經網絡可能只需要很少或不需要特征工程,但經典的機器學習模型(如線性回歸或支持向量機)可能需要額外的工程工作,例如使用降維來選擇相關特征的最小集。
第三步是評估和部署。機器學習工程師根據不同的機器學習模型在指定的驗證數據集上的性能來比較它們。在應用機器學習管道中,部署通常以分階段的方式完成:首先將模型推出給用戶子集,然后根據當前的生產模型進行評估。如果運行良好,就將其擴展到更多用戶,并再次進行測試,以此類推。
最后,機器學習管道需要持續的監控和響應。機器學習團隊必須持續監控模型在不同用戶和數據子集上的性能,并尋找漂移、退化和其他問題的跡象。與此同時,工程師們需要工具來從用戶與模型的交互中收集新的數據。一旦機器學習模型的性能下降到某個水平以下,他們就需要重新啟動管道,并收集數據集來訓練、驗證和部署模型的新版本。
2、MLOps的“3v”
基于對機器學習工程師的采訪,加州大學伯克利分校的科學家定義了MLOps管道成功的三個標準:速度(Velocity)、驗證(Validation)和版本控制(Versioning)。他們稱之為MLOps的“3v”。
速度是指機器學習團隊迭代的速度。開發機器學習模型是一個科學的過程,它需要不斷的觀察、假設、發展和測試。機器學習團隊開發、訓練和測試新的機器學習原型的速度越快,就能越快地達到最佳解決方案。該論文稱,“機器學習工程師將他們的生產力歸功于優先考慮更高的實驗速度的開發環境和允許他們快速測試假設的調試環境?!?/p>
驗證是機器學習團隊在模型中發現錯誤的速度。當在實際應用程序中使用機器學習時,企業希望最好在用戶接觸到錯誤之前盡早發現并修復錯誤。
最后,版本控制是保持機器學習模型的多個版本的能力。有時,在驗證數據集上工作良好的新機器學習模型最終在生產中表現較差。在這種情況下,機器學習團隊必須能夠快速切換回老舊模型,直到他們能夠調試和更新新模型。
基于這些關鍵原則以及對機器學習工程師的采訪,論文的作者為成功的MLOps管道提供了一些實際的見解。
3、高速迭代
與傳統的軟件開發相比,機器學習工程更具實驗性。因此,相當一部分機器學習模型將無法投入生產是很自然的。
該論文的作者寫道:“重要的是確保想法可以快速原型化和驗證,這樣不好的想法就可以立即被剔除。”
在他們的研究中,記錄了一些可以幫助建立高速機器學習管道的有趣策略。一個例子是跨團隊合作,數據科學家和主題專家共同合作,選擇最好的假設、特征和模型。這有助于在分配開發和計算資源之前,在構思階段拋棄不可行的假設。
在某些情況下,迭代數據比使用不同的機器學習算法和模型配置提供了更快的結果。
一些團隊將他們的機器學習管道設置為在早期階段扼殺收益最小的想法,以避免浪費未來的時間,并專注于在部署的早期階段獲得最大性能收益的想法。他們通過設置沙盒(通常是Jupyter Notebook)來實現這一點,沙盒可以快速對他們的想法進行壓力測試。
另一種有趣的方法是最小化代碼更改。為了做到這一點,機器學習工程師開發他們的機器學習模塊,通過修改配置文件而不是源代碼來切換模型。通過這種方式,他們可以創建多個版本的配置文件,并通過相同的代碼快速驗證它們。
因為機器學習實驗需要考慮很多因素才能得出正確的結果。研究人員在論文中寫道,設置隨機種子,訪問相同版本的代碼庫,以及數據約束工程師只進行配置更改,這些都可以減少錯誤的數量。
4、動態驗證
機器學習模型必須不斷更新,以跟上環境數據、客戶需求和業務的變化。為了實現這一目標,企業需要能夠適應不斷變化的世界的評估過程,避免重復失敗,并防止糟糕的機器學習模型投入生產環境。
與機器學習工程師面談的重要收獲之一是定期更新驗證數據集。這與學術界的標準實踐有所不同,后者是針對固定的驗證數據集測試模型。研究人員寫道,“動態驗證集有兩個目標:(1)顯而易見的目標是確保驗證集盡可能多地反映實時數據,并考慮到關于問題的新知識和總體數據分布的變化;(2)另一個更微妙的目標是解決了子群體可能經歷的局部變化(例如,特定標簽的準確性較低)?!?/p>
一個有趣的策略是使用“影子階段”,在這個階段中,候選機器學習模型被集成到生產系統中,但其預測結果不會向用戶展示。這使得機器學習工程師能夠根據實時數據動態驗證他們的模型,而不會給業務帶來風險。需要注意的是,帶有用戶反饋循環的應用程序(例如,推薦系統)不支持影子部署。
最后成功的MLOps驗證的一個重要部分是更新驗證指標以反映正確的業務目標。隨著產品的發展,它們的關鍵性能指標和增長指標也會發生變化。例如,在某一時刻,企業的目標可能是增加活躍用戶的數量,而不考慮他們產生的收入。在之后的階段,同一家公司可能想要增加付費用戶的份額,部署的機器學習模型必須基于它們對這些關鍵指標的貢獻進行評估。這需要機器學習、產品和業務團隊之間的密切協調。
5、良好的軟件工程
根據加州大學伯克利分校研究團隊采訪的機器學習工程師的經驗,健壯的MLOps需要健全的軟件工程和DevOps實踐。
例如,定期對機器學習模型進行再訓練可以幫助團隊保持他們的機器學習模型是最新自版本并避免漂移。這需要軟件和數據工程團隊建立正確的管道,以持續收集和標記新數據。對這種實踐的補充是擁有一個健壯的版本控制系統,該系統跟蹤機器學習模型的不同版本及其性能指標。這允許工程師設置自動化或半自動化流程,以便在生產模型的性能下降到某個閾值以下時恢復到舊版本。
在一些應用程序中,軟件工程師不得不故意添加一層經典的基于規則的啟發式來穩定行為或機器學習模型。這在許多應用程序中非常重要,在這些應用程序中,機器學習模型可能會根據輸入向量特征中的錯誤相關性進行學習和行為。研究人員寫道:“現代模型驅動的機器學習和傳統基于規則的人工智能的結合表明,除了管理學習模型之外,還需要管理過濾器以及過濾器的版本?!?/p>
最后,成功的機器學習項目的一個共同主題是對簡單性的偏好。雖然學術界的研究往往專注于突破最先進技術的極限,但在應用機器學習中,使用盡可能簡單的模型是一種制勝策略。更簡單的模型訓練和運行成本更低,而且它們通常更易于解釋。在一個有趣的案例中,機器學習工程師報告說他們開發了一種混合方法,其中他們使用神經網絡創建一個特征嵌入層,然后將其用作幾個簡單分類器模型的輸入。
6、創建更好的MLOps工具
這篇論文是關于在現實應用中實現機器學習的挑戰和教訓的有趣研究。研究人員得出結論,成功的MLOps實踐圍繞著“更高速度,盡早地驗證,并維護模型的多個版本以減少生產停機時間”這三個目標進行構建。
因此,構建MLOps堆棧時應該以解決這三個v為目標。
研究人員寫道:“MLOps工具構建者可能希望在其產品的開發速度、盡早驗證或版本控制方面優先考慮更好的體驗。”
原文鏈接:https://bdtechtalks.com/2022/12/12/successful-mlops/