假設您已執行教學課程,本頁將說明 Agent Platform Neural Architecture Search 的最佳做法。第一節會完整說明工作流程,您可以按照流程執行 Agent Platform Neural Architecture Search 工作。其他章節則詳細說明每個步驟。強烈建議您先詳閱本頁內容,再執行第一個 Agent Platform Neural Architecture Search 工作。
建議工作流程
以下是 Agent Platform Neural Architecture Search 的建議工作流程摘要,並提供對應章節的連結,方便您查看詳細資料:
- 拆分第 1 階段搜尋的訓練資料集。
- 確認搜尋空間符合規範。
- 使用基準模型執行完整訓練,並取得驗證曲線。
- 執行替代工作設計工具,找出最佳替代工作。
- 對 Proxy 工作進行最終檢查。
- 設定適當的測試總數和並行測試數,然後開始搜尋。
- 監控搜尋繪圖,並在收斂、顯示大量錯誤或沒有收斂跡象時停止搜尋。
- 從搜尋結果中選取前 10 個試驗,執行完整訓練,取得最終結果。如要進行完整訓練,您可以使用更多擴增或預先訓練的權重,盡可能獲得最佳效能。
- 分析搜尋結果中儲存的指標/資料,並為日後的搜尋空間疊代作業得出結論。
典型的 Agent Platform Neural Architecture Search

上圖顯示典型的 Agent Platform 神經架構搜尋曲線。Y-axis 顯示試用獎勵,X-axis 則顯示目前已啟動的試用次數。前 100 到 200 次試驗大多是控制器對搜尋空間的隨機探索。
在這些初步探索期間,獎勵會出現大幅差異,因為搜尋空間中正在嘗試許多類型的模型。隨著試驗次數增加,控制器會開始找出更優質的模型。因此,獎勵會先開始增加,然後獎勵變異數和獎勵成長會開始減少,從而顯示收斂。收斂的試驗次數取決於搜尋空間大小,但通常約為 2,000 次。
Agent Platform 神經架構搜尋的兩個階段:代理工作和完整訓練
Agent Platform Neural Architecture Search 分為兩個階段:
Stage1-search 會使用完整訓練的表示法,但規模小得多,通常會在 1 到 2 小時內完成。這個表示法稱為Proxy 工作,有助於降低搜尋成本。
第 2 階段 - 完整訓練:針對第 1 階段搜尋中得分最高的約 10 個模型進行完整訓練。由於搜尋具有隨機性,因此階段 1 搜尋中排名最高的模型,可能不是階段 2 完整訓練中排名最高的模型。因此,請務必選取模型集進行完整訓練。
由於控制器是從較小的代理工作取得獎勵信號,而不是完整的訓練,因此請務必為工作找出最佳代理工作。
Agent Platform 神經架構搜尋費用
Agent Platform Neural Architecture Search 的費用計算方式如下:
search-cost = num-trials-to-converge * avg-proxy-task-cost。
假設 proxy-task 的運算時間約為完整訓練時間的 1/30,且收斂所需的測試次數約為 2000 次,則搜尋費用約為 67 * full-training-cost。
由於 Agent Platform Neural Architecture Search 費用高昂,建議您花時間調整 Proxy 工作,並在第一次搜尋時使用較小的搜尋空間。
在 Agent Platform 神經架構搜尋的兩個階段之間分割資料集
假設您已擁有基準訓練的訓練資料和驗證資料,建議您在 NAS Agent Platform Neural Architecture Search 的兩個階段中,採用下列資料集分割方式:
- 第 1 階段 - 搜尋訓練:約 90% 的訓練資料
第 1 階段 - 搜尋驗證:約 10% 的訓練資料
Stage2-full-training 訓練:100% 的訓練資料
第 2 階段 - 完整訓練驗證:100% 的驗證資料
第 2 階段完整訓練資料的拆分方式與一般訓練相同。不過,stage1-search 會使用訓練資料分割進行驗證。在第 1 階段和第 2 階段使用不同的驗證資料,有助於偵測因資料集分割而導致的任何模型搜尋偏差。確保訓練資料已充分隨機排序,再進一步分割,且最後 10% 的訓練資料分割與原始驗證資料的分配情形相似。
資料量少或不平衡
如果訓練資料有限,或資料集極度不平衡 (某些類別非常罕見),建議不要進行架構搜尋。如果資料不足,您已在基準訓練中大量擴增資料,則不建議使用模型搜尋。
在這種情況下,您可能只會執行擴增搜尋,尋找最佳擴增政策,而不是搜尋最佳架構。
搜尋空間設計
架構搜尋不應與擴增搜尋或超參數搜尋 (例如學習率或最佳化工具設定) 混用。架構搜尋的目標是比較模型 A 和模型 B 的效能,前提是兩者只有架構上的差異。因此,擴增和超參數設定應保持不變。
架構搜尋完成後,即可在不同階段執行擴增搜尋。
Agent Platform Neural Architecture Search 的搜尋空間大小最多可達 10^20。但如果搜尋空間較大,您可以將搜尋空間劃分為互斥的部分。舉例來說,您可以先搜尋編碼器,再搜尋解碼器或標頭。如果仍想對所有部分進行聯合搜尋,可以圍繞先前找到的最佳個別選項,建立較小的搜尋空間。
(選用) 設計搜尋空間時,您可以將模型縮放與區塊設計分開。應先使用縮小比例的模型完成方塊設計搜尋,這樣一來,代理工作執行階段的成本就會低得多。然後另外搜尋放大模型。詳情請參閱「
Examples of scaled down models」。
縮短訓練和搜尋時間
執行 Agent Platform Neural Architecture Search 前,請務必先縮短基準模型的訓練時間。從長遠來看,這能為您節省成本。以下是幾種最佳化訓練的方式:
- 盡量提高資料載入速度:
- 確認資料所在的 bucket 與工作位於相同區域。
- 如果使用 TensorFlow,請參閱
Best practice summary。您也可以嘗試使用 TFRecord 格式處理資料。 - 如果使用 PyTorch,請按照相關指南,有效率地訓練 PyTorch。
- 使用分散式訓練,充分發揮多個加速器或多台機器的優勢。
- 使用混合精確度訓練,大幅加快訓練速度並減少記憶體用量。如要瞭解 TensorFlow 混合精確度訓練,請參閱
Mixed Precision。 - 部分加速器 (例如 A100) 通常成本效益較高。
- 調整批次大小,確保充分運用 GPU。
下圖顯示 GPU 使用率偏低 (50%)。
增加批次大小有助於更充分地運用 GPU。不過,請謹慎增加批次大小,因為這可能會增加搜尋期間發生記憶體不足錯誤的機率。 - 如果某些架構區塊與搜尋空間無關,您可以嘗試載入這些區塊的預先訓練檢查點,加快訓練速度。預先訓練檢查點在搜尋空間中應相同,且不應引入偏差。舉例來說,如果搜尋空間僅適用於解碼器,編碼器就能使用預先訓練檢查點。
每個搜尋試驗的 GPU 數量
減少每次試驗使用的 GPU 數量,縮短啟動時間。舉例來說,2 個 GPU 需要 5 分鐘才能啟動,8 個 GPU 則需要 20 分鐘。使用 2 個 GPU 執行 Agent Platform Neural Architecture Search 工作 Proxy 工作,效率會更高。
搜尋廣告活動的測試總數和平行測試
試用設定總數
搜尋並選取最佳的替代工作後,即可啟動完整搜尋。您無法事先得知需要多少次試驗才能收斂。 收斂的試驗次數取決於搜尋空間大小,但通常約為 2,000 次。
建議將 --max_nas_trial 設為非常高的值 (約 5,000 到 10,000),然後在搜尋圖表顯示收斂時提早取消搜尋工作。您也可以使用 search_resume 指令,繼續執行先前的搜尋工作。不過,您無法從其他搜尋繼續工作繼續搜尋,因此只能繼續執行原始搜尋工作一次。
平行試驗設定
stage1-search 工作會同時執行 --max_parallel_nas_trial 次試驗,進行批次處理。這對於縮短搜尋工作的整體執行時間至關重要。您可以計算搜尋的預期天數:
days-required-for-search = (trials-to-converge / max-parallel-nas-trial) * (avg-trial-duration-in-hours / 24)
注意:一開始,您可以將 3000 大致估計為 trials-to-converge,這是個不錯的上限。一開始,您可以將 2 小時大致估計為 avg-trial-duration-in-hours,這是每個 Proxy 工作所用時間的不錯上限。建議您根據專案的加速器配額和 days-required-for-search,將 --max_parallel_nas_trial 設為 ~20 到 50。舉例來說,如果您將 --max_parallel_nas_trial 設為 20,且每個 Proxy 工作使用兩個 NVIDIA T4 GPU,則您應保留至少 40 個 NVIDIA T4 GPU 的配額。--max_parallel_nas_trial 設定不會影響整體搜尋結果,但會影響 days-required-for-search。max_parallel_nas_trial 的設定值可以較小,例如約 10 個 (20 個 GPU),但您應大致估計 days-required-for-search,並確保其在工作逾時限制內。
根據預設,stage2-full-training 工作通常會平行訓練所有試驗。通常是同時執行的前 10 項試驗。不過,如果每個 stage2-full-training 試驗使用的 GPU 數量過多 (例如每個試驗使用八個 GPU),且配額不足,您可以分批手動執行 stage2 工作,例如先執行五個試驗的 stage2-full-training,然後再執行下五個試驗的 stage2-full-training。
預設工作逾時
預設的 NAS 工作逾時時間為 14 天,之後工作就會取消。如果預計工作會執行較長時間,可以嘗試再繼續搜尋工作 14 天,但只能繼續一次。整體而言,包括繼續在內,搜尋工作最多可執行 28 天。
失敗的測試次數上限設定
失敗的測試次數上限應設為 max_nas_trial 的 1/3 左右。當失敗的測試次數達到這個上限時,工作就會取消。
何時停止搜尋
在下列情況下,您應停止搜尋:
搜尋曲線開始收斂 (變異數減少):
注意:如果未使用延遲限制,或使用延遲限制較寬鬆的嚴格延遲限制,曲線可能不會顯示獎勵增加,但仍應顯示收斂。這是因為控制器可能已在搜尋初期看到良好的準確度。超過 20% 的試用期顯示無效獎勵 (失敗):

即使經過約 500 次試驗,搜尋曲線也不會增加或收斂 (如上所示)。如果顯示獎勵增加或差異減少,即可繼續。