共用方式為


將 PyTorch 模型定型

本文說明如何在 Azure 機器學習 設計工具中使用定型 PyTorch 模型元件,以定型像 DenseNet 這樣的 PyTorch 模型。 定型會在定義模型並設定其參數之後進行,而且需要加上標籤的數據。

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

如何使用定型 PyTorch 模型

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

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

    注意

    訓練 PyTorch 模型元件較好地在大型數據集的 GPU 類型計算上執行,否則您的管線將會失敗。 您可以藉由設定 [使用其他計算目標],在元件的右窗格中選取特定元件的計算。

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

    針對未定型的模型,它必須是 PyTorch 模型,例如 DenseNet;否則,將會擲回 'InvalidModelDirectoryError'。

    針對數據集,定型數據集必須是標示的影像目錄。 如需如何取得已標記的映像目錄,請參閱轉換成映像目錄。 如果未加上標籤,則會擲回 『NotLabeledDatasetError』。

    定型數據集和驗證數據集具有相同的標籤類別,否則會擲回 InvalidDatasetError。

  4. 針對 Epochs,指定您想要訓練的 Epoch 數目。 依預設,每個 epoch 都會逐一查看整個數據集。

  5. 針對 [批次大小],指定批次中要定型的實例數目,預設為 16。

  6. 針對 熱身步驟編號,指定您想要準備訓練的 Epoch 數目,以防初始學習速率稍大而無法開始聚合,預設為 0。

  7. 針對學習速率,指定學習速率的值,預設值為0.001。 學習速率會控制每次測試並更正模型時,優化器中使用的步驟大小,例如新元。

    藉由將速率設定為較小,您會更頻繁地測試模型,並有可能卡在本機高原的風險。 藉由設定較大的速率,您可以更快速地聚合,並有可能過度擷取真正的最小值。

    注意

    如果定型損失在訓練期間變成 nan,這可能是因為學習速率太大而造成,降低學習率可能會有所説明。 在分散式定型中,為了保持梯度下降穩定,實際學習率的計算方式 lr * torch.distributed.get_world_size() 是因為進程群組的批次大小是單一進程的世界大小時間。 套用多項式學習速率衰變,並有助於產生較佳的執行模型。

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

  9. 針對 [耐心],指定如果驗證遺失不會連續減少,則提前停止定型的 Epoch 數目。 預設為 3。

  10. 針對 [ 列印頻率],預設會針對每個 epoch 中的反復專案指定定型記錄列印頻率 10。

  11. 提交管線。 如果您的數據集大小較大,則可能需要一些時間,並建議使用 GPU 計算。

分散式訓練

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

定型時間

分散式定型可讓您在數小時內透過 訓練 PyTorch 模型,在大型數據集上定型,例如 ImageNet(1000 個類別、120 萬個影像)。 下表顯示根據不同裝置,在 ImageNet 上從頭開始訓練 Resnet50 的 50 個 Epoch 訓練時間和效能。

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

按兩下此元件 [計量] 索引標籤,並查看定型計量圖表,例如「每秒定型影像」和「前1名精確度」。

顯示定型計量的螢幕快照

如何啟用分散式定型

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

注意

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

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

    顯示如何在 runsetting 中設定分散式定型的螢幕快照

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

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

    • 節點計數 :用於定型的計算目標中的節點數目。 它應該小於或等於計算叢集的最大節點數目。 默認為 1,這表示單一節點作業。

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

    您可以 按下計算詳細數據頁面中的計算名稱,檢查計算的節點 數目上限和 處理單位

    顯示如何檢查計算叢集的螢幕快照

您可以在這裡深入瞭解 Azure 機器學習 的分散式訓練。

分散式定型的疑難解答

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

顯示驅動程式記錄的螢幕快照

如果已啟用元件的分散式定型失敗,但沒有任何 70_driver 記錄,您可以檢查 70_mpi_log 是否有錯誤詳細數據。

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

顯示 mpi 記錄的螢幕快照

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

結果

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

技術注意事項

預期輸入

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

元件參數

名稱 範圍 類型 預設 描述
時代 >0 整數 5 選取包含標籤或結果資料行的數據行
批次大小 >0 整數 16 批次中要定型的實例數目
熱身步驟編號 >=0 整數 0 熱身訓練的紀念日數
學習率 >=double。伊普西隆 Float 0.1 隨機梯度下降優化器的初始學習速率。
隨機種子 任意 整數 1 模型所使用的隨機數產生器的種子。
耐心 >0 整數 3 早期停止訓練的 Epoch 數目
列印頻率 >0 整數 10 在每個 epoch 中的反覆項目上訓練記錄列印頻率

輸出

名稱 類型​​ 描述
定型的模型 ModelDirectory 定型的模型

下一步

請參閱 Azure 機器學習 可用的元件集。