Azure 基礎結構上 AI 工作負載的架構良好考慮 (IaaS)
在 Azure 基礎結構上針對 AI 進行架構完善的考慮,包括優化 AI 解決方案的可靠性、安全性、營運效率、成本管理和效能的最佳做法。 這些原則可確保強固的部署、安全的數據處理、有效率的模型作業,以及 Azure IaaS 平臺上的可調整基礎結構。 套用這些原則可讓組織建置符合業務需求的彈性、安全且符合成本效益的 AI 模型。
可靠性
可靠性牽涉到將停機時間降到最低,並確保 Azure 基礎結構上 AI 應用程式的一致效能。 確保跨分散式虛擬機 (VM) 的可靠作業,並在基礎結構變更期間維護效能,可防止服務中斷。 這些做法很重要,因為它們保證持續模型可用性並改善用戶體驗。
將 VM 分散到 可用性區域。 使用 可用性區域,將硬體故障或維護事件的停機時間降到最低。 它們會將 VM 分散到容錯網域和更新網域,以確保持續的應用程式作業。
使用 Azure 監視器設定健康情況監視。 使用 Azure 監視器追蹤 VM 上的 CPU、記憶體和網路效能,並設定警示,通知您支援模型之基礎結構中的效能降低或失敗。 如需詳細資訊,請參閱 Azure 監視器 VM 深入解析。
使用滾動實例自動修補和更新。 使用 Azure 更新管理以滾動方式套用修補程式,允許一個實例更新,而另一個實例則繼續提供流量,防止維護期間停機。
針對部分失敗期間正常降低的設計。 確保核心功能仍可供使用,方法是提供較不複雜的 AI 模型,或在某些 VM 無法使用時限制特定功能,讓使用者即使在中斷期間也能存取基本服務。
實作金鑰資產的定期備份。 定期備份模型數據、定型數據集和設定,以在發生失敗時啟用快速還原,並保護寶貴的進度和數據。
安全性
安全性涵蓋保護措施,以保護 AI 模型、數據和基礎結構,以防止未經授權的存取和威脅。 實作更新、監視模型完整性和控制存取,以防止可能危害敏感性資訊的弱點。 這些步驟對於在生產環境中維護 AI 解決方案的數據隱私權和可信度至關重要。
排程 Azure 資源的更新。 使用維護組態來設定 VM 和擴充功能的特定更新排程,以減少弱點時段。
定期修補虛擬機和容器映像。 啟用 VM 和擴展集的自動客體修補 ,以針對新的威脅維護安全性。 如需詳細資訊,請參閱 客體更新和主機維護概觀。
監視模型漂移並確保完整性。 實作模型檔案的數位簽名或哈希驗證等安全性機制,以防止未經授權的修改,以確保模型完整性。 使用 Azure 監視器來追蹤關鍵效能計量並識別模型漂移,這可能表示潛在的安全性弱點或數據轉移。 您可以使用 Azure 監視器計量 SDK,在您的程式代碼中定義自定義計量(精確度、F1 分數和數據分佈)。 Azure 監視器計量 SDK 可讓您將模型的效能統計數據和數據漂移度量傳送至 Azure 監視器。 監視一段時間的效能變更有助於偵測模型的行為偏離時間、可能表示攻擊或重新定型的需求。 這種主動式方法可協助維護模型完整性,並維護安全性合規性。
實作稽核和存取記錄。 使用 Azure 監視器和 Log Analytics 來記錄模型和 VM 的存取權,協助識別未經授權的存取或不尋常的使用模式。 如需詳細資訊,請參閱 Azure 監視器中的活動記錄。
針對模型檔案使用版本控制。 將模型檔案儲存在 Azure 儲存體(Blob、檔案或磁碟)中,並設定版本設定來追蹤變更,確保清楚的稽核記錄,以識別和回復有害的修改。 使用 Azure DevOps 進行版本控制可藉由管理程式碼變更的存取權,以及在程式代碼檢閱中強制執行最佳做法,來增強安全性。 這種分層方法可降低未經授權的變更風險,並提供責任。 如需詳細資訊,請參閱 Azure 儲存體 中的 Blob 版本控制。
設定模型輸出的異常偵測。 使用 Azure 監視器來追蹤模型的輸出計量,並設定異常行為的警示。 例如,監視來自模型的 API 回應有助於偵測異常輸出。 您可以在預測精確度等計量上設定異常偵測,以在超出預期範圍時自動偵測。 如需詳細資訊,請參閱 使用動態閾值建立和管理計量警示。
強制執行模型存取原則。 使用 Azure 角色型存取控制 (RBAC) 和 Microsoft Entra 識別碼來保護對 VM 和模型檔案的存取,並限制對已授權使用者的存取。
定期針對更新的數據重新驗證模型。 在 VM 上使用自動化腳本或工作流程實作模型的定期重新驗證,可確保模型對目前的數據集保持準確且有效,降低過時或不正確預測的風險。 透過使用 Azure 自動化 或 Azure Logic Apps 排程這些工作,您可以維護數據標準的合規性,並增強整體模型安全性。 這種主動式方法有助於儘早找出弱點,確保持續改善並防範潛在威脅。 您可以排程自動化工作流程,定期觸發重新驗證工作。 從 Azure 自動化 Runbook 開始,在虛擬機中執行,建立適當的排程以取得驗證結果。
追蹤數據譜系和模型檔案變更。 在 Azure Blob 儲存體 中啟用版本控制,並追蹤定型和推斷中使用的數據,確保沒有任何未經授權的數據會影響模型結果。
套用資源配額和速率限制。 透過 Azure API 管理 為您的模型 API 實作速率限制和配額,以防止過度使用或濫用,這可能會導致系統弱點或服務中斷。 此策略可確保系統在高流量期間保持回應,並降低與阻斷服務攻擊相關聯的風險。 藉由控制存取權,您可以維護效能,並保護敏感數據免於潛在的惡意探索 API 管理 配額和限制。
定期進行弱點掃描。 使用 Microsoft Defender 弱點掃描,對 VM 和相關資源進行弱點評估。 定期檢查 VM 設定中可能會公開模型的任何安全性問題或設定錯誤。 Microsoft Defender 弱點掃描。
成本最佳化
成本優化牽涉到將資源使用量與工作負載需求一致,以避免不必要的費用。 調整 VM 大小、認可保留實例,以及設定自動調整有助於管理成本,而不會影響效能。 在 Azure 基礎結構上控制成本對於 AI 部署的長期可持續性和延展性至關重要。
認可至 保留實例。 藉由承諾一年或三年期限來節省虛擬機 (VM) 成本,以提供折扣費率。
使用 Azure 虛擬機器擴展集 進行自動調整。根據 CPU 使用量等計量自動調整 VM 實例,只支付您所需的費用,並防止過度布建。
設定閑置實例的自動關機。 藉由啟用自動關機,特別是針對開發和測試環境,避免使用未使用資源的成本。
使用 Azure Savings Plans 來取得可預測的使用量。 相較於隨用隨付定價,可藉由認可 VM 大小和區域的一致使用量來降低成本。
針對容錯工作負載使用 Azure Spot 實例 。 針對可容許中斷的工作負載,取得大量備用容量折扣。
選取正確的記憶體解決方案。 根據工作負載需求平衡成本和效能。 選擇 Azure 受控 Lustre (AMLFS),以取得高輸送量、大規模應用程式,以及 Azure NetApp Files (ANF)以進行進階數據管理和可靠性。
卓越營運
卓越營運涉及優化 Azure 資源的設定和管理,以改善 AI 應用程式的功能。 有效率的資源配置、效能微調和分散式定型支援順暢的作業和適應各種需求。 這著重於作業效率,可確保 AI 模型如預期般執行,而不會過度使用資源。
優化資源配置。 根據實際資源使用量,定期檢閱 Azure VM 大小和組態,以符合工作負載需求。 使用 Azure Advisor 來取得最佳大小調整和調整的建議。
設定自動調整以提高效率。 設定 VM 或容器的自動調整,以處理工作負載需求,而不需過度布建。 使用 Azure 虛擬機器擴展集 根據需求動態調整資源。 如需詳細資訊,請參閱 Azure 虛擬機器擴展集。
進行一般效能微調。 持續分析應用程式,以找出並解決效能瓶頸。 使用 Application Insights Profiler 分析模型程式代碼和資源使用量。
實作分散式定型以提高效率。 如果適用的話,請使用分散式定型技術,使用多個 VM 來減少定型時間。 Horovod 和 PyTorch 等架構支援 Azure 上的分散式訓練。
將檢查點儲存在 Azure Blob 儲存體。 定期儲存模型狀態、權數和設定,以 Azure Blob 儲存體。 您可以使用適用於 LLM 的程式設計語言中提供的 Azure SDK 或連結庫。 以結構化格式儲存檢查點,例如 TensorFlow SavedModel 或 PyTorch 檢查點檔案。 修改您的定型或推斷程式代碼,以包含檢查點邏輯。 從設定間隔開始(在每個 epoch 或一些反覆項目之後),以儲存模型的狀態。 使用檢查點檔案的一致命名慣例,輕鬆地追蹤最新的狀態。
狀態復原的設計。 請確定您的應用程式可以從儲存的檢查點復原。 實作邏輯,以在應用程式啟動時從 Azure Blob 儲存體 載入模型的狀態。 它包含、檢查現有的檢查點,以及如果有的話載入最新的檢查點,讓應用程式能夠繼續,而不會遺失進度。
效能效益
效能效率是指將 Azure 基礎結構的處理能力最大化,以符合 AI 模型需求。 您應該微調 GPU 設定、優化輸入/輸出 (I/O) 程式,以及執行效能評定測試,以改善計算速度和回應性。 確保高效能支持大規模執行複雜的 AI 模型,以提升用戶滿意度並減少延遲。
GPU 微調
增加圖形處理單位 (GPU) 的時鐘速率,以改善效能,特別是對於需要高圖形處理或複雜計算的工作。 較高的時鐘速度可讓 GPU 在特定時間週期內執行更多作業,以提高整體效率。 使用此 GPU 優化文本,將 GPU 時鐘頻率設定為其最大值。
- 啟用加速網路。 加速網路是硬體加速技術,可讓虛擬機在支援的虛擬機類型上使用單一根目錄 I/O 虛擬化(SR-IOV)。 它提供較低的延遲、降低的抖動,以及降低的CPU使用率。 啟用加速網路提供前端網路效能的大幅增強功能。
I/O 微調
優化臨時記憶體。 臨時需要有高輸送量和低延遲。 定型作業需要讀取數據、處理數據,並在作業執行時使用此儲存位置做為臨時空間。 在理想情況下,您會在每個 VM 上直接使用本機 SSD。 如果您需要共用文件系統進行臨時處理,結合所有 NVMe SSD 來建立平行文件系統 (PFS) 可能是成本與效能的絕佳選項,假設其容量足夠。 其中一種方法是使用 Azure Managed Lustre。 如果 Azure 受控 Lustre 不適合,您可以探索記憶體選項,例如 Azure NetApp Files 或 Azure Native Qumulo。
實作檢查點記憶體。 大型深度學習訓練作業可以執行數周,視所使用的 VM 數目而定。 就像任何 HPC 叢集一樣,您可能會遇到失敗,例如 InfiniBand 問題、雙內嵌記憶體模組 (DIMM) 失敗、GPU 記憶體中錯誤更正 ode (ECC) 錯誤。 必須有檢查點策略。 瞭解檢查點間隔(儲存數據時)。 瞭解每次傳輸的數據量。 具有符合容量和效能需求的記憶體解決方案。 如果 Blob 記憶體符合效能需求,請使用 Blob 記憶體。
基準檢驗
效能評定測試有助於評估及改善 GPU 上的分散式深度學習訓練效能,特別是針對大規模模型。 這些測試會測量跨節點的 GPU 通訊效率,以降低分散式定型期間的數據傳輸瓶頸。 討論的三項測試包括:
- Megatron 架構:藉由改善分散式定型效率,支援大規模語言模型。
- NVIDIA 集體通訊連結庫 (NCCL) 和 ROCm 通訊集體連結庫 (RCCL) 測試:使用 NCCL 或 RCCL 連結庫評估多重 GPU 通訊中的效能和精確度,測試模式,例如全部縮減和散佈。
這些測試可確保 LLM 的延展性和最佳效能,而 Megatron 著重於模型定型和 GPU 通訊上的 NCCL/RCCL。
NVIDIA Megatron-LM 測試
NVIDIA Megatron-LM 是用於定型大型語言模型的開放原始碼架構。 它可讓開發人員為 NLP 工作建立龐大的類神經網路,包括:
- 平行處理原則:支援數十億個參數模型的模型、數據和管線平行處理原則。
- 延展性:跨多個 GPU 和節點進行調整,以有效率地進行大型模型定型。
- 彈性:允許設定模型架構、數據載入和定型策略。
- 優化:使用 NVIDIA GPU 優化來提升效能。
Megatron-LM 會部署在 Azure HPC 基礎結構上,而且它會針對大型語言模型使用 Azure 的延展性,而不需要內部部署硬體。
Megatron-LM 測試設定
部署 Megatron-LM 需要特定的軟體和硬體。
挑選正確的部署選項。 使用 CycleCloud Workspace for Slurm 來簡化部署。 選擇 GPU 磁碟分區的 NC 系列或 ND 系列 SKU。 針對多節點定型,建議針對 RDMA 支援使用 ND 系列 SKU。 Azure 的 HPC Marketplace 映像通常包含這些驅動程式和連結庫。 如果需要自定義,azhpc-images 存放庫可以確保相容性。
使用正確的影像。 項目的軟體需求包括以Linux為基礎的作業系統,通常是Ubuntu。 對於多 GPU 和多節點通訊,必須有 NCCL 和 MPI 等通訊連結庫。 此外,必須安裝適當的 NVIDIA 驅動程式,以確保 GPU 加速。 Azure 的 HPC Marketplace 映像 隨附預安裝這些驅動程式和連結庫。 不過,如果需要自定義, 可以使用 azhpc-images 存放庫來確保相容性。
Megatron-LM 測試使用
您應該使用最新版 的 NGC PyTorch 容器來執行 Megatron-LM。 若要對傳統 Slurm 型 HPC 叢集執行容器,您需要在叢集中安裝及設定這些其他元件:
- enroot:可讓使用者在 HPC 叢集上執行容器化應用程式的工具,而不需要根許可權或修改主機系統。
- pyxis:Slurm 的外掛程式,可順暢整合 enroot 與 Slurm,讓使用者將容器化作業提交至 Slurm 佇列,並在 HPC 節點上執行它們。
這兩個元件都包含在 Slurm 的 CycleCloud 工作區中,但目前未包含在透過 CycleCloud 建置的 Slurm 叢集中。 您可以使用 CycleCloud 專案透過 cluster-init 引進這些額外的元件。 符合這些需求后,您可以使用 Megatron-LM 進行 LLM 訓練,方法是:
- 確認叢集的效能:使用 節點健康情況檢查在執行工作負載之前,先識別任何潛在的硬體問題。 使用 NCCL 測試來驗證叢集的分散式全減效能。
- 選取您的定型數據:使用 codeParrot 模型作為起點來驗證您的工作流程。
- 前置處理您的數據:使用 Megatron-LM 存放庫中的 preprocess_data.py腳本,將數據轉換成與 Megatron-LM 相容的格式。
- 使用 Megatron-LM 定型:使用 Megatron-LM 中的範例 作為設定 Megatron 以進行訓練的參考。
此設定可確保在 Azure 基礎結構上有效率地部署和定型大型語言模型。
NCCL 頻寬測試
若要驗證並優化節點之間的 GPU 通訊,請執行 NCCL 頻寬測試。 NCCL 頻寬測試是 NCCL 中的特製化工具,這是一個連結庫,可促進 GPU 之間的高速通訊。 NCCL 支援集體作業,包括全減、全收集、減少、廣播和減少散佈,以及跨單一或多 GPU 節點,並在具有 PCIe、NVLink、NVswitch 或 InfiniBand 或 TCP/IP 等網路設定的平臺上達到最佳效能。 如需詳細資訊,請參閱 NVIDIA/NCCL 測試。
NCCL 效能計量
使用 NCCL 頻寬測試來評估關鍵計量,包括時間和頻寬。 「時間」(以毫秒為單位)會測量作業中的額外負荷或延遲,因此適合用來評估具有小型數據大小的作業。 「帶寬」(以 GB/秒為單位)會評估點對點作業效率,例如傳送/接收。 「總線頻寬」會藉由考慮 NVLink 或 PCI 等元件中的 GPU 間通訊速度和瓶頸,以反映硬體使用效率。 提供各種集體作業的計算,例如 AllReduce、ReduceScatter、AllGather、Broadcast 和 Reduce。
NCCL 測試起始
若要在 CycleCloud 部署中起始這些測試,請透過 SSH 連線到排程器節點,並存取 GPU 裝備完善的計算節點。 複製 NCCL 測試的 Git 存放庫、瀏覽至 nccl-tests
目錄,並建立列出要測試之節點的主機檔案。 從 CycleCloud 的 Web 應用程式取得排程器節點的 IP 位址。
NCCL 測試自變數
在執行測試之前,請指定不同的自變數-G
如需可調整參數的完整清單,請參閱 NCCL 測試檔。
RCCL 測試
ROCm 通訊集體連結庫 (RCCL) 是專為 AMD GPU 之間有效率通訊而設計的特殊連結庫。 它提供集體作業,例如全減、全收集、廣播和縮減,同時支援節點內部和節點間 GPU 通訊。 RCCL 已針對使用PCIe和InfiniBand等網路技術的平台優化,可確保在多 GPU 環境中進行可調整的數據傳輸。 它支援整合至單一和多進程工作流程,例如使用 MPI 的工作流程。 如需詳細資訊,請參閱 ROCm 通訊集體連結庫
- 設定環境。 安裝 ROCm,並確定 RCCL 已正確安裝在所有節點上。
- 建置 RCCL 測試。 複製存放庫、流覽至 rccl-tests 目錄,然後編譯測試。
- 執行頻寬測試。 使用提供的測試可執行檔 (rccl-tests),指定通訊作業,例如 all-reduce。
- 分析效能。 比較節點和 GPU 之間的頻寬和延遲結果。