本文說明許多使用 機器學習 和計算叢集的模型架構。 它針對需要複雜設定的情況提供絕佳的多功能性。
隨附文章: 使用 Spark 大規模在 Azure 中使用許多模型機器學習服務,會在 Azure Databricks 或 Azure Synapse Analytics 中使用 Apache Spark。
架構
下載此架構的 Visio 檔案。
工作流程
- 數據擷取: Azure Data Factory 會從源資料庫提取數據,並將其複製到 Azure Data Lake Storage。 然後,它會將它儲存在 機器學習 資料存放區中作為表格式數據集。
- 模型定型管線:
- 準備數據: 定型管線會從數據存放區提取數據,並視需要進一步轉換數據。 它也會將數據分組為數據集來定型模型。
- 定型模型: 管線會為數據準備期間建立的所有數據集定型模型。 它會使用 ParallelRunStep 類別來平行定型多個模型。 定型模型之後,管線會將它註冊到 機器學習 以及測試計量。
- 模型升級管線:
- 評估模型: 升級管線會先評估定型的模型,再將其移至生產環境。 DevOps 管線會套用商業規則,以判斷模型是否符合部署準則。 例如,它可能會檢查測試數據的精確度是否超過80%。
- 註冊模型:升級管線會註冊符合生產 機器學習 工作區資格的模型。
- 模型批次評分管線:
- 準備數據: 批次評分管線會從數據存放區提取數據,並視需要進一步轉換每個檔案。 它也會將數據分組為數據集以進行評分。
- 評分模型: 管線會使用 ParallelRunStep 類別來平行評分多個數據集。 它會藉由搜尋模型卷標來尋找 機器學習 中每個數據集的適當模型。 然後,它會下載模型,並用它來為數據集評分。 它會使用 DataTransferStep 類別將結果寫回 Azure Data Lake,然後將來自 Azure Data Lake 的預測傳遞至 Synapse SQL 以供服務。
- 實時評分: Azure Kubernetes Service (AKS) 可以視需要進行即時評分。 由於大量模型,因此應該視需要載入它們,而不是預先載入。
- 結果:
- 預測: 批次評分管線會將預測儲存至 Synapse SQL。
- 計量: Power BI 會連線到模型預測,以擷取和匯總呈現結果。
元件
- Azure Machine Learning 是企業級機器學習服務,可快速建置和部署模型。 它提供所有技能層級的使用者,具有低程式代碼設計工具、自動化 ML (AutoML),以及支援各種 IDE 的託管 Jupyter Notebook 環境。
- Azure Databricks 是以 Apache Spark 為基礎的雲端式數據工程工具。 它可以處理和轉換大量數據,並使用機器學習模型加以探索。 您可以在 R、Python、Java、Scala 和 Spark SQL 中撰寫作業。
- Azure Synapse Analytics 是一種分析服務,可將資料整合、企業資料倉儲和巨量資料分析整合在一起。
- Synapse SQL 是適用於 T-SQL 的分散式查詢系統,可實現資料倉儲和資料虛擬化案例,並擴充了 T-SQL 以因應串流和機器學習案例。 它同時提供無伺服器和專用資源模型。
- Azure Data Lake Storage 是可大規模調整且安全的儲存服務,適用於高效能分析工作負載。
- Azure Kubernetes Service (AKS) 是完全受控 Kubernetes 服務,可用來部署和管理容器化應用程式。 AKS 會透過將作業額外負荷卸載至 Azure,以簡化在 Azure 中部署受控 AKS 叢集的作業。
- Azure DevOps 是一組開發人員服務,可提供完整的應用程式和基礎結構生命週期管理。 DevOps 包含工作追蹤、原始檔控制、組建和 CI/CD、套件管理和測試解決方案。
- Microsoft Power BI 是軟體服務、應用程式和連接器的集合,這些元件可共同運作並將不相關的資料來源轉換成一致、融入視覺及互動的深入解析。
替代項目
- 源數據可以來自任何資料庫。
- 您可以使用受控在線端點或 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) 深度學習是可能需要這種多功能性的應用程式範例。
- Spark 定型和評分: 當您使用 Spark 架構時,您可以使用 Spark pandas 函式 API 進行平行定型和評分。
- 個別的模型存放庫: 若要保護已部署的模型,請考慮將它們儲存在定型和測試管線未觸及的自己的存放庫中。
- 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 叢集