本文說明許多在 Azure Databricks 或 Azure Synapse Analytics 中使用 Apache Spark 的模型架構。 Spark 是一種功能強大的工具,適用於某些解決方案所需的大型和複雜數據轉換。
注意
針對許多模型應用程式,使用Spark 3.0版和更新版本。 Python 和 pandas 的數據轉換功能和支援比舊版好得多。
隨附文章:使用 Azure 機器學習 大規模建立許多模型機器學習服務,會使用 機器學習 和計算叢集。
架構
下載此架構的 Visio 檔案。
資料流程
- 數據擷取: Azure Data Factory 會從源資料庫提取數據,並將其複製到 Azure Data Lake Storage。
-
模型定型管線:
- 準備數據: 定型管線會從 Data Lake Storage 提取數據,並使用 Spark 將它分組為數據集來定型模型。
- 定型模型: 管線會為數據準備期間建立的所有數據集定型模型。 它會使用 pandas 函式 API 平行定型多個模型。 定型模型之後,管線會將它註冊到 機器學習 以及測試計量。
-
模型升級管線:
- 評估模型: 升級管線會先評估定型的模型,再將其移至生產環境。 DevOps 管線會套用商業規則,以判斷模型是否符合部署準則。 例如,它可能會檢查測試數據的精確度是否超過80%。
- 註冊模型:升級管線會註冊符合生產 機器學習 工作區資格的模型。
-
模型批次評分管線:
- 準備數據: 批次評分管線會從 Data Lake Storage 提取數據,並使用 Spark 將它分組至數據集以進行評分。
- 評分模型: 管線會使用 pandas 函式 API 平行評分多個數據集。 它會藉由搜尋模型卷標來尋找 機器學習 中每個數據集的適當模型。 然後,它會下載模型,並用它來為數據集評分。 它會使用 Spark 連接器來 Synapse SQL 來保留結果。
- 實時評分: Azure Kubernetes Service (AKS) 可以視需要進行即時評分。 由於大量模型,因此應該視需要載入它們,而不是預先載入。
-
結果:
- 預測: 批次評分管線會將預測儲存至 Synapse SQL。
- 計量: Power BI 會連線到模型預測,以擷取和匯總呈現結果。
元件
Azure Machine Learning 是企業級機器學習服務,可快速建置和部署模型。 它提供所有技能層級的使用者,具有低程式代碼設計工具、自動化 ML (AutoML),以及支援各種 IDE 的託管 Jupyter Notebook 環境。 在此架構中,Azure Machine Learning 可用來管理機器學習模型的端對端生命週期,包括定型、評估和部署。
Azure Synapse Analytics 是一種分析服務,可將資料整合、企業資料倉儲和巨量資料分析整合在一起。 在此架構中,Azure Synapse Analytics 可用來儲存模型預測,並啟用報告和視覺效果結果的查詢和分析。
Synapse SQL 是適用於 T-SQL 的分散式查詢系統,可實現資料倉儲和資料虛擬化案例,並擴充了 T-SQL 以因應串流和機器學習案例。 它同時提供無伺服器和專用資源模型。 在此架構中,Synapse SQL 可用來儲存批次評分結果,並啟用有效率的查詢和數據擷取。
Azure Data Lake Storage 是可大規模調整且安全的儲存服務,適用於高效能分析工作負載。 在此架構中,Azure Data Lake Storage 可用來儲存原始和轉換的數據,作為定型和評分管線的輸入。
Azure DevOps 是一組開發人員服務,可提供完整的應用程式和基礎結構生命週期管理。 DevOps 包含工作追蹤、原始檔控制、組建和 CI/CD、套件管理和測試解決方案。 在此架構中,Azure DevOps 可用來管理 CI/CD 管線,以將模型升級和部署至生產環境。
Microsoft Power BI 是軟體服務、應用程式和連接器的集合,這些元件可共同運作並將不相關的資料來源轉換成一致、融入視覺及互動的深入解析。 在此架構中,Power BI 可用來連線到儲存在 Synapse SQL 中的模型預測,並透過互動式儀錶板和報表提供商務見解。
替代項目
- 您可以在 Azure Synapse 中使用 Spark,而不是 Azure Databricks 中的 Spark 來定型和評分模型。
- 源數據可以來自任何資料庫。
- 您可以使用受控在線端點來部署即時推斷。
案例詳細資料
許多機器學習問題對於單一機器學習模型而言太複雜,無法解決。 無論是預測每個商店每個項目的銷售額,還是將數百個油井的維護模型化,每個實例都有模型可能會改善許多機器學習問題的結果。 這個 許多模型 模式在各種不同的產業中非常常見,並適用於許多真實世界的使用案例。 使用 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 進行平行定型和評分。
- 個別的模型存放庫: 若要保護已部署的模型,請考慮將它們儲存在定型和測試管線未觸及的自己的存放庫中。
- 在線推斷: 如果管線在開始時載入並快取所有模型,模型可能會耗盡容器的記憶體。 因此,即使模型可能會稍微增加延遲,仍會在 run 方法中視需要載入模型。
- 定型延展性: 使用Spark,您可以平行定型數十萬個模型。 Spark 會在叢集中的每個 VM 中啟動多個定型程式。 每個核心都可以執行個別的程式。 雖然這表示資源使用率良好,但請務必正確調整叢集的大小,並選擇正確的 SKU,特別是當定型程式昂貴且長時間執行時。
成本最佳化
成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化的設計檢閱檢查清單。
若要進一步瞭解在 Azure 上執行此案例的成本,請使用 定價計算機。 良好的開始假設如下:
- 服務模型會每天定型,以保持其最新狀態。
- 針對 4000 萬個數據列與 1 萬個存放區和產品群組的數據集,使用布建的叢集進行 Azure Databricks 訓練,該叢集具有 12 個使用Ls16_v2實例的 VM,大約需要 30 分鐘的時間。
- 批次評分與相同數據集大約需要 20 分鐘。
- 您可以使用 機器學習 來部署即時推斷。 根據您的要求磁碟區,選擇適當的 VM 類型和叢集大小。
- AKS 叢集會視需要自動調整,導致每個月有兩個節點平均作用中。
若要查看使用案例的定價差異,請變更變數以符合您預期的數據大小及提供負載需求。 針對較大或較小的定型數據大小,請增加或減少 Azure Databricks 叢集的大小。 若要在模型服務期間處理更多並行使用者,請增加 AKS 叢集大小。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
- James Nguyen | 首席雲端解決方案架構師
下一步
- Azure Machine Learning 中的計算目標是什麼?
- 設定適用於 Azure Machine Learning 的 Kubernetes 叢集
- 許多模型解決方案加速器 GitHub 存放庫
- ParallelRunStep 類別
- Pandas 函式 API
- 線上到 Azure 上的記憶體服務
- 什麼是 Azure Synapse Analytics?
- 將模型部署至 Azure Kubernetes Service 叢集