使用 Azure 機器學習 管線進行深度學習模型的批次評分

Azure Logic Apps
Azure Machine Learning
Azure 角色型存取控制
Azure 儲存體

此參考架構示範如何使用 Azure 機器學習,將類神經樣式傳輸套用至影片。 樣式傳輸 是一種深度學習技術,可組成另一個影像樣式中的現有影像。 針對任何使用批次評分搭配深度學習的案例,您可以一般化此架構。

架構

使用 Azure 機器學習 的深度學習模型架構圖表。

下載此架構的 Visio 檔案

工作流程

此架構包含下列元件。

計算

Azure 機器學習 會使用管線來建立可重現且易於管理的計算順序。 它也提供受控計算目標(管線計算可以執行),稱為 Azure 機器學習 Compute,用於定型、部署和評分機器學習模型。

儲存體

Azure Blob 儲存體 儲存所有影像(輸入影像、樣式影像和輸出影像)。 Azure 機器學習 與 Blob 儲存體 整合,讓使用者不需要在計算平臺和 Blob 記憶體之間手動行動數據。 Blob 儲存體 對於此工作負載所需的效能也具有成本效益。

觸發程序

Azure Logic Apps 會觸發工作流程。 當邏輯應用程式偵測到 Blob 已新增至容器時,它會觸發 Azure 機器學習 管線。 Logic Apps 非常適合此參考架構,因為它是偵測 Blob 記憶體變更的簡單方式,且程式容易變更觸發程式。

前置處理和後處理數據

此參考架構會使用樹狀結構中猩猩的影片片段。

  1. 使用 FFmpeg 從視訊畫面擷取音訊檔案,以便稍後將音訊檔案縫合回輸出視訊。
  2. 使用 FFmpeg 將影片分成個別畫面。 框架會以平行方式獨立處理。
  3. 此時,您可以平行將神經樣式傳輸套用至每個個別框架。
  4. 處理每個畫面之後,請使用 FFmpeg 將框架重新放在一起。
  5. 最後,將音訊檔案重新附加至重設的鏡頭。

元件

解決方案詳細資料

此參考架構是針對 Azure 儲存體 中存在新媒體所觸發的工作負載所設計。

處理牽涉到下列步驟:

  1. 將影片檔案上傳至 Azure Blob 儲存體。
  2. 影片檔案會觸發 Azure Logic Apps,將要求傳送至 Azure 機器學習 管線已發佈的端點。
  3. 管線會處理影片、使用 MPI 套用樣式傳輸,然後處理影片。
  4. 管線完成後,輸出會儲存回 Blob 儲存體。

潛在的使用案例

媒體組織有一個視頻,其風格,他們希望變更為看起來像一幅特定的畫作。 組織想要以及時且自動化的方式,將此樣式套用至影片的所有畫面。 如需類神經樣式傳輸演算法的詳細資訊,請參閱 使用卷積類神經網路 的影像樣式傳輸(PDF)。

考量

這些考慮會實作 Azure Well-Architected Framework 的支柱,這是一組指導原則,可用來改善工作負載的品質。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework

效能效益

效能效率是工作負載調整的能力,以符合使用者以有效率的方式滿足其需求。 如需詳細資訊,請參閱 效能效率要素概觀

GPU 與 CPU

對於深度學習工作負載,GPU 通常會以相當多的方式執行CPU,以取得可比較的效能所需的可調整CPU叢集。 雖然您只能在此架構中使用CPU,但 GPU 可提供更佳的成本/效能配置檔。 我們建議使用最新的 NCv3 系列 GPU 優化 VM。

預設不會在所有區域中啟用 GPU。 請務必選取已啟用 GPU 的區域。 此外,訂用帳戶對於 GPU 優化 VM 的預設配額為零核心。 您可以開啟支援要求來提高此配額。 請確定您的訂用帳戶有足夠的配額可執行您的工作負載。

跨 VM 與核心平行處理

當您以批次作業的形式執行樣式傳輸程式時,主要在 GPU 上執行的作業必須跨 VM 平行處理。 有兩種方法:您可以使用具有單一 GPU 的 VM 來建立較大的叢集,或使用具有許多 GPU 的 VM 建立較小的叢集。

針對此工作負載,這兩個選項具有可比較的效能。 使用較少的 VM 搭配每個 VM 的 GPU 可協助減少數據移動。 不過,此工作負載的每個作業的數據量並不大,因此您不會觀察到 Blob 儲存體 的節流。

MPI 步驟

建立 Azure 機器學習 管線時,用來執行平行計算的其中一個步驟是 [訊息處理介面] MPI 步驟。 MPI 步驟可協助將數據平均分割到可用的節點。 MPI 步驟不會執行,直到所有要求節點都就緒為止。 如果一個節點失敗或先佔 (如果它是低優先順序的虛擬機),MPI 步驟必須重新執行。

安全性

安全性可提供針對蓄意攻擊和濫用寶貴數據和系統的保證。 如需詳細資訊,請參閱 安全性要素概觀。 本節包含建置安全解決方案的考慮。

限制對 Azure Blob 儲存體 的存取

在此參考架構中,Azure Blob 儲存體 是需要保護的主要記憶體元件。 GitHub 存放庫中顯示的基準部署會使用記憶體帳戶密鑰來存取 Blob 記憶體。 若要進一步控制和保護,請考慮改用共用存取簽章 (SAS)。 這會將有限的存取權授與記憶體中的物件,而不需要硬式編碼帳戶密鑰或以純文字儲存它們。 這種方法特別有用,因為帳戶密鑰在邏輯應用程式設計工具介面內的純文字中可見。 使用 SAS 也有助於確保記憶體帳戶具有適當的控管,且該存取權只會授與想要擁有它的人員。

針對具有更敏感數據的案例,請確定所有記憶體密鑰都受到保護,因為這些密鑰會授與工作負載中所有輸入和輸出數據的完整存取權。

數據加密和數據移動

此參考架構會使用樣式傳輸作為批次評分程式的範例。 針對更敏感的數據案例,記憶體中的數據應該在待用時加密。 每次將數據從一個位置移至下一個位置時,請使用傳輸層安全性 (TSL) 來保護數據傳輸。 如需詳細資料,請參閱 Azure 儲存體安全性指南

保護虛擬網路中的計算

部署 機器學習 計算叢集時,您可以將叢集設定為布建在虛擬網路子網內。 此子網可讓叢集中的計算節點與其他虛擬機安全地通訊。

防範惡意活動

在有多個用戶的情況下,請確定敏感數據受到保護,以防止惡意活動。 如果其他用戶獲得此部署的存取權以自定義輸入數據,請注意下列預防措施和考慮:

  • 使用 Azure 角色型存取 (RBAC) 來限制使用者只存取所需的資源。
  • 布建兩個不同的記憶體帳戶。 將輸入和輸出數據儲存在第一個帳戶中。 外部使用者可以存取此帳戶。 將可執行的腳本和輸出記錄檔儲存在其他帳戶中。 外部使用者不應具有此帳戶的存取權。 此區隔可確保外部使用者無法修改任何可執行檔(以插入惡意代碼),而且無法存取可保存機密資訊的記錄檔。
  • 惡意使用者可以對作業佇列執行 DDoS 攻擊 ,或在作業佇列中插入格式不正確的有害訊息,導致系統鎖定或造成清除佇列錯誤。

成本最佳化

成本優化是考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱 成本優化要素概觀。

相較於記憶體和排程元件,此參考架構中使用的計算資源在成本方面遠佔主導地位。 其中一個主要挑戰是有效地跨已啟用 GPU 的機器叢集平行處理工作。

Azure 機器學習 計算叢集大小可以根據佇列中的作業自動相應增加和減少。 您可以設定最小和最大節點,以程式設計方式啟用自動調整。

針對不需要立即處理的工作,請設定自動調整,讓默認狀態(最小值)是零節點的叢集。 使用此設定時,叢集會以零節點開頭,而且只會在偵測佇列中的作業時相應增加。 如果批次評分程式每天或更少發生幾次,此設定會產生顯著的成本節省。

自動調整可能不適用於彼此太接近的批次作業。 叢集啟動和加速所需的時間也會產生成本,因此,如果批次工作負載在上一個作業結束後的幾分鐘才會開始,則讓叢集在作業之間執行可能更有成本效益。

Azure 機器學習 Compute 也支援低優先順序的虛擬機,可讓您在折扣的虛擬機上執行計算,並注意這些虛擬機隨時可能先佔。 低優先順序的虛擬機很適合用於非關鍵批次評分工作負載。

監視批次作業

執行作業時,請務必監視進度,並確定作業如預期般運作。 不過,監視作用中節點叢集可能是一項挑戰。

若要檢查叢集的整體狀態,請移至 Azure 入口網站 中的 機器學習 服務,以檢查叢集中節點的狀態。 如果節點處於非使用中狀態或作業失敗,錯誤記錄會儲存至 Blob 儲存體,而且也可以在 Azure 入口網站 中存取。

藉由將記錄連線到 Application Insights,或執行個別進程來輪詢叢集及其作業的狀態,即可進一步擴充監視。

使用 Azure 機器學習 記錄

Azure 機器學習 會自動將所有 stdout/stderr 記錄到相關聯的 Blob 儲存體 帳戶。 除非另有指定,否則您的 Azure 機器學習 工作區會自動布建記憶體帳戶,並將您的記錄傾印到其中。 您也可以使用記憶體導覽工具,例如 Azure 儲存體 Explorer,這是瀏覽記錄檔的較簡單方式。

部署此案例

若要部署此參考架構,請遵循 GitHub 存放庫中所述的步驟。

您也可以使用 Azure Kubernetes Service 來部署深度學習模型的批次評分架構。 請遵循此 GitHub 存放庫中所述的步驟。

參與者

本文由 Microsoft 維護。 原始投稿人如下。

主體作者:

若要查看非公用LinkedIn配置檔,請登入LinkedIn。

下一步