Leo Yeh's Blog

模型部署 Azure (1)

教學目標

初步了解有關 Azure 進行模型部署的基本概念。

重點概念

首先 Microsoft 在 2019 年所發佈的這篇「Software Engineering for Machine Learning: A Case Study」研究論文中提到機器學習工作流程主要有九個階段,其中有些階段是與資料相關,像是資料收集、資料清理和資料標籤,有些是與模型相關,像是模型需求,特徵工程,模型訓練,模型評估,模型部署和模型監控,此外工作流程中有許多反饋循環,並且模型評估和監控可以循環回任何階段。常見的機器學習工作流程已經在各行業中有許多標準,像是 CRISP-DM,其在資料科學和資料的上下文中定義具有共通性,儘管存在細微差別,但這些仍然存在共同的過程和以資料為中心的本質。而不同階段之間的多個反饋循環,在模型需求階段,模型設計師需要決定哪個機器學習模型和功能是可行的,並且對於給定的現有產品或對於給定的現有產品可能有用,最重要的是在這個階段我們也會做出決定什麼類型的模型最適合所給定的問題。在資料收集階段中,團隊將會尋找和整合可用的資料集,像是內部、開源或外部收集,資料清理階段主要涉及從中刪除不準確或雜訊的資料,資料標籤階段則為每筆記錄分配適當的標籤,大多數監督學習技術皆需要標籤才能夠訓練模型,特徵工程階段則是指執行提取和選擇機器學習的資訊功能的所有活動,對於某些模型在此階段就不是那麼明確,因為經常與下一個階段融為一體,像是卷積神經網路。在模型訓練階段則是針對模型需求、資料收集、資料清理、資料標籤和特徵工程的輸出對應至模型的輸入進行訓練產生模型,模型評估階段則主要是評估輸出模型,並且使用預先定義的指標測試或保護資料集進行人工評估之後,才會產生推理程式碼進行模型部署階段,以及在實際執行期間持續進行模型監控階段。

接著機器學習工作流程是高度非線性,並且包含許多反饋循環,像是如果工程師注意到訓練資料之間存在的分佈和現實世界中的資料是一樣時,則會需要回去收集更多有代表性的資料,並且重新執行工作流程。同樣也可能會重新審查建模的選擇。此外反饋循環不僅在敏捷性軟體開發中是常見的工作流程,更在機器學習的工作流程中將會是非常棒的應用,因為最佳模型需要不斷進行實驗,事實上工程師進行機器學習的日常工作涉及對所選模型的頻繁迭代,超參數和資料集細化,這些工作流程將能夠成為綜合的系統,其中包括更複雜的內容,並且將多個複雜的機器學習元件在一起進行意想不到的互動方式,至於建立應用程式和平台與訓練和部署機器學習模型主要有三個基本的差異,分別為:

  1. 機器學習模型與資料非常相關,所以在於資料來源、資料管理和版本控管方面相對更複雜。
  2. 機器學習模型比起軟體工程的模組更難以維護嚴格的模組之間的界限,導致在訓練期間造成影響。
  3. 機器學習模型需求需要可客製和可擴展,所以團隊不僅擁有軟件工程技能,並且需要有足夠深入的機器學習知識,以利從頭開始建立、評估和調整模型。

當我們確定了機器學習系統架構和需求的各個方面,需要在此期間加以考慮系統設計,避免日後的技術債,其中一些方面包括隱藏的模型反饋循環、模型元件整合、模型品質狀態、現實世界與評估資料集之間對應不適當、… 等問題,同時最近討論了基於機器學習軟體對風險和安全性有何影響,在過去的五年裡產業界已經多次努力使這一過程自動化,透過建立框架和環境來支持機器學習的工作流程及其實驗性質。此時當建立大規模機器學習應用程式和平台,我們需要有在軟體工程領域有關機器學習的最佳實務,主要有七大項目,分別為:

  1. 端到端管線支援。
  2. 資料可用性、收集、清理和管理。
  3. 教育和培訓。
  4. 模型調整和解釋。
  5. 模型評估和部署。
  6. 法規遵循。
  7. 各種感知服務。

其中我們針對第一項目端到端管線支援更進一步深入了解,所謂端到端管線支援主要指隨著機器學習元件變得更加成熟,並且整合至更大的軟體系統時,則需要具有無縫的開發經驗能夠包括所描述的所有不同階段,此外自動化就會變得非常重要,然而為實現此目標,傳統機器學習模型和軟體工程模組相比具有不同的特性,因此軟體元件的整合程度將會具有挑戰,像是發現內在不確定性的變化或錯誤,以資料驅動的學習演算法和復雜隱藏反饋循環將引起的元件彼此的影響,即使在特定階段,將也可能會發生重大的影響,以及由於更多的迭代實驗是機器學習開發的本質,因此統一和自動化軟體將會有效減少日常工作流程所花費的時間,並且促進該領域的發展,此時企業需要利用內部基礎設施,或者建立專門自動化的機器學習管線支援,主要支援模型需求、訓練、評估、監控和部署,並且提供儀表板資訊即時顯示對於模型生命周期有價值的資訊,有助於團隊在發生問題時的第一時間進行的有效模型管理,避免造成重大的影響。

再來 Microsoft 針對模型管理則是提出使用 Azure Machine Learning 服務來管理模型的生命週期,並且使用機器學習服務作業 (MLOps) 的方法,更進一步改善機器學習解決方案的品質和一致性,並且提供從任何地方部署機器學習專案、監視機器學習應用程式的操作和相關問題、擷取建立機器學習生命週期的端對端稽核記錄所需的資料以及自動化使用 Azure Machine Learning 和 Azure DevOps 的端對端 ML 生命週期持續更新模型和測試新的模型,以利用於其它應用程式整合應用。其中從任何地方部署機器學習專案主要會先將訓練程式轉換成可重現的管線之後,註冊和追蹤機器學習模型,已註冊的模型是透過名稱和版本來識別,每次註冊與現有模型名稱相同的模型時,登錄都會遞加版本,並且能夠使用程式碼解析判斷要部署模型時使用適當的 CPU 和記憶體設定,以及使用所提供的資料進行模型評估,此外若轉換模型為 ONNX 格式的模型將能夠改善效能,平均而言將能夠產生二倍的效能提升,當完成模型評估之後會將最佳模型部署到生產環境,它會封裝成 Docker 容器映像檔,在大部分情況下建立的容器映像檔會自動在背景中進行模型部署。

最後 Microsoft 更有提供有關模型管理生命週期的解決方案的參考架構主要說明如何實作持續整合和交付 (CI / CD) 以及使用 Azure DevOps 和 Azure Machine Learning 的應用程式的重新訓練機器學習模型的管線。此解決方案建主要基於建立管線、重新訓練管線和發行管線。所謂建立管線主要當每次程式碼簽入,則取得觸發持續整合的管線,並且會進行單元測試和測試資料,所謂重新訓練管線會協調以非同步方式重新訓練模型、評估模型和註冊模型,所謂發行管線主要會執行評分的映像檔,並且安全地跨不同環境進行容器執行環境的部署,以及進行簡單的 API 測試可確保成功部署的容器映像檔,更進一步能夠將容器映像檔部署至正式環境的容器管理平台 Azure Kubernetes Service ,以利提供高效能、可擴展性和高可用性的評分服務。

相關資源

⬅️ Go back