本文說明許多使用 機器學習 和計算叢集的模型架構。 它針對需要複雜設定的情況提供絕佳的多功能性。
隨附文章: 使用 Spark 大規模在 Azure 中使用許多模型機器學習服務,會在 Azure Databricks 或 Azure Synapse Analytics 中使用 Apache Spark。
架構
下載此架構的 Visio 檔案。
工作流程
數據擷取:
- Azure Data Factory 會從源資料庫提取數據,並將其複製到 Azure Data Lake Storage。
- 然後,數據會以表格式數據集的形式儲存在Machine Learning資料存放區中。
Model-Training 管線:
-
準備數據:
- 定型管線會從數據存放區提取數據,並視需要進一步轉換數據。
- 數據會分組為數據集來定型模型。
-
定型模型:
- 管線會訓練數據準備期間所建立之所有數據集的模型。
- 它會使用
ParallelRunStep
類別來平行定型多個模型。 - 定型之後,管線會在Machine Learning中註冊模型及其測試計量。
-
準備數據:
Model-Promotion 管線:
-
評估模型:
- 升級管線會先評估定型的模型,再將其移至生產環境。
- DevOps 管線會套用商業規則來判斷模型是否符合部署準則(例如,檢查測試數據的正確性超過 80%)。
-
快取器模型:
- 升級管線會將合格的模型註冊到生產Machine Learning工作區。
-
評估模型:
模型 Batch-Scoring 管線:
-
準備數據:
- 批次評分管線會從數據存放區提取數據,並視需要進一步轉換每個檔案。
- 數據會分組為數據集以進行評分。
-
評分模型:
- 管線會使用
ParallelRunStep
類別平行評分多個數據集。 - 它會藉由搜尋模型卷標來識別Machine Learning 中每個數據集的適當模型。
- 模型會下載並用來為數據集評分。
-
DataTransferStep
類別可用來將結果寫回 Azure Data Lake。 - 然後,預測會從 Azure Data Lake 傳遞至 Synapse SQL 以提供服務。
- 管線會使用
-
準備數據:
Real-Time 評分:
- 受控在線端點可用來提供即時評分。
- 由於大量模型,因此會視需要載入它們,而不是預先載入。
結果:
- 預測: 批次評分管線會將預測儲存至 Synapse SQL。
- 計量: Power BI 會連線到模型預測,以擷取和匯總呈現結果。
元件
Azure Data Factory 是雲端式數據整合服務,可讓您建立數據驅動工作流程,以協調及自動化數據移動和轉換。 在此架構中,Azure Data Factory 可用來將企業數據和第三方元數據內嵌至 Azure Data Lake Storage。
Azure 串流分析 是一項即時分析和複雜的事件處理服務,其設計目的是分析和處理大量快速串流數據。 在此架構中,Azure 串流分析可能會用於即時數據處理,不過工作流程中並未明確顯示。
Azure Machine Learning 是企業級機器學習服務,可快速建置和部署模型。 它為使用者提供所有技能層級的工具,例如低程式代碼設計工具、自動化 ML(AutoML),以及支援各種 IDE 的託管 Jupyter Notebook 環境。 在此架構中,Azure Machine Learning 可用來管理機器學習模型的生命週期,包括定型、評估、部署及協調管線,例如定型、升階和評分。
受控在線端點 是用於即時評分的 Azure Machine Learning 功能。 在此架構中,它會視需要載入機器學習模型,提供可調整且安全的方法來提供近乎即時的預測。
ParallelRunStep 是 Azure Machine Learning 管線的元件,可用來有效率地執行平行作業。 它可同時啟用可調整的批處理執行,例如定型或評分許多模型。 在此架構中,
ParallelRunStep
用於模型定型和批次評分管線,以平行方式定型或評分多個數據集或模型,大幅減少這些作業的運行時間。Azure Data Lake Storage 是可大規模調整且安全的儲存服務,適用於高效能分析工作負載。 在此架構中,Azure Data Lake Storage 可作為原始和已轉換數據集的主要儲存層,以及儲存評分管線的結果。
Azure Synapse Analytics 是一種分析服務,可將資料整合、企業資料倉儲和巨量資料分析整合在一起。 此架構會用於儲存批次評分結果,以便有效率地查詢和擷取預測以進行報告或分析。 Synapse SQL 特別用來為下游應用程式提供預測,並讓 Power BI 等視覺效果工具存取匯總的結果。
Azure SQL Database 是完全受控的關係資料庫即服務。 在此架構中,Azure SQL Database 可用來儲存結構化數據,這些數據可能會查詢或分析為數據管線的一部分。
Azure DevOps 是一組開發人員服務,可提供完整的應用程式和基礎結構生命週期管理。 其中包含工作追蹤、原始檔控制、建置和 CI/CD、套件管理和測試解決方案的工具。 在此架構中,Azure DevOps 可用來管理 CI/CD 管線,以將模型升級、測試和部署自動化至生產環境。
Microsoft Power BI 是軟體服務、應用程式和連接器的集合,這些元件可共同運作並將不相關的資料來源轉換成一致、融入視覺及互動的深入解析。 在此架構中,Power BI 會連線到 Synapse SQL,以透過互動式儀錶板擷取和呈現預測和匯總計量。
替代項目
- 源數據可以來自任何資料庫。
- 您可以使用 Azure Kubernetes Service (AKS) 進行即時推斷,而不是受控在線端點。 AKS 允許部署容器化模型,並提供更多部署控制權,讓模型的動態載入處理傳入要求,而不需要耗盡資源。
案例詳細資料
許多機器學習問題對於單一機器學習模型而言太複雜,無法解決。 無論是預測每個商店每個項目的銷售額,還是將數百個油井的維護模型化,每個實例都有模型可能會改善許多機器學習問題的結果。 這種 許多模型 模式在各種不同的產業中很常見,而且有許多真實世界的使用案例。 使用 Azure 機器學習 時,端對端許多模型管線可以包含模型定型、批次推斷部署和即時部署。
許多模型解決方案在定型和評分期間,每個模型都需要不同的數據集。 例如,如果工作是預測每個商店每個項目的銷售額,則每個數據集都會針對唯一的專案存放區組合。
潛在使用案例
- 零售: 雜貨店連鎖店需要為每個商店和專案建立個別的收入預測模型,每個商店總計超過1,000個模型。
- 供應鏈: 針對每個倉儲和產品群組,配送公司需要優化庫存。
- 餐館: 擁有數千家專營權的連鎖店需要預測每個店的需求。
考量
這些考量能實作 Azure Well-Architected Framework 的支柱,其為一組指導原則,可以用來改善工作負載的品質。 如需更多資訊,請參閱 Microsoft Azure 結構完善的架構。
- 數據分割 分割數據是實作許多模型模式的關鍵。 如果您想要每個存放區一個模型,數據集會包含一個存放區的所有數據,而且有與存放區一樣多的數據集。 如果您想要依市集建立產品模型,每個產品與市集組合都會有數據集。 視源數據格式而定,可能很容易分割數據,或可能需要大量數據洗牌和轉換。 Spark 和 Synapse SQL 非常適用於這類工作,而 Python pandas 則不會,因為它只會在一個節點和進程上執行。
- 模型管理: 定型和評分管線會識別並叫用每個數據集的正確模型。 若要這樣做,他們會計算描述數據集特徵的標記,然後使用標記來尋找比對模型。 標記會識別數據分割索引鍵和模型版本,也可能提供其他資訊。
-
選擇正確的架構:
- 當您的定型管線具有複雜的數據轉換和群組需求時,Spark 就適合使用。 它提供彈性的分割和分組技術,以依特性的組合來分組數據,例如產品存放區或位置產品。 結果可以放在Spark DataFrame中,以供後續步驟使用。
- 當您的機器學習定型和評分演算法相當簡單時,您可以使用scikit-learn 之類的連結庫來分割數據。 在這種情況下,您可能不需要 Spark,因此您可以避免安裝 Azure Synapse 或 Azure Databricks 時可能發生的複雜度。
- 建立定型數據集時,例如,它們位於個別的檔案或個別的數據列或數據行中,您不需要Spark來進行複雜的數據轉換。
- 機器學習 和計算叢集解決方案針對需要複雜設定的情況,提供絕佳的多功能性。 例如,您可以使用自定義 Docker 容器,或下載檔案,或下載預先定型的模型。 計算機視覺和自然語言處理 (NLP) 深度學習是可能需要這種多功能性的應用程式範例。
- 個別的模型存放庫: 若要保護已部署的模型,請考慮將它們儲存在定型和測試管線未觸及的自己的存放庫中。
- ParallelRunStep 類別: Python ParallelRunStep 類別 是執行許多模型定型和推斷的強大選項。 它可以以各種方式分割您的數據,然後將機器學習腳本平行套用至數據分割的元素。 如同其他類型的 機器學習 定型,您可以指定具有 Python 套件索引 (PyPI) 套件存取權的自定義定型環境,或更進階的自定義 Docker 環境,以用於需要超過標準 PyPI 的設定。 有許多 CPU 和 GPU 可供選擇。
- 在線推斷: 如果管線在開始時載入並快取所有模型,模型可能會耗盡容器的記憶體。 因此,即使模型可能會稍微增加延遲,仍會在 run 方法中視需要載入模型。
成本最佳化
成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化的設計檢閱檢查清單。
若要進一步瞭解在 Azure 上執行此案例的成本,請使用 定價計算機。 良好的開始假設如下:
- 服務模型會每天定型,以保持其最新狀態。
- 針對 4000 萬個數據列與 1 萬個存放區和產品群組的數據集,使用布建的叢集進行 Azure Databricks 訓練,該叢集具有 12 個使用Ls16_v2實例的 VM,大約需要 30 分鐘的時間。
- 批次評分與相同數據集大約需要 20 分鐘。
- 您可以使用 機器學習 來部署即時推斷。 根據您的要求磁碟區,選擇適當的 VM 類型和叢集大小。
- AKS 叢集會視需要自動調整,導致每個月有兩個節點平均作用中。
若要查看使用案例的定價差異,請變更變數以符合您預期的數據大小及提供負載需求。 針對較大或較小的定型數據大小,請增加或減少 Azure Databricks 叢集的大小。 若要在模型服務期間處理更多並行使用者,請增加 AKS 叢集大小。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
- James Nguyen | 首席雲端解決方案架構師
下一步
- 設定適用於 Azure Machine Learning 的 Kubernetes 叢集
- 許多模型解決方案加速器 GitHub 存放庫
- ParallelRunStep 類別
- DataTransferStep 類別
- 線上到 Azure 上的記憶體服務
- 什麼是 Azure Synapse Analytics?
- 將模型部署至 Azure Kubernetes Service 叢集