本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
執行超參數調校任務的暖啟動
使用暖啟動開始超參數調校任務,同時使用一或多個先前的調校任務做為起點。先前調校任務的結果可用來通知新的調校任務中要搜尋哪些超參數組合。超參數調校會使用貝葉斯或隨機搜尋,從您指定的範圍來選擇超參數值組合。如需詳細資訊,請參閱了解 Amazon 中可用的超參數調校策略 SageMaker。使用先前超參數調校任務學到的資訊時,可以更有效率地搜尋最佳超參數值組合,有助於提高新的超參數調校任務效能。
注意
暖啟動調校任務通常比標準超參數調校任務要花更長的時間才能開始,因為其必須先載入父系任務的結果之後才會開始任務。拉長的時間取決於父系任務啟動的訓練任務總數而定。
考慮暖啟動的原因包含下列幾點:
-
如要依據每次反覆運算後所見的結果,在多個調校任務之上逐步增加訓練任務的數量。
-
如要使用您收到的新資料來調校模型。
-
如要變更先前調校任務所用的超參數範圍、將靜態超參數變更為可調校,或將可調校的超參數變更為靜態值。
-
您提早停止先前的超參數調校任務,或其意外停止。
暖啟動調校任務的類型
有兩種不同類型的暖啟動調校任務:
IDENTICAL_DATA_AND_ALGORITHM
-
新的超參數調校任務會使用父系調校任務的相同輸入資料和訓練影像。您可以變更要搜尋的超參數範圍,以及超參數調校任務啟動的訓練任務數量上限。您也可以將超參數從可調校變更為靜態,或從靜態變更為可調校,但靜態超參數加上可調校的超參數總數必須與所有父系任務保持相同。除非新版本的變更不會影響演算法本身,否則您都不能使用新版本的訓練演算法。例如,若是可改善記錄日誌或新增對不同資料格式支援的變更,即允許使用。
當您使用先前超參數調校任務所用的相同訓練資料時,請使用相同的資料和演算法,但您想要提高訓練任務總數或變更超參數的範圍或值。
當您執行
IDENTICAL_DATA_AND_ALGORITHM
類型的暖啟動調校任務時,會有額外的欄位來回應名為OverallBestTrainingJob
的DescribeHyperParameterTuningJob
。此欄位的值是 訓練任務TrainingJobSummary的 ,其具有此調校任務所啟動之所有訓練任務的最佳目標指標值,以及針對暖啟動調校任務指定的所有父任務。 TRANSFER_LEARNING
-
新的超參數調校任務可以包含輸入資料、超參數範圍、同時訓練任務數量上限,以及父系超參數調校任務不同的訓練任務數量上限。您也可以將超參數從可調校變更為靜態,或從靜態變更為可調校,但靜態超參數加上可調校的超參數總數必須與所有父系任務保持相同。訓練演算法映像的版本也可以不同於父系超參數調校任務使用的版本。當您使用轉移學習時,大幅影響目標指標值的資料集或演算法變更可能會降低使用暖啟動調校的實用性。
暖啟動調校限制
以下限制適用於所有暖啟動調校任務:
-
調校任務最多可以有 5 個父系任務,而且所有父系任務必須處於結束狀態 (
Completed
、Stopped
或Failed
) 之後,您才能啟動新的調校任務。 -
新調校任務使用的目標指標必須與父系任務所用的目標指標相同。
-
父系任務和新調校任務的靜態超參數加上可調校的超參數總數必須保持相同。因此,如果您認為未來可能會在暖啟動調校任務中使用可調校超參數,則應該在建立調校任務將其新增為靜態超參數。
-
您不能變更父系任務和新調校任務間的每個超參數類型 (連續、整數、分類)。
-
從父系任務中可調校的超參數變更為新調校任務中的靜態超參數總數,加上靜態超參數的值變更數量不能超過 10。例如,假設父系任務已具有可能值為
red
與blue
的可調校分類超參數,若您將新調校任務中的該超參數變更為靜態,即會視為 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/master/hyperparameter_tuning/image_classification_warmstart/hpo_image_classification_warmstart .ipynb。hpo_image_classification_warmstart.ipynb
。若要開啟筆記本,請按一下其使用標籤,然後選取建立複本。
建立暖啟動調校任務
您可以使用 Python 的低階 AWS SDK (Boto 3) 或高階 Python SageMakerSDK來建立暖啟動調校任務。
建立暖啟動調校任務 (Python 的低階 SageMaker API (Boto 3))
若要使用暖啟動調校,請指定 HyperParameterTuningJobWarmStartConfig
物件的值,並將其做為 WarmStartConfig
欄位傳遞給 CreateHyperParameterTuningJob
呼叫。
下列程式碼說明如何使用 Python 的低階 SageMaker API (Boto 3) 建立HyperParameterTuningJobWarmStartConfig
物件並將其傳遞至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)
建立暖啟動調校任務 (SageMaker Python SDK)
若要使用 Amazon SageMaker Python SDK
-
使用
WarmStartConfig
物件,指定父系任務和暖啟動類型。 -
傳遞
WarmStartConfig
物件作為HyperparameterTuner物件 warm_start_config
引數的值。 -
呼叫
HyperparameterTuner
物件的fit
方法。
如需使用 Amazon SageMaker Python SDK
此範例使用的估算器是使用 影像分類-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)