Share via


定型 PyTorch 模型

本文描述如何使用 Azure Machine Learning 設計工具中的定型 PyTorch 模型元件來定型 PyTorch 模型,例如 DenseNet。 定型是在您定義模型並設定其參數之後進行,需要已標記的資料。

目前,定型 PyTorch 模型元件支援單一節點和分散式定型。

如何使用定型 PyTorch 模型

  1. 在設計工具中將 DenseNet 元件或 ResNet 新增至管線草稿。

  2. 定型 PyTorch 模型元件新增至管線。 您可以在 [模型定型] 類別下找到此元件。 展開 [定型],然後將 [定型 PyTorch 模型] 元件拖曳至管線。

    注意

    定型 PyTorch 模型元件最好在大型資料集的 GPU 類型計算上執行,否則管線會失敗。 您可以在元件的右窗格中設定 [使用其他計算目標],以選取特定元件的計算。

  3. 在左側輸入中,附加未定型的模型。 將定型資料集和驗證資料集附加至定型 PyTorch 模型的中間和右側輸入。

    若為未定型的模型,則必須是 PyTorch 模型,例如 DenseNet,否則會擲回 'InvalidModelDirectoryError'。

    若為資料集,定型資料集必須是已標記的映像目錄。 請參閱轉換為映像目錄,以了解如何取得已標記的映像目錄。 如果未標記,則會擲回 'NotLabeledDatasetError'。

    定型資料集和驗證資料集有相同的標籤分類,否則會擲回 InvalidDatasetError。

  4. 在 [時期] 中,指定您想要定型多少個時期。 每個時期中會逐一查看整個資料集,預設為 5。

  5. 在 [批次大小] 中,指定一個批次中要定型多少個執行個體,預設為 16。

  6. 在 [熱身步驟編號] 中,指定您要讓定型熱身多少個時期,以防初始學習速率稍微太大而無法開始收斂,預設為 0。

  7. 在 [學習速率] 中,指定「學習速率」的值,預設值為 0.001。 學習速率控制每次測試和更正模型時,最佳化工具 (例如 sgd) 中使用的步驟大小。

    速率設定越小,越經常測試模型,風險是可能陷入局部高原。 速率設定越大,越快收斂,風險是越過真正最小值。

    注意

    如果定型損失在定型期間變成 nan (可能因為學習速率太高),降低學習速率可能有幫助。 在分散式定型中,為了保持梯度下降穩定,以 lr * torch.distributed.get_world_size() 計算實際學習速率,因為流程群組的批次大小是單一流程的 world size 倍。 已套用多項式學習速率衰減,有助於產生效能較佳的模型。

  8. 在 [隨機種子] 中,選擇性輸入整數值做為種子。 如果您想要確保實驗跨作業的重現性,建議使用種子。

  9. 在 [容忍] 中,指定如果驗證損失未連續減少,則要提前多少個時期停止定型。 預設為 3。

  10. 在 [列印頻率] 中,指定每個時期在反覆運算上的定型記錄列印頻率,預設為 10。

  11. 提交管線。 如果資料集較大,則需要一些時間,建議使用 GPU 計算。

分散式定型

在分散式定型中,定型模型的工作負載分散到多個迷你處理器分攤,稱為背景工作節點。 這些背景工作節點平行運作以加速模型定型。 目前,設計工具支援定型 PyTorch 模型元件的分散式定型。

定型時間

分散式定型可讓定型 PyTorch 模型只要幾小時就能定型大型資料集,例如 ImageNet (1000 個類別,120 萬個影像)。 下表顯示根據不同的裝置,在 ImageNet 上從頭開始定型 Resnet50 的 50 個時期的定型時間和效能。

裝置 定型時間 定型輸送量 第 1 名驗證精確度 前 5 名驗證精確度
16 個 V100 GPU 6h22min ~3200 影像/秒 68.83% 88.84%
8 個 V100 GPU 12h21min ~1670 影像/秒 68.84% 88.74%

按一下此元件的 [計量] 索引標籤,然後查看定型計量圖表,例如「每秒定型影像數」和「第 1 名精確度」。

顯示定型計量的螢幕擷取畫面

如何啟用分散式定型

若要啟用定型 PyTorch 模型元件的分散式定型,您可以在元件右窗格的 [作業設定] 中設定。 分散式定型僅支援 AML 計算叢集

注意

需要多個 GPU才能啟動分散式定型,因為 NCCL 後端定型 PyTorch 模型元件使用需要 cuda。

  1. 選取元件,然後開啟右面板。 展開 [作業設定] 區段。

    螢幕擷取畫面:顯示如何在回合設定中設定分散式定型

  2. 請確定您已選取計算目標的 AML 計算。

  3. 在 [資源配置] 區段中,您需要設定下列值:

    • 節點計數:計算目標中用於定型的節點數目。 應該小於或等於計算叢集的節點數目上限。 預設為 1,表示單一節點作業。

    • 每個節點的流程計數:每個節點觸發的流程數目。 應該小於或等於計算的處理單位。 預設為 1,表示單一流程作業。

    您可以按一下計算名稱進入計算詳細資料頁面,以檢查計算的節點數目上限處理單位

    螢幕擷取畫面:顯示如何檢查計算叢集

您可以在這裡深入了解 Azure Machine Learning 中的分散式定型。

分散式定型的疑難排解

如果您對此元件啟用分散式定型,則每個流程會有驅動程式記錄。 70_driver_log_0 適用於主要流程。 您可以在右窗格的 [輸出 + 記錄] 索引標籤下,查看驅動程式記錄中每個流程的錯誤詳細資料。

螢幕擷取畫面:顯示驅動程式記錄

如果已啟用分散式定型的元件失敗,但沒有任何 70_driver 記錄,您可以在 70_mpi_log 中查看錯誤詳細資料。

下列範例顯示常見的錯誤:每個節點的流程計數大於計算的處理單位

螢幕擷取畫面:顯示 MPI 記錄

如需元件疑難排解的詳細資訊,請參閱這篇文章

結果

在管線作業完成後,若要使用模型來評分,請將定型 PyTorch 模型連接至評分影像模型,以預測新輸入範例的值。

技術說明

預期的輸入

名稱 類型 描述
未定型的模型 UntrainedModelDirectory 未定型的模型,需要 PyTorch
定型資料集 ImageDirectory 定型資料集
驗證資料集 ImageDirectory 每個時期評估的驗證資料集

元件參數

名稱 範圍 類型 預設 描述
時期 >0 整數 5 選取包含標籤或結果資料行的資料行
批次大小 >0 整數 16 批次中要定型的執行個體數目
熱身步驟編號 >=0 整數 0 定型熱身的時期數目
學習率 >=double.Epsilon Float 0.1 隨機梯度下降最佳化工具的初始學習速率。
隨機種子 任意 整數 1 模型使用的亂數產生器的種子。
容忍 >0 整數 3 提前停止定型的時期數目
列印頻率 >0 整數 10 每個時期在反覆運算上的記錄列印頻率

輸出

名稱 類型 Description
定型的模型 ModelDirectory 定型的模型

後續步驟

請參閱 Azure Machine Learning 可用的元件集