訓練管道的其他指南

本節將詳細說明訓練管道。

最佳化輸入管道

摘要:輸入繫結管道的原因和介入措施高度取決於工作。使用剖析器並留意常見問題。

請使用適當的剖析器 (例如下列其中一種),診斷受輸入內容限制的管道:

最終,具體原因和介入措施高度取決於工作。 更廣泛的工程考量 (例如盡量減少磁碟空間) 可能會影響輸入管道效能。

以下是輸入繫結管道的常見原因:

  • 資料與訓練程序並非位於同一位置,導致 I/O 延遲。舉例來說,透過網路讀取訓練資料可能會導致 I/O 延遲。
  • 線上資料前處理作業耗費大量資源。建議離線預先處理一次,並儲存結果。
  • 無意間的同步處理障礙,干擾資料管道預先擷取。舉例來說,在 CommonLoopUtils 中同步處理裝置和主機之間的指標時。

針對輸入受限的管道,我們建議採取下列介入措施:

評估模型效能

摘要:以大於訓練的批次大小執行評估。以規律的步驟間隔執行評估,而非規律的時間間隔。

評估設定

您可以使用下列設定評估模型成效:

  • 線上評估:在正式環境中,模型提供預測結果時收集指標。線上評估通常最能如實評估模型品質,因為評估方式與模型的使用方式相符。
  • 離線評估:在代表正式環境的離線訓練、驗證或測試集上執行模型時,收集指標。視問題而定,離線評估可能相當複雜,且運算成本高昂。
  • 定期評估:在模型訓練期間收集指標,這些指標可能是離線評估的替代指標,和/或離線評估所用資料的子集。定期評估是最實用且經濟實惠的選擇,但可能無法完全代表生產環境。目標是使用離線評估的權宜替代方案,同時不犧牲訓練期間收到的信號可靠性。

設定定期評估

建議您在訓練期間定期進行評估,原因如下:

最簡單的設定是在同一個運算執行個體中執行訓練和定期評估,並定期交替執行訓練和評估。在這種情況下,用於執行評估的批次大小應至少與用於訓練的批次大小相同。這是因為您不需要在評估期間維持模型啟用狀態,因此每個範例的運算需求會降低。

定期評估,但間隔不是時間,而是步驟。根據時間間隔評估時,訓練曲線會更難解讀,尤其是訓練作業可能受到搶占、網路延遲問題等影響時。

驗證和測試指標的週期性 (使用隨機訓練集、驗證集、測試集分割時) 可能表示實作錯誤,例如:

  • 測試資料與訓練資料重疊。
  • 訓練資料未經過適當隨機排序。

定期評估步驟間隔,有助於找出這些問題。

如果評估集無法整除批次大小,就會出現部分批次。請確保填補的範例已正確加權 (如在計算批次平均損失時,範例的加權平均值),以免損失函式受到這些範例影響而產生偏差。通常,您可以將這些填補範例的權重設為零。

儲存每次評估的充足資訊,以支援離線分析。 建議您儲存所選個別範例的預測結果,因為這些結果對偵錯來說非常寶貴。產生 SavedModels 等構件,可簡化評估工作完成後的臨時模型檢查。

選擇定期評估的樣本

週期性評估工作可能無法在合理的時間內,針對完整的離線評估集計算指標。這個問題通常需要定期評估取樣資料。建構取樣資料集時,請考量樣本大小的問題,以及不平衡資料集中的特殊疑慮。

樣本大小

檢查定期工作使用的取樣資料集計算出的成效,是否與整個離線評估集的成效相符,也就是確保取樣資料集和完整資料集之間沒有偏差。

用於定期評估的資料集應符合下列條件:

  • 資料量夠小,可輕鬆產生整個模型的預測結果。
  • 資料量夠大,可執行下列兩項操作:
    • 準確評估模型改善情形,也就是說,評估結果不應受到標籤雜訊影響。
    • 在連續試驗中進行多次這類評估,並產生準確的預估結果。也就是說,驗證集要夠大,才能避免模型隨著時間「適應」驗證集,但無法泛化至保留的測試集。不過,這項考量很少會成為實際問題。

不平衡資料集

對於不平衡的資料集,罕見少數類別的成效通常會很雜亂。如果資料集中的少數樣本數量不多,請記錄正確預測的樣本數量,進一步瞭解準確度提升情形。舉例來說,敏感度提升 0.05 聽起來很令人振奮,但這項提升是否只是因為多了一個正確的例子?

儲存檢查點,並回溯選取最佳檢查點

摘要:執行固定步數的訓練,並回顧性地從執行中選擇最佳檢查點。

大多數深度學習架構都支援模型檢查點。也就是說,系統會定期將模型的目前狀態儲存到磁碟。檢查點可讓訓練工作在運算執行個體中斷時繼續執行。最佳檢查點通常不是最後一個檢查點,尤其是當驗證集效能不會隨著時間持續提升,而是圍繞特定值波動時。

設定管道,追蹤訓練期間目前為止 N 個最佳檢查點。訓練結束時,模型選取作業只是選擇最佳檢查點。我們將此方法稱為「回溯最佳檢查點選取」。通常不需要支援預先停止,因為您已預先指定試用預算,並保留目前為止 N 個最佳檢查點。

設定實驗追蹤

摘要:追蹤不同實驗時,請追蹤多項要點,例如研究中檢查點的最佳成效,以及研究的簡短說明。

建議您在試算表中追蹤實驗結果。我們的試算表通常包含下列資料欄:

  • 研究名稱
  • 研究設定的儲存位置連結。
  • 研究的附註或簡短說明。
  • 執行的試驗次數
  • 研究中最佳檢查點的驗證集效能。
  • 具體的重現指令,或有關啟動訓練時未提交的必要變更的附註。

尋找方便使用的追蹤系統,至少要能擷取上述資訊。未追蹤的實驗可能不存在。

批次正規化實作詳細資料

摘要:現今,您通常可以將批次正規化替換為 LayerNorm,但如果無法替換,變更批次大小或主機數量時,就會出現棘手的細節。

批次正規化會使用目前批次的平均值和變異數,將啟動正規化。不過,在多裝置設定中,除非明確同步處理,否則這些統計資料在每部裝置上都會有所不同。根據軼事報告 (大多與 ImageNet 相關),只使用約 64 個樣本計算這些正規化統計資料,實際上效果更好。(請參閱「Train longer, generalize better: closing the generalization gap in large batch training of neural networks」一文,瞭解 Ghost Batch Normalization 的說明)。 將總批次大小和用於計算批次常態化統計資料的範例數分離,對於批次大小比較特別有用。

Ghost 批次正規化實作項目不一定能正確處理每個裝置的批次大小大於虛擬批次大小的情況。在這種情況下,您需要在每部裝置上對批次進行子取樣,才能取得適當數量的批次正規化統計資料範例。

測試模式批次正規化中使用的指數移動平均值 (EMA) 只是訓練統計資料的線性組合。因此,您只需要在檢查點儲存這些 EMA 前同步處理即可。不過,部分常見的批次正規化實作項目不會同步處理這些 EMA,只會儲存第一個裝置的 EMA。

多主機管道的注意事項

摘要:對於記錄、評估、RNG、檢查點和資料分片,多主機訓練很容易導致錯誤!

如果是多主機管道,請執行下列操作:

  • 確認管道只會在一個主機上記錄及檢查點。
  • 在評估或檢查點前,先同步處理主機間的批次正規化統計資料
  • 將資料檔案分散到各個主機,通常可提升效能。

重要事項:請確保主機間的 RNG 種子相同 (用於模型初始化),且主機間的 RNG 種子不同 (用於資料隨機排序/前處理)。因此請務必適當標記。