本文說明許多在 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 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 是軟體服務、應用程式和連接器的集合,這些元件可共同運作並將不相關的資料來源轉換成一致、融入視覺及互動的深入解析。
替代項目
- 您可以在 Azure Synapse 中使用 Spark,而不是 Azure Databricks 中的 Spark 來定型和評分模型。
- 源數據可以來自任何資料庫。
- 您可以使用受控在線端點或 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 進行平行定型和評分。
- 個別的模型存放庫: 若要保護已部署的模型,請考慮將它們儲存在定型和測試管線未觸及的自己的存放庫中。
- 在線推斷: 如果管線在開始時載入並快取所有模型,模型可能會耗盡容器的記憶體。 因此,即使模型可能會稍微增加延遲,仍會在 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 叢集