將 PyTorch 模型定型
本文說明如何在 Azure 機器學習 設計工具中使用定型 PyTorch 模型元件,以定型像 DenseNet 這樣的 PyTorch 模型。 定型會在定義模型並設定其參數之後進行,而且需要加上標籤的數據。
目前, 訓練 PyTorch 模型 元件同時支援單一節點和分散式定型。
如何使用定型 PyTorch 模型
將定 型 PyTorch 模型 元件新增至管線。 您可以在 [模型定型] 類別下找到此元件。 展開 [定型],然後將 [定型 PyTorch 模型] 元件拖曳至您的管線。
注意
訓練 PyTorch 模型元件較好地在大型數據集的 GPU 類型計算上執行,否則您的管線將會失敗。 您可以藉由設定 [使用其他計算目標],在元件的右窗格中選取特定元件的計算。
在左側輸入上,附加未定型的模型。 將定型數據集和驗證數據集附加至定型 PyTorch 模型的中間和右側輸入。
針對未定型的模型,它必須是 PyTorch 模型,例如 DenseNet;否則,將會擲回 'InvalidModelDirectoryError'。
針對數據集,定型數據集必須是標示的影像目錄。 如需如何取得已標記的映像目錄,請參閱轉換成映像目錄。 如果未加上標籤,則會擲回 『NotLabeledDatasetError』。
定型數據集和驗證數據集具有相同的標籤類別,否則會擲回 InvalidDatasetError。
針對 Epochs,指定您想要訓練的 Epoch 數目。 依預設,每個 epoch 都會逐一查看整個數據集。
針對 [批次大小],指定批次中要定型的實例數目,預設為 16。
針對 熱身步驟編號,指定您想要準備訓練的 Epoch 數目,以防初始學習速率稍大而無法開始聚合,預設為 0。
針對學習速率,指定學習速率的值,預設值為0.001。 學習速率會控制每次測試並更正模型時,優化器中使用的步驟大小,例如新元。
藉由將速率設定為較小,您會更頻繁地測試模型,並有可能卡在本機高原的風險。 藉由設定較大的速率,您可以更快速地聚合,並有可能過度擷取真正的最小值。
注意
如果定型損失在訓練期間變成 nan,這可能是因為學習速率太大而造成,降低學習率可能會有所説明。 在分散式定型中,為了保持梯度下降穩定,實際學習率的計算方式
lr * torch.distributed.get_world_size()
是因為進程群組的批次大小是單一進程的世界大小時間。 套用多項式學習速率衰變,並有助於產生較佳的執行模型。針對 [隨機種子],選擇性地輸入要當做種子使用的整數值。 如果您想要確保跨作業的實驗重現性,建議使用種子。
針對 [耐心],指定如果驗證遺失不會連續減少,則提前停止定型的 Epoch 數目。 預設為 3。
針對 [ 列印頻率],預設會針對每個 epoch 中的反復專案指定定型記錄列印頻率 10。
提交管線。 如果您的數據集大小較大,則可能需要一些時間,並建議使用 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。
選取元件並開啟右側面板。 展開 [ 作業設定] 區段。
請確定您已選取計算目標的 AML 計算。
在 [ 資源配置] 區段中,您需要設定下列值:
節點計數 :用於定型的計算目標中的節點數目。 它應該小於或等於計算叢集的最大節點數目。 默認為 1,這表示單一節點作業。
每個節點的進程計數:每個節點觸發的進程數目。 它應該小於或等於計算的處理單位。 默認為 1,這表示單一進程作業。
您可以 按下計算詳細數據頁面中的計算名稱,檢查計算的節點 數目上限和 處理單位 。
您可以在這裡深入瞭解 Azure 機器學習 的分散式訓練。
分散式定型的疑難解答
如果您啟用此元件的分散式定型,每個程式都會有驅動程序記錄。 70_driver_log_0
適用於主要進程。 您可以在右窗格中的 [輸出+ 記錄] 索引標籤下,檢查驅動程序記錄中每個進程的錯誤詳細數據。
如果已啟用元件的分散式定型失敗,但沒有任何 70_driver
記錄,您可以檢查 70_mpi_log
是否有錯誤詳細數據。
下列範例顯示常見的錯誤,即 每個節點 的處理計數大於 計算的處理單位 。
如需元件疑難解答的詳細資訊,請參閱 這篇文章 。
結果
管線作業完成後,若要使用模型進行評分,請將 定型 PyTorch 模型 連接到 評分影像模型,以預測新輸入範例的值。
技術注意事項
預期輸入
名稱 | 類型 | 描述 |
---|---|---|
未定型的模型 | UntrainedModelDirectory | 未定型的模型,需要 PyTorch |
定型資料集 | ImageDirectory | 定型資料集 |
驗證資料集 | ImageDirectory | 評估每個 Epoch 的驗證數據集 |
元件參數
名稱 | 範圍 | 類型 | 預設 | 描述 |
---|---|---|---|---|
時代 | >0 | 整數 | 5 | 選取包含標籤或結果資料行的數據行 |
批次大小 | >0 | 整數 | 16 | 批次中要定型的實例數目 |
熱身步驟編號 | >=0 | 整數 | 0 | 熱身訓練的紀念日數 |
學習率 | >=double。伊普西隆 | Float | 0.1 | 隨機梯度下降優化器的初始學習速率。 |
隨機種子 | 任意 | 整數 | 1 | 模型所使用的隨機數產生器的種子。 |
耐心 | >0 | 整數 | 3 | 早期停止訓練的 Epoch 數目 |
列印頻率 | >0 | 整數 | 10 | 在每個 epoch 中的反覆項目上訓練記錄列印頻率 |
輸出
名稱 | 類型 | 描述 |
---|---|---|
定型的模型 | ModelDirectory | 定型的模型 |