Configurar e executar um trabalho de ajuste de hiperparâmetros - Amazon SageMaker

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Configurar e executar um trabalho de ajuste de hiperparâmetros

Importante

Políticas personalizadas do IAM que permitem que o Amazon SageMaker SageMaker Studio ou o Amazon Studio Classic criem SageMaker recursos da Amazon também devem conceder permissões para adicionar tags a esses recursos. A permissão para adicionar tags aos recursos é necessária porque o Studio e o Studio Classic marcam automaticamente todos os recursos que eles criam. Se uma política do IAM permitir que o Studio e o Studio Classic criem recursos, mas não permitisse a marcação, erros AccessDenied "" podem ocorrer ao tentar criar recursos. Para ter mais informações, consulte Forneça permissões para recursos de marcação SageMaker.

AWS Políticas gerenciadas para a Amazon SageMakerque dão permissões para criar SageMaker recursos já incluem permissões para adicionar tags ao criar esses recursos.

Um hiperparâmetro é um parâmetro de alto nível que influencia o processo de aprendizado durante o treinamento de modelos. Para obter as melhores previsões do modelo, você pode otimizar uma configuração de hiperparâmetros ou definir valores de hiperparâmetros. O processo de encontrar uma configuração ideal é chamado de ajuste de hiperparâmetros. Para configurar e executar um trabalho de ajuste de hiperparâmetros, conclua as etapas nestas orientações.

Configurações do trabalho de ajuste de hiperparâmetros

Para especificar configurações para o trabalho de ajuste de hiperparâmetros, defina um objeto JSON ao criar o trabalho de ajuste. Passe esse objeto JSON como o valor do parãmetro HyperParameterTuningJobConfig para a API CreateHyperParameterTuningJob.

Nesse objeto JSON, especifique o seguinte:

Neste objeto JSON, especifique:

  • HyperParameterTuningJobObjective - A métrica objetiva usada para avaliar o desempenho do trabalho de treinamento lançado pelo trabalho de ajuste de hiperparâmetros.

  • ParameterRanges - A faixa de valores que um hiperparâmetro ajustável pode usar durante a otimização. Para obter mais informações, consulte Definir intervalos de hiperparâmetros.

  • RandomSeed - Um valor usado para inicializar um gerador de números pseudo-aleatórios. Definir uma semente aleatória permitirá que as estratégias de busca de ajuste de hiperparâmetros produzam configurações mais consistentes para o mesmo trabalho de ajuste (opcional).

  • ResourceLimits - O número máximo de trabalhos de treinamento e treinamento paralelo que o trabalho de ajuste de hiperparâmetros pode usar.

nota

Se você usa seu próprio algoritmo para ajuste de hiperparâmetros, em vez de um algoritmo SageMaker incorporado, você deve definir métricas para seu algoritmo. Para ter mais informações, consulte Definir métricas.

O exemplo de código a seguir mostra como configurar um trabalho de ajuste de hiperparâmetros usando o algoritmo do XGBoost integrado. O exemplo de código mostra como definir intervalos para os hiperparâmetros eta, alpha, min_child_weight e max_depth. Para obter mais informações sobre esses e outros hiperparâmetros, consulte Parâmetros do XGBoost.

Neste exemplo de código, a métrica objetiva para o trabalho de ajuste de hiperparâmetros encontra a configuração de hiperparâmetros que maximiza. validation:auc SageMaker algoritmos integrados gravam automaticamente a métrica objetiva em CloudWatch Logs. O exemplo de código a seguir mostra como definir um 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 }

Configurar os trabalhos de treinamento

O trabalho de ajuste de hiperparâmetros iniciará trabalhos de treinamento para encontrar uma configuração ideal de hiperparâmetros. Esses trabalhos de treinamento devem ser configurados usando a SageMaker CreateHyperParameterTuningJobAPI.

Para configurar os trabalhos de treinamento, defina um objeto JSON e passe-o como o valor do TrainingJobDefinition parâmetro interno do CreateHyperParameterTuningJob.

Neste objeto JSON, você pode especificar o seguinte:

  • AlgorithmSpecification - O caminho do registro da imagem do Docker contendo o algoritmo de treinamento e os metadados relacionados. Para especificar um algoritmo, você pode usar seu próprio algoritmo personalizado dentro de um contêiner Docker ou um algoritmo SageMaker incorporado (obrigatório).

  • InputDataConfig - A configuração de entrada, incluindo ChannelName, ContentType e a fonte de dados para seus dados de treinamento e teste (obrigatório).

  • InputDataConfig - A configuração de entrada, incluindo ChannelName, ContentType e a fonte de dados para seus dados de treinamento e teste (obrigatório).

  • O local de armazenamento da saída do algoritmo. Especifique o bucket do S3 no qual você deseja armazenar a saída dos trabalhos de treinamento.

  • RoleArn— O Amazon Resource Name (ARN) de uma função AWS Identity and Access Management (IAM) SageMaker usada para realizar tarefas. As tarefas incluem ler dados de entrada, baixar uma imagem do Docker, gravar artefatos de modelo em um bucket do S3, gravar CloudWatch registros no Amazon Logs e gravar métricas na Amazon CloudWatch (obrigatório).

  • StoppingCondition - O tempo de execução máximo em segundos que um trabalho de treinamento pode ser executado antes de ser interrompido. Esse valor deve ser maior que o tempo necessário para treinar seu modelo (obrigatório).

  • MetricDefinitions - O nome e a expressão regular que definem todas as métricas que os trabalhos de treinamento emitem. Defina métricas somente quando você usar um algoritmo de treinamento personalizado. O exemplo no código a seguir usa um algoritmo integrado, que já tem métricas definidas. Para obter informações sobre como definir métricas (opcional), consulte Definir métricas.

  • TrainingImage - A imagem do contêiner do Docker que especifica o algoritmo de treinamento (opcional).

  • StaticHyperParameters - O nome e os valores dos hiperparâmetros que não estão ajustados no trabalho de ajuste (opcional).

O seguinte exemplo de código define valores estáticos para os parâmetros eval_metric, num_round, objective, rate_drop e tweedie_variance_power do algoritmo interno Use o algoritmo XGBoost com a Amazon SageMaker.

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 } }

Nomear e executar o trabalho de ajuste de hiperparâmetros

Depois de configurar o trabalho de ajuste de hiperparâmetros, você pode iniciá-lo chamando a API CreateHyperParameterTuningJob. O exemplo de código a seguir usa tuning_job_config e training_job_definition. Eles foram definidos nos dois exemplos de código anteriores para criar um trabalho de ajuste de hiperparâmetros.

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

Exibir o status dos trabalhos de treinamento

Para exibir o status dos trabalhos de treinamento executados pelo trabalho de ajuste de hiperparâmetros
  1. Na lista de tarefas de ajuste de hiperparâmetros, escolha o trabalho que você executou.

  2. Escolha Training jobs (Trabalhos de treinamento).

  3. Veja o status de cada trabalho de treinamento. Para ver mais detalhes sobre um trabalho, escolha-o na lista de trabalhos de treinamento. Para exibir um resumo do status de todos os trabalhos de treinamento executados pelo trabalho de ajuste de hiperparâmetros, consulte Training job status counter (Contagem de status de trabalhos de treinamento).

    Um trabalho de treinamento pode ser:

    • Completed - O trabalho de treinamento foi concluído com êxito.

    • InProgress - O trabalho de treinamento está em andamento.

    • Stopped - O trabalho de treinamento foi interrompido manualmente antes de ser concluído.

    • Failed (Retryable) - O trabalho de treinamento falhou, mas pode ser repetido. Um trabalho de treinamento com falha pode ser repetido apenas se falhar devido a um erro de serviço interno.

    • Failed (Non-retryable) - O trabalho de treinamento falhou e não pode ser repetido. Um trabalho de treinamento com falha não pode ser repetido quando ocorre um erro do cliente.

    nota

    Os trabalhos de ajuste de hiperparâmetros podem ser interrompidos e os recursos subjacentes excluídos, mas os trabalhos em si não podem ser excluídos.

Visualizar o melhor trabalho de treinamento

Um trabalho de ajuste de hiperparâmetros usa a métrica objetiva retornada por cada trabalho de treinamento para avaliar trabalhos de treinamento. Enquanto o trabalho de ajuste de hiperparâmetros está em andamento, o melhor trabalho de treinamento é aquele que retornou a melhor métrica objetiva até o momento. Depois que o trabalho de ajuste de hiperparâmetros for concluído, o melhor trabalho de treinamento será aquele que retornou a melhor métrica objetiva.

Para visualizar o melhor trabalho de treinamento, escolha Best training job (Melhor trabalho de treinamento).

Para implantar o melhor trabalho de treinamento como um modelo que você pode hospedar em um SageMaker endpoint, escolha Criar modelo.

Próxima etapa

Limpeza