執行超參數調校任務的暖啟動 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

執行超參數調校任務的暖啟動

使用暖啟動開始超參數調校任務,同時使用一或多個先前的調校任務做為起點。先前調校任務的結果可用來通知新的調校任務中要搜尋哪些超參數組合。超參數調校會使用貝葉斯或隨機搜尋,從您指定的範圍來選擇超參數值組合。如需詳細資訊,請參閱 如何使用 Amazon SageMaker 進行超參數調整。使用先前超參數調校任務學到的資訊時,可以更有效率地搜尋最佳超參數值組合,有助於提高新的超參數調校任務效能。

注意

暖啟動調校任務通常比標準超參數調校任務要花更長的時間才能開始,因為其必須先載入父系任務的結果之後才會開始任務。拉長的時間取決於父系任務啟動的訓練任務總數而定。

考慮暖啟動的原因包含下列幾點:

  • 如要依據每次反覆運算後所見的結果,在多個調校任務之上逐步增加訓練任務的數量。

  • 如要使用您收到的新資料來調校模型。

  • 如要變更先前調校任務所用的超參數範圍、將靜態超參數變更為可調校,或將可調校的超參數變更為靜態值。

  • 您提早停止先前的超參數調校任務,或其意外停止。

暖啟動調校任務的類型

有兩種不同類型的暖啟動調校任務:

IDENTICAL_DATA_AND_ALGORITHM

新的超參數調校任務會使用父系調校任務的相同輸入資料和訓練影像。您可以變更要搜尋的超參數範圍,以及超參數調校任務啟動的訓練任務數量上限。您也可以將超參數從可調校變更為靜態,或從靜態變更為可調校,但靜態超參數加上可調校的超參數總數必須與所有父系任務保持相同。除非新版本的變更不會影響演算法本身,否則您都不能使用新版本的訓練演算法。例如,若是可改善記錄日誌或新增對不同資料格式支援的變更,即允許使用。

當您使用先前超參數調校任務所用的相同訓練資料時,請使用相同的資料和演算法,但您想要提高訓練任務總數或變更超參數的範圍或值。

當您執行 IDENTICAL_DATA_AND_ALGORITHM 類型的暖啟動調校任務時,會有額外的欄位來回應名為 OverallBestTrainingJobDescribeHyperParameterTuningJob。此欄位的值是TrainingJobSummary針對此調整工作啟動的所有訓練工作,以及為暖開始調整工作指定的所有父項工作中,具有最佳目標度量值的訓練工作。

TRANSFER_LEARNING

新的超參數調校任務可以包含輸入資料、超參數範圍、同時訓練任務數量上限,以及父系超參數調校任務不同的訓練任務數量上限。您也可以將超參數從可調校變更為靜態,或從靜態變更為可調校,但靜態超參數加上可調校的超參數總數必須與所有父系任務保持相同。訓練演算法映像的版本也可以不同於父系超參數調校任務使用的版本。當您使用轉移學習時,大幅影響目標指標值的資料集或演算法變更可能會降低使用暖啟動調校的實用性。

暖啟動調校限制

以下限制適用於所有暖啟動調校任務:

  • 調校任務最多可以有 5 個父系任務,而且所有父系任務必須處於結束狀態 (CompletedStoppedFailed) 之後,您才能啟動新的調校任務。

  • 新調校任務使用的目標指標必須與父系任務所用的目標指標相同。

  • 父系任務和新調校任務的靜態超參數加上可調校的超參數總數必須保持相同。因此,如果您認為未來可能會在暖啟動調校任務中使用可調校超參數,則應該在建立調校任務將其新增為靜態超參數。

  • 您不能變更父系任務和新調校任務間的每個超參數類型 (連續、整數、分類)。

  • 從父系任務中可調校的超參數變更為新調校任務中的靜態超參數總數,加上靜態超參數的值變更數量不能超過 10。例如,假設父系任務已具有可能值為 redblue 的可調校分類超參數,若您將新調校任務中的該超參數變更為靜態,即會視為 2 個變更,並計入允許的總數 10 當中。如果相同超參數在父系任務中具有靜態值 red,而您將新調校任務中的該靜態值變更為 blue,這也會視為 2 個變更。

  • 暖啟動調校不是遞迴的。例如,如果您將 MyTuningJob3 建立為暖啟動調校任務,其父系任務為 MyTuningJob2,而 MyTuningJob2 本身為暖啟動調校任務,其父系任務為 MyTuningJob1,則 MyTuningJob3 不會使用在執行 MyTuningJob1 時學到的資訊。如果您想要使用來自 MyTuningJob1 的資訊,您必須明確將它新增為 MyTuningJob3 的父系。

  • 暖啟動調校任務中每個父系任務啟動的訓練任務,都會計入調校任務的 500 個訓練任務上限。

  • 2018 年 10 月 1 日之前建立的超參數調校任務不能做為暖啟動調校任務的父系任務。

暖啟動調校範例筆記本

如需顯示如何使用暖啟動調整的範例筆記本,請參閱 https://github.com/awslabs/ amazon-sagemaker-examples /blob /主/超參數調整/影像分類開始/溫暖開始/hpo_image_分類/溫度開始 如需如何建立及存取可用來執行中範例的 Jupyter 筆記本執行個體的指示 SageMaker,請參閱。範例筆記本建立筆記本執行個體並開啟之後,請選取 [SageMaker 範例] 索引標籤以查看所有 SageMaker 範例的清單。暖啟動調校範例筆記本位於超參數調校區段,且名稱為 hpo_image_classification_warmstart.ipynb。若要開啟筆記本,請按一下其使用標籤,然後選取建立複本

建立暖啟動調校任務

您可以使用 Python 的低階 AWS SDK (博托 3) 或高階 SageMaker Python SDK 來建立暖啟動調整工作。

創建一個熱啟動調整 Job (Python 的低級別 SageMaker API (投票 3))

若要使用暖啟動調校,請指定 HyperParameterTuningJobWarmStartConfig 物件的值,並將其做為 WarmStartConfig 欄位傳遞給 CreateHyperParameterTuningJob 呼叫。

下面的代碼演示了如何創建一個HyperParameterTuningJobWarmStartConfig對象,並通過使用 Python 的低級 SageMaker API(博托 3)將其傳遞給CreateHyperParameterTuningJob作業。

建立 HyperParameterTuningJobWarmStartConfig 物件:

warm_start_config = { "ParentHyperParameterTuningJobs" : [ {"HyperParameterTuningJobName" : 'MyParentTuningJob'} ], "WarmStartType" : "IdenticalDataAndAlgorithm" }

建立暖啟動調校任務:

smclient = boto3.Session().client('sagemaker') smclient.create_hyper_parameter_tuning_job(HyperParameterTuningJobName = 'MyWarmStartTuningJob', HyperParameterTuningJobConfig = tuning_job_config, # See notebook for tuning configuration TrainingJobDefinition = training_job_definition, # See notebook for job definition WarmStartConfig = warm_start_config)

創建一個熱啟動調整 Job(SageMakerPython SDK)

若要使用 Amazon SageMaker Python 開發套件執行暖啟動調整任務,請執行下列動作:

  • 使用 WarmStartConfig 物件,指定父系任務和暖啟動類型。

  • 將該WarmStartConfig對象作為對HyperparameterTuner象的warm_start_config參數的值傳遞。

  • 呼叫 HyperparameterTuner 物件的 fit 方法。

如需有關使用 Amazon SageMaker Python 開發套件進行超參數調整的詳細資訊,請參閱 https://github.com/aws/ sagemaker-python-sdk # sagemaker-automatic-model-tuning

此範例使用的估算器是使用 影像分類 - MXNet 演算法進行訓練。下列程式碼會設定超參數範圍,以讓暖啟動調校任務在該範圍內尋找最佳的值組合。如需如何設定超參數範圍的資訊,請參閱定義超參數範圍

hyperparameter_ranges = {'learning_rate': ContinuousParameter(0.0, 0.1), 'momentum': ContinuousParameter(0.0, 0.99)}

下列程式碼會建立 WarmStartConfig 物件,以設定暖啟動調校任務。

from sagemaker.tuner import WarmStartConfig,WarmStartTypes parent_tuning_job_name = "MyParentTuningJob" warm_start_config = WarmStartConfig(warm_start_type=WarmStartTypes.IDENTICAL_DATA_AND_ALGORITHM, parents={parent_tuning_job_name})

現在,請設定靜態超參數的值;靜態超參數是指在暖啟動調校任務啟動的每個訓練任務中都要保持相同值的超參數。在下列程式碼中,imageclassification 是之前建立的估算器。

imageclassification.set_hyperparameters(num_layers=18, image_shape='3,224,224', num_classes=257, num_training_samples=15420, mini_batch_size=128, epochs=30, optimizer='sgd', top_k='2', precision_dtype='float32', augmentation_type='crop')

現在,請建立 HyperparameterTuner 物件,並以 warm_start_config 引數形式傳遞您之前建立的 WarmStartConfig 物件。

tuner_warm_start = HyperparameterTuner(imageclassification, 'validation:accuracy', hyperparameter_ranges, objective_type='Maximize', max_jobs=10, max_parallel_jobs=2, base_tuning_job_name='warmstart', warm_start_config=warm_start_config)

最後,呼叫 HyperparameterTuner 物件的 fit 方法以啟動暖啟動調校任務。

tuner_warm_start.fit( {'train': s3_input_train, 'validation': s3_input_validation}, include_cls_metadata=False)