本節詳細說明訓練管道。
最佳化輸入管道
摘要:輸入輸入管道的原因和乾預工作,製作的工作量極大。使用分析器,並留意常見問題。
使用適當的分析器 (例如以下其中一種) 診斷輸入端管道:
- JAX 適用的 Perfetto
- TensorFlow 的 TensorFlow 分析器。
最重要的是,特定原因和乾預措施具有非常高的工作。 較廣泛的工程考量 (例如盡可能減少磁碟足跡) 可能會影響輸入管道效能。
以下是輸入繫結管道的常見原因:
- 資料不會與訓練程序合併,導致 I/O 延遲。舉例來說,透過網路讀取訓練資料可能會導致 I/O 延遲。
- 昂貴的線上資料預先處理作業。建議先離線處理,然後儲存結果。
- 幹擾資料同步處理預先擷取的非預期的同步處理限制。例如,使用 CommonLoopUtils 中的裝置與主機同步處理指標時。
建議您針對輸入繫結管道進行以下乾預:
- 檢測輸入管道以預先擷取範例 (例如 tf.data.Dataset.prefetch)。
- 請盡早從管道中移除未使用的功能和中繼資料。
- 提高產生輸入管道範例的工作數量 (例如使用 tf.data 服務)。
評估模型效能
摘要:執行大規模批次評估作業,而非訓練定期執行評估,而非一般的時間間隔。
評估設定
您可以使用下列設定來評估模型的效能:
- 線上評估:在模型在實際工作環境中提供預測資料時收集指標。線上評估通常會提供最準確的模型品質評估結果,因為這與模型的使用方式相符。
- 離線評估:當模型在離線訓練、驗證或測試實際工作環境的測試集上執行時,收集指標。視問題而定,離線評估可能會在合理性上產生,且相當昂貴。
- 定期評估:在模型訓練期間收集指標,這些指標可能是離線評估的 Proxy,和/或離線評估使用的資料子集。定期評估是最理心和經濟性的選擇,但不一定能完整代表實際工作環境。目標是在離線評估期間使用密集的 Proxy,同時避免在訓練期間接收信號的可靠性。
設定定期評估
我們建議在訓練期間定期執行評估,原因如下:
- 即時監控訓練進度。
- 協助選擇回溯模型檢查點。
- 在訓練結束時查看訓練曲線。
最簡單的設定是在同一運算執行個體中同時執行訓練和定期評估,定期更換訓練和評估結果。在這種情況下,用於執行評估的批次大小至少應與訓練所需的批次大小相同。這是因為您不需要在評估時維持模型啟用,進而減少每個範例的計算需求條件。
定期執行定期評估,而非時間間隔。依據時間間隔進行評估可能會難以解譯訓練曲線,特別是當訓練的訓練結果可能受到先佔問題、網路延遲問題等影響時。
驗證和測試指標的定期性 (使用重組訓練集、驗證集、測試集分割) 可以識別實作錯誤,例如:
- 測試與訓練資料重疊的資料。
- 訓練資料未正確重組。
定期計算時間間隔有助於找出這些問題。
如果批次大小無法評估評估集,就可能會發生部分批次作業。計算邊框間距範例的權重 (以範例運算中平均批次平均值的加權平均值) 為依據,以免損失函式偏誤。通常,您可以將這些邊框間距設為 0。
為每項評估作業儲存足夠的資訊,以便進行離線分析。 在理想情況下,依據個別個別樣本儲存預測結果,因為這樣可以進行偵錯。產生構件 (例如 SavedModel) 後,在評估工作完成後可簡化臨時模型檢查作業。
選擇範例進行定期評估
定期評估工作執行速度可能不足,無法完整計算完整離線評估集的指標。這個問題往往需要取樣資料,才能進行定期評估。 建構取樣資料集時,請考慮樣本大小以及對不平衡資料集特別的疑慮。
樣本數量
請檢查定期工作使用的取樣資料集運算效能與整個離線評估集的效能是否相等,也就是確保樣本資料集與完整資料集之間沒有偏差。
用於定期評估的資料集應如下所示:
- 規模夠小,可以輕鬆產生整個模型的模型預測作業。
- 大小必須足以同時執行下列兩項工作:
- 準確評估模型的表現,也就是說,測量結果不應受到標籤雜訊的影響。
- 系統會依序多次試用這類評估作業,並產生準確的預估值。也就是說,如果足以將變更大小「不適應」為已保留的測試集,那麼這些做法就夠了,這個做法能夠避免過度適應設計。不過,這個考量因素通常不為實際的疑慮。
不平衡資料集
就不平衡資料集而言,很少見的少數類別的效能通常很吵雜。如果資料集只有少量樣本,則請正確記錄預測樣本數,以取得更準確的深入分析結果。舉例來說,0.05 的靈敏度改善是讓人感到振奮的,但這只是其中一個例子是否正確?
儲存檢查點,並回溯選取最合適的檢查點
摘要:針對固定數量的步數執行訓練,並回頭選擇跑步的最佳檢查點。
大多數深度學習架構都支援模型檢查點。也就是說,模型的目前狀態會定期儲存到磁碟。檢查點可讓訓練工作靈活彈性,能計算執行個體中斷情形。最佳檢查點通常不是最後一個檢查點,尤其是當驗證集效能不會隨時間增加,但特定值停滯不前。
設定管道,以追蹤訓練期間目前看到的 N 個最佳檢查點。訓練結束時,模型選擇就是選擇最佳檢查點。此方法稱為回溯最佳化檢查點。通常不需要支援潛在的提前停止作業,因為您已預先指定試用預算,並保留目前為止顯示的 N 個最佳檢查點。
設定實驗追蹤
摘要:追蹤不同的實驗時,您可以追蹤多項重要資訊,例如研究中成效最佳的檢查點,以及研究的簡短說明。
建議你在試算表中追蹤實驗結果。我們的試算表通常包含下列資料欄:
- 研究名稱
- 儲存研究設定所在位置的連結。
- 研究的附註或簡短說明。
- 測試次數
- 研究中最佳檢查點的驗證組合。
- 對於需要啟動訓練且哪些未提交的變更,都需要具體的重現指令或註意事項。
尋找方便擷取至少一項所列資訊的便利追蹤系統。未追蹤的實驗也可能不存在。
批次正規化實作詳細資料
摘要:目前,您通常會將 批次正規化取代 LayerNorm,但在無法替換的情況下,如果在變更批次大小或主機數量時出現許多細節,
批次正規化會使用自身目前批次的平均值和變異化正規化來啟用。不過,在多裝置設定中,除非每部裝置都明確同步處理,否則這些統計資料會有差異。之前的報告 (主要是 ImageNet) 表示在實作上正規化統計資料時,僅使用大約 64 個範例會更好。(請參閱「訓練時間更長,改用一般化:在大型類神經網路的大量批次訓練中清除一般化」一節的說明)。分批批次大小和用於計算批次常態統計資料的範例數量特別實用,特別適合用於批次大小比較。
如果發生個別裝置批次大小大於虛擬批次大小的情況,Ghost 批次正規實作作業不一定能正確處理。在這種情況下,您需要在每部裝置上分批建立批次,以取得適當的批次 Norm 統計資料範例。
測試模式批次正規化的指數移動平均數 (EMA) 只是訓練統計資料的線性組合。因此,您只需同步處理這些 EMA 檔案,再將檔案儲存至檢查點。不過,有些批次正規化作業不會同步處理這些 EMA,只會儲存第一部裝置的 EMA。
多主機管道的注意事項
摘要:如果是記錄、評估、RNG、檢查點和資料資料分割,多重主機訓練可讓您輕鬆加入錯誤!
針對多主機管道執行下列操作:
- 確保管道僅記錄一個主機上的記錄和檢查點。
- 在評估或檢查點「之前」,跨主機同步處理批次正規化統計資料。
- 分割多個主機的資料檔案,因為這樣做可以提高效能。
重要事項:確保在各主機 (相同的模型初始化) 上存在的 RNG 種子相同,以及不同主機的不同種子 (用於資料重組/預先處理) 的種子值。因此,請務必正確標示。