在 Azure 中使用雲端規模分析的數據科學專案最佳做法
我們建議在 Microsoft Azure 中使用雲端規模分析的這些最佳實踐,以推動數據科學專案的運作。
開發範本
開發一個範本,為您的數據科學專案組合一組服務。 使用組合一組服務的範本,協助提供各種數據科學小組使用案例的一致性。 建議您以範本存放庫的形式開發一致的藍圖。 您可以在企業內針對各種數據科學專案使用此存放庫,以協助縮短部署時間。
數據科學範本的指導方針
使用下列指導方針為您的組織開發資料科學範本:
開發一組基礎結構即程序代碼 (IaC) 範本,以部署 Azure Machine Learning 工作區。 包含金鑰保存庫、儲存體帳戶、容器登錄和 Application Insights 等資源。
在這些範本中設定資料存放區和運算目標,例如運算實例、運算叢集和 Azure Databricks。
部署最佳做法
即時
- 在範本和 Azure 認知服務中包含 Azure Data Factory 或 Azure Synapse 部署。
- 範本應該提供所有必要的工具來執行數據科學探索階段和模型的初始運作。
初始設定考量事項
在某些情況下,您組織中的數據科學家可能需要一個環境,才能進行快速的視需要分析。 當數據科學專案未正式設定時,這種情況很常見。 例如,一個可能要在 Azure 內進行交叉收費的項目經理、成本代碼或成本中心可能會缺失,因為該遺漏的元素需要核准。 貴組織或小組中的使用者可能需要存取數據科學環境,以了解數據,並可能評估專案的可行性。 此外,某些專案可能不需要完整的數據科學環境,因為數據產品的數量很少。
在其他情況下,可能需要一個完整的數據科學專案,包括專用環境、專案管理、成本代碼和成本中心。 完整數據科學專案適用於想要在探索階段成功之後共同作業、共享結果,以及需要讓模型運作的多個小組成員。
設定過程
在設定範本之後,應該以每個項目為基礎部署範本。 每個專案至少應分配兩個實例,以區分開發與生產環境。 在生產環境中,沒有任何個人應該具有存取權,而且所有專案都應該透過持續整合或持續開發管線和服務主體來部署。 這些生產環境原則很重要,因為 Azure Machine Learning 不會在工作區內提供細微的角色型訪問控制模型。 您無法限制使用者存取特定一組實驗、端點或管線。
相同的訪問權限通常適用於不同類型的構建產物。 請務必將開發與生產區分開,以防止刪除工作區中的生產管線或端點。 除了範本之外,還需要建置程式,以提供數據產品小組要求新環境的選項。
建議您根據每個項目設定不同的 AI 服務,例如 Azure 認知服務。 藉由為每個項目設定不同的 AI 服務,就會針對每個數據產品資源群組進行部署。 此原則會從數據存取的觀點建立清楚的區隔,並降低錯誤小組未經授權數據存取的風險。
串流情境
針對即時和串流使用案例,部署應該在縮小規模的 Azure Kubernetes Service (AKS)上進行測試。 您可以在開發環境中進行測試以節省成本,然後再部署到生產 AKS 或適用於容器的 Azure 應用服務。 您應該執行簡單的輸入和輸出測試,以確保服務如預期般回應。
接下來,您可以將模型部署至您想要的服務。 此部署計算目標是唯一可供 AKS 叢集中生產工作負載使用且建議使用的部署計算目標。 如果需要圖形處理單元(GPU)或現場可程式 gate array(FPGA)的支援,則此步驟更為必要。 Azure Machine Learning 目前不提供支援這些硬體需求的其他原生部署選項。
Azure Machine Learning 需要一對一對應至 AKS 叢集。 Azure Machine Learning 工作區的每個新連線都會中斷 AKS 與 Azure Machine Learning 之間的先前連線。 在降低該限制之後,建議將中央 AKS 叢集部署為共用資源,並將其連結至各自的工作區。
如果應該在將模型移至生產 AKS 之前完成壓力測試,則應該裝載另一個中央測試 AKS 實例。 測試環境應該提供與生產環境相同的計算資源,以確保結果與生產環境相似。
批次案例
並非所有使用案例都需要 AKS 叢集部署。 如果大型數據量只需要定期評分或以事件為基礎,則使用案例不需要 AKS 叢集部署。 例如,可以根據數據進入特定儲存帳戶的時間來判斷大量數據量。 Azure Machine Learning 管線和 Azure Machine Learning 計算叢集應該用於這些案例類型的部署。 這些管線應在 Data Factory 中進行協調和執行。
識別正確的計算資源
在 Azure Machine Learning 中將模型部署至 AKS 之前,用戶必須先指定應該為個別模型配置的 CPU、RAM 和 GPU 等資源。 定義這些參數可以是複雜且乏味的程式。 您必須使用不同的組態來執行壓力測試,才能識別一組良好的參數。 您可以使用 Azure Machine Learning 中的 模型分析 功能來簡化此程式,這是一項長時間執行的工作,可測試不同的資源配置組合,並使用已識別的延遲和來回時間 (RTT) 來建議最佳組合。 這項資訊可協助 AKS 上的實際模型部署。
若要安全地更新 Azure Machine Learning 中的模型,小組應使用受控推出功能(預覽版)將停機時間降到最低,並讓模型的 REST 端點保持一致。
MLOps最佳實踐與工作流程
在數據科學存放庫中包含範例程序代碼
如果您的團隊擁有特定的資料產物和標準作法,您可以簡化並加快數據科學專案。 建議您建立所有資料科學團隊皆可在使用 Azure Machine Learning 和資料產品環境的相關工具時使用的成品工具。 資料和機器學習工程師應該建立並提供成果。
這些成果物應包括:
範例筆記本,示範如何:
- 載入、掛接及處理數據產品。
- 紀錄指標和參數。
- 將訓練作業提交至計算叢集。
作業所需的成品:
- 範例 Azure Machine Learning 流程
- 範例 Azure Pipelines
- 執行管線所需的更多腳本
文件
使用設計良好的工件來運行管線
工件可以加速數據科學專案的探索和運作階段。 在 DevOps 中,分叉策略可以協助擴展這些成品至所有項目。 由於此設定會提升 Git 的使用,因此使用者和整體自動化程式可以受益於提供的成品。
提示
Azure Machine Learning 範例管線應使用 Python 軟體開發人員套件 (SDK) 或以 YAML 語言為基礎來建置。 新的 YAML 體驗將更具未來性,因為 Azure Machine Learning 產品小組目前正在處理新的 SDK 和命令行介面 (CLI)。 Azure Machine Learning 產品小組確信 YAML 會做為 Azure Machine Learning 內所有成品的定義語言。
範例管線不需額外調整就無法應用於所有專案,但可以作為基準使用。 您可以調整專案的範例管線。 流程應該包含每個項目最相關的方面。 例如,管線可以參考計算目標、參考數據產品、定義參數、定義輸入,以及定義執行步驟。 對 Azure Pipelines,也應該進行相同的步驟。 Azure Pipelines 也應該使用 Azure Machine Learning SDK 或 CLI。
管線應該示範如何:
- 從 DevOps 管線內連線到工作區。
- 檢查所需的計算是否可用。
- 提交工作。
- 註冊及部署模型。
工件並不適合所有的專案,有時可能需要客製化,但有良好的基礎可以加速專案的落地執行與部署。
組織 MLOps 儲存庫
使用者可能會遇到無法追蹤找到和儲存成品的位置的情況。 若要避免這些情況,您應該要求更多時間來溝通及建構標準存放庫的最上層資料夾結構。 所有項目都應該遵循資料夾結構。
注意
本節所述的概念可跨內部部署、Amazon Web Services、Palantir 和 Azure 環境使用。
下圖說明 MLOps(機器學習作業)存放庫的建議最上層資料夾結構:
下列用途適用於存放庫中的每個資料夾:
資料夾 | 目的 |
---|---|
.cloud |
將雲端特定的程式碼和成品儲存在此資料夾中。 成品包括 Azure Machine Learning 工作區的組態檔,包括計算目標定義、作業、已註冊的模型和端點。 |
.ado/.github |
將像是 YAML 管線或程式碼擁有者等 Azure DevOps 或 GitHub 工件儲存在此資料夾中。 |
code |
包含此資料夾中作為專案一部分開發的實際程式代碼。 此資料夾可以包含 Python 套件和一些腳本,這些腳本會用於機器學習管線的個別步驟。 建議您分隔此資料夾中需要完成的個別步驟。 常見的步驟是 前置處理、模型定型,以及 模型註冊。 針對每個資料夾定義相依關係,例如 Conda 相依關係、Docker 映像或其他選項。 |
docs |
此資料夾適用於文件用途。 此資料夾會儲存 Markdown 檔案和影像來描述專案。 |
pipelines |
將 Azure Machine Learning 管線定義儲存在此資料夾中的 YAML 或 Python 中。 |
tests |
在此資料夾撰寫單元和整合測試,以便在專案早期階段執行並及早發現 Bug 和問題。 |
notebooks |
使用這個資料夾,將 Jupyter Notebook 與實際的 Python 專案分開。 在資料夾內,每個人員都應該有一個子資料夾來簽入其筆記本,並防止 Git 合併衝突。 |
下一步
Azure 中的雲端規模分析數據產品