設定並啟動超參數調校任務 - Amazon SageMaker

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

設定並啟動超參數調校任務

重要

允許 Amazon SageMaker Studio 或 Amazon 工作室經典版建立 Amazon SageMaker SageMaker 資源的自訂IAM政策還必須授予許可,才能將標籤新增到這些資源。需要向資源添加標籤的權限,因為 Studio 和 Studio 經典版會自動標記它們創建的任何資源。如果IAM原則允許 Studio 和 Studio 典型版建立資源,但不允許標記,則在嘗試建立資源時可能會發生 AccessDenied "" 錯誤。如需詳細資訊,請參閱提供標記資 SageMaker源的權限

AWS Amazon 的受管政策 SageMaker授予建立 SageMaker 資源的權限,已包含在建立這些資源時新增標籤的權限。

超參數是高階參數,會在模型訓練期間影響學習程序。如要取得最佳的模型預測,您可以最佳化超參數組態或設定超參數值。尋找最佳組態的程序稱為超參數調校。若要設定並啟動超參數調校任務,請完成這些指南中的步驟。

超參數調校任務的設定

若要指定超參數調整工作的設定值,請在建立調整工作時定義JSON物件。將此JSON物件做為HyperParameterTuningJobConfig參數的值傳遞給CreateHyperParameterTuningJobAPI。

在此JSON物件中,指定下列項目:

在此JSON物件中,您可以指定:

  • HyperParameterTuningJobObjective — 用來評估超參數調校任務所啟動之訓練任務效能的目標指標。

  • ParameterRanges — 調校式超參數在最佳化期間可使用的值範圍。如需更多資訊,請參閱定義超參數範圍

  • RandomSeed — 用來初始化虛擬亂數產生器的值。設定隨機種子可讓超參數調校搜尋策略為相同的調校任務產生更一致的組態 (選用)。

  • ResourceLimits — 超參數調校任務可使用的訓練與平行訓練任務的數量上限。

注意

如果您使用自己的演算法進行超參數調整,而不是 SageMaker 內建演算法,則必須定義演算法的度量。如需詳細資訊,請參閱定義指標

下列程式碼範例顯示如何使用內建XGBoost演算法來設定超參數調整工作。此程式碼範例說明如何定義 etaalphamin_child_weightmax_depth 超參數的範圍。如需有關這些和其他超參數的詳細資訊,請參閱XGBoost參數

在此程式碼範例中,超參數調整工作的目標度量會尋找最大化的超參數組態。validation:auc SageMaker 內建演算法會自動將目標指標寫入 CloudWatch 記錄。下列程式碼範例也示範了如何設定 RandomSeed

tuning_job_config = { "ParameterRanges": { "CategoricalParameterRanges": [], "ContinuousParameterRanges": [ { "MaxValue": "1", "MinValue": "0", "Name": "eta" }, { "MaxValue": "2", "MinValue": "0", "Name": "alpha" }, { "MaxValue": "10", "MinValue": "1", "Name": "min_child_weight" } ], "IntegerParameterRanges": [ { "MaxValue": "10", "MinValue": "1", "Name": "max_depth" } ] }, "ResourceLimits": { "MaxNumberOfTrainingJobs": 20, "MaxParallelTrainingJobs": 3 }, "Strategy": "Bayesian", "HyperParameterTuningJobObjective": { "MetricName": "validation:auc", "Type": "Maximize" }, "RandomSeed" : 123 }

設定訓練任務

超參數調校任務將啟動訓練任務,以尋找超參數的最佳組態。應使用設定這些訓練工作 SageMakerCreateHyperParameterTuningJobAPI。

若要設定訓練工作,請定義JSON物件,並將其傳遞為內部TrainingJobDefinition參數的值CreateHyperParameterTuningJob

在此JSON物件中,您可以指定下列項目:

  • AlgorithmSpecification — 包含訓練演算法和相關中繼資料的 Docker 映像檔登錄檔路徑。要指定算法,您可以在 Docker 容器中使用自己的自定義構建算法或SageMaker 內置算法(必需)。

  • InputDataConfig — 輸入配置,包括訓練和測試資料 (必要) 的ChannelNameContentType 和資料來源。

  • InputDataConfig — 輸入配置,包括訓練和測試資料 (必要) 的ChannelNameContentType 和資料來源。

  • 演算法輸出的儲存位置。指定您要用來存放訓練任務輸出的 S3 儲存貯體。

  • RoleArn— SageMaker 用來執行任務之 AWS Identity and Access Management (ARNIAM) 角色的 Amazon 資源名稱 ()。任務包括讀取輸入資料、下載 Docker 映像、將模型成品寫入 S3 儲存貯體、將日誌寫入 Amazon CloudWatch 日誌,以及將指標寫入 Amazon CloudWatch (必要)。

  • StoppingCondition — 訓練任務在停止之前可執行的最大執行期 (以秒為單位)。此值應大於訓練模型所需的時間 (必要)。

  • MetricDefinitions — 定義訓練任務發出之任何指標的名稱和常規表達式。只有當您使用自訂訓練演算法時,才定義指標。下列程式碼中的範例使用內建演算法,該演算法已定義指標。如需定義指標 (選用) 的詳細資訊,請參閱定義指標

  • TrainingImage — 指定訓練演算法的 Docker 容器映像檔 (選用)。

  • StaticHyperParameters — 超參數在調校任務中不調校的超參數名稱和值 (選用)。

在下列程式碼範例中,系統會設定 使用 XGBoost 算法與 Amazon SageMaker 內建演算法的 eval_metricnum_roundobjectiverate_droptweedie_variance_power 參數的靜態值。

SageMaker Python SDK v1
from sagemaker.amazon.amazon_estimator import get_image_uri training_image = get_image_uri(region, 'xgboost', repo_version='1.0-1') s3_input_train = 's3://{}/{}/train'.format(bucket, prefix) s3_input_validation ='s3://{}/{}/validation/'.format(bucket, prefix) training_job_definition = { "AlgorithmSpecification": { "TrainingImage": training_image, "TrainingInputMode": "File" }, "InputDataConfig": [ { "ChannelName": "train", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_train } } }, { "ChannelName": "validation", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_validation } } } ], "OutputDataConfig": { "S3OutputPath": "s3://{}/{}/output".format(bucket,prefix) }, "ResourceConfig": { "InstanceCount": 2, "InstanceType": "ml.c4.2xlarge", "VolumeSizeInGB": 10 }, "RoleArn": role, "StaticHyperParameters": { "eval_metric": "auc", "num_round": "100", "objective": "binary:logistic", "rate_drop": "0.3", "tweedie_variance_power": "1.4" }, "StoppingCondition": { "MaxRuntimeInSeconds": 43200 } }
SageMaker Python SDK v2
training_image = sagemaker.image_uris.retrieve('xgboost', region, '1.0-1') s3_input_train = 's3://{}/{}/train'.format(bucket, prefix) s3_input_validation ='s3://{}/{}/validation/'.format(bucket, prefix) training_job_definition = { "AlgorithmSpecification": { "TrainingImage": training_image, "TrainingInputMode": "File" }, "InputDataConfig": [ { "ChannelName": "train", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_train } } }, { "ChannelName": "validation", "CompressionType": "None", "ContentType": "csv", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": s3_input_validation } } } ], "OutputDataConfig": { "S3OutputPath": "s3://{}/{}/output".format(bucket,prefix) }, "ResourceConfig": { "InstanceCount": 2, "InstanceType": "ml.c4.2xlarge", "VolumeSizeInGB": 10 }, "RoleArn": role, "StaticHyperParameters": { "eval_metric": "auc", "num_round": "100", "objective": "binary:logistic", "rate_drop": "0.3", "tweedie_variance_power": "1.4" }, "StoppingCondition": { "MaxRuntimeInSeconds": 43200 } }

命名並啟動超參數調校任務

設定超參數調整工作之後,您可以呼叫. CreateHyperParameterTuningJobAPI 下列程式碼範例使用了 tuning_job_configtraining_job_definition。這些是在前兩個程式碼範例中所定義的,以建立超參數調校任務。

tuning_job_name = "MyTuningJob" smclient.create_hyper_parameter_tuning_job(HyperParameterTuningJobName = tuning_job_name, HyperParameterTuningJobConfig = tuning_job_config, TrainingJobDefinition = training_job_definition)

檢視訓練任務的狀態

檢視超參數調校任務啟動的訓練任務狀態
  1. 在超參數調校任務清單中,選擇您已啟動的任務。

  2. 選擇 Training jobs (訓練任務)

    中訓練工作的位置。
  3. 檢視每個訓練任務的狀態。若要查看任務的詳細資訊,請選擇訓練任務清單中的某個任務。若要查看超參數調校任務啟動之所有訓練任務的狀態摘要,請參閱訓練任務狀態計數器

    訓練任務可以是:

    • Completed — 訓練任務已成功完成。

    • InProgress — 訓練任務進行中。

    • Stopped — 訓練任務在完成前已手動停止。

    • Failed (Retryable) — 訓練任務失敗,但可以重試。只有當訓練任務是因內部服務發生錯誤而失敗時,才可以重試失敗的任務。

    • Failed (Non-retryable) — 訓練任務失敗,且無法重試。用戶端發生錯誤時,即無法重試失敗的訓練任務。

    注意

    您可以停止超參數調校任務並刪除基礎資源,但任務本身無法刪除。

檢視最佳訓練任務

超參數調校任務會使用每個訓練任務傳回的目標指標,來評估訓練任務。當超參數調校任務正在進行時,最佳訓練任務就是目前傳回最佳目標指標的任務。當超參數調校任務完成之後,最佳訓練任務就是傳回最佳目標指標的任務。

若要查看最佳的訓練任務,請選擇最佳訓練任務

超參數調整工作主控台中最佳訓練工作的位置。

若要將最佳訓練工作部署為可在 SageMaker 端點託管的模型,請選擇 [建立模型]。

後續步驟

清除