Criar um trabalho de ajuste de otimização de hiperparâmetros para um ou mais algoritmos (console) - 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á.

Criar um trabalho de ajuste de otimização de hiperparâmetros para um ou mais algoritmos (console)

Este guia mostra como criar um novo trabalho de ajuste de otimização de hiperparâmetros (HPO) para um ou mais algoritmos. Para criar uma HPO tarefa, defina as configurações da tarefa de ajuste e crie definições da tarefa de treinamento para cada algoritmo que está sendo ajustado. Em seguida, configure os recursos e crie o trabalho de ajuste. As seguintes seções fornecem detalhes sobre como concluir cada etapa. Fornecemos um exemplo de como ajustar vários algoritmos usando o SageMaker SDK for Python cliente no final deste guia.

Componentes de um trabalho de ajuste

Um trabalho HPO de ajuste contém os três componentes a seguir:

  • Configurações do trabalho de ajuste

  • Definições de tarefa de treinamento

  • Ajuste de configuração do trabalho

A forma como esses componentes são incluídos em seu trabalho de HPO ajuste depende se seu trabalho de ajuste contém um ou vários algoritmos de treinamento. O guia a seguir descreve cada um dos componentes e fornece um exemplo dos dois tipos de trabalhos de ajuste.

Suas configurações do trabalho de ajuste são aplicadas em todos os algoritmos do trabalho de HPO ajuste. Os recursos de inicialização a quente e interrupção precoce estão disponíveis somente quando você ajusta um único algoritmo. Depois de definir as configurações de trabalho, você pode criar definições de treinamento individuais para cada algoritmo ou variação que deseja ajustar.

Início a quente

Se você clonou este trabalho, pode usar os resultados de um trabalho de ajuste anterior para melhorar o desempenho deste novo trabalho de ajuste. Esse é o recurso de inicialização a quente e só está disponível ao ajustar um único algoritmo. Com a opção de partida a quente, você pode escolher até cinco trabalhos anteriores de ajuste de hiperparâmetros para usar. Como alternativa, você pode usar o aprendizado por transferência para adicionar dados adicionais ao trabalho de ajuste principal. Ao selecionar essa opção, você escolhe um trabalho de ajuste anterior como pai.

nota

A inicialização rápida é compatível apenas com trabalhos de ajuste criados após 1º de outubro de 2018. Para obter mais informações, consulte Executar um trabalho de inicialização a quente.

Interrupção antecipada

Para reduzir o tempo de computação e evitar a sobreajustagem do modelo, você pode interromper os trabalhos de treinamento antecipadamente. A interrupção antecipada é útil quando o trabalho de treinamento é improvável de melhorar a métrica objetiva atualmente melhor no trabalho de ajuste de hiperparâmetros. Como a inicialização a quente, esse recurso só está disponível ao ajustar um único algoritmo. Esse é um recurso automático sem opções de configuração e está desativado por padrão. Para obter mais informações sobre como a interrupção antecipada funciona, os algoritmos que a suportam e como usá-la com seus próprios algoritmos, consulte Parar trabalhos de treinamento antecipadamente.

Estratégia de ajuste

A estratégia de ajuste pode ser aleatória, bayesiana ou Hyperband. Essas seleções especificam como os algoritmos de ajuste automático pesquisam intervalos de hiperparâmetros especificados que são selecionados em uma etapa posterior. A pesquisa aleatória escolhe combinações aleatórias de valores dos intervalos especificados e pode ser executada sequencialmente ou em paralelo. A otimização bayesiana escolhe valores com base no que provavelmente obterá o melhor resultado de acordo com o histórico conhecido das seleções anteriores. Hyperband usa uma estratégia de multifidelidade que aloca recursos dinamicamente para trabalhos bem utilizados e interrompe automaticamente aqueles com desempenho inferior. A nova configuração que começa após a interrupção de outras configurações é escolhida aleatoriamente.

Hyperband só pode ser usado com algoritmos iterativos ou algoritmos que executam etapas em iterações, como XGBoostou Random Cut Forest. Hyperband não pode ser usado com algoritmos não iterativos, como árvores de decisão ou K-Nearest Neighbors. Para obter mais informações sobre estratégias, consulte Como funciona o ajuste de hiperparâmetros.

nota

Hyperband usa um mecanismo interno avançado para aplicar a parada antecipada. Portanto, quando você usa o Hyperband recurso interno de parada antecipada, o parâmetro TrainingJobEarlyStoppingType no HyperParameterTuningJobConfig API deve ser definido comoOFF.

Tags

Para ajudá-lo a gerenciar os trabalhos de ajuste, você pode inserir tags como pares de valores-chave para atribuir metadados aos trabalhos de ajuste. Os valores do par de chave/valor não são obrigatórios. Você pode usar a chave sem valores. Para ver as chaves associadas a um trabalho, escolha a guia Tags na página de detalhes do trabalho de ajuste. Para obter mais informações sobre como usar tags para trabalhos de ajuste, consulte Gerenciar trabalhos de treinamento e ajuste de hiperparâmetros.

Para criar uma definição de trabalho de treinamento, você deve configurar o algoritmo e os parâmetros, definir a entrada e a saída de dados e configurar os recursos. Forneça pelo menos um TrainingJobDefinitionpara cada trabalho HPO de ajuste. Cada definição de treinamento especifica a configuração de um algoritmo.

Para criar várias definições para a tarefa de treinamento, é possível clonar uma definição. A clonagem de uma tarefa pode economizar tempo porque copia todas as configurações da tarefa, incluindo canais de dados e locais de armazenamento do Amazon S3 para artefatos de saída. Você pode editar um trabalho clonado para alterar o que você precisa para seu caso de uso.

Configurar algoritmo e parâmetros

A lista a seguir descreve o que você precisa para configurar o conjunto de valores de hiperparâmetros para cada trabalho de treinamento.

  • Um nome para o seu trabalho de ajuste

  • Permissão para acessar serviços

  • Parâmetros para qualquer opção de algoritmo

  • Uma métrica objetiva

  • A faixa de valores de hiperparâmetros, quando necessário

Nome

Forneça um nome exclusivo para a definição de treinamento.

Permissões

A Amazon SageMaker exige permissões para ligar para outros serviços em seu nome. Escolha uma função AWS Identity and Access Management (IAM) ou deixe AWS criar uma função com a AmazonSageMakerFullAccess IAM política anexada.

Configurações de segurança opcionais

A configuração de isolamento de rede impede que o contêiner faça qualquer chamada de rede de saída. Isso é necessário para ofertas AWS Marketplace de aprendizado de máquina.

Você também pode optar por usar uma nuvem privada virtual (VPC).

nota

A criptografia entre contêineres só está disponível quando você cria uma definição de tarefa a API partir do.

Opções do algoritmo

Você pode escolher entre algoritmos integrados, seu próprio algoritmo, seu próprio contêiner com um algoritmo, ou pode assinar um algoritmo do AWS Marketplace.

  • Se você escolher um algoritmo integrado, ele terá as informações de imagem do Amazon Elastic Container Registry (AmazonECR) pré-preenchidas.

  • Se você escolher seu próprio contêiner, deverá especificar as informações da imagem (AmazonECR). Você pode selecionar o modo de entrada para o algoritmo como arquivo ou canal.

  • Se você planeja fornecer seus dados usando um CSV arquivo do Amazon S3, você deve selecionar o arquivo.

Metrics

Quando você escolhe um algoritmo integrado, as métricas são fornecidas para você. Se você escolher seu próprio algoritmo, é necessário definir suas métricas. Você pode definir até 20 métricas para o seu trabalho de ajuste monitorar. Você deve escolher uma métrica como métrica objetiva. Para obter mais informações sobre como definir uma métrica para um trabalho de ajuste, consulte Definir métricas.

Métrica objetiva

Para encontrar o melhor trabalho de treinamento, defina uma métrica objetiva e se deve maximizá-la ou minimizá-la. Depois que o trabalho de treinamento for concluído, você poderá visualizar a página de detalhes do trabalho de ajuste. A página de detalhes fornece um resumo do melhor trabalho de treinamento encontrado usando essa métrica objetiva.

Configuração do hiperparâmetro

Quando você escolhe um algoritmo integrado, os valores padrão para seus hiperparâmetros são definidos para você, utilizando intervalos otimizados para o algoritmo que está sendo ajustado. É possível alterar esses valores conforme achar adequado. Por exemplo, em vez de um intervalo, você pode definir um valor fixo para um hiperparâmetro configurando o tipo do parâmetro como estático. Cada algoritmo tem diferentes parâmetros obrigatórios e opcionais. Para obter mais informações, consulte Práticas recomendadas para ajuste de hiperparâmetros e definição de intervalos de hiperparâmetros.

Definir entrada e saída de dados

Cada definição de trabalho de treinamento para um trabalho de sintonia deve configurar os canais para as entradas de dados, os locais de saída de dados e, opcionalmente, quaisquer locais de armazenamento de pontos de verificação para cada trabalho de treinamento.

Configuração dos dados de entrada

Os dados de entrada são definidos por canais. Cada canal possui sua própria local de origem (Amazon S3 ou Amazon Elastic File System), opções de compressão e formato. É possível definir até 20 canais de fontes de entrada. Se o algoritmo que você escolheu suporta vários canais de entrada, você também pode especificá-los. Por exemplo, quando você usa o XGBoost caderno de previsão de rotatividade, você pode adicionar dois canais: treinamento e validação.

Configuração do ponto de verificação

Os pontos de verificação são gerados periodicamente durante o treinamento. Para que os pontos de verificação sejam salvos, você deve escolher um local no Amazon S3. Os pontos de verificação são usados nos relatórios de métricas e também são usados para retomar trabalhos de treinamento gerenciado de spots. Para obter mais informações, consulte Pontos de verificação na Amazon SageMaker.

Configuração dos dados de saída

Defina uma localização no Amazon S3 para armazenar os artefatos do trabalho de treinamento. Você tem a opção de adicionar criptografia à saída usando uma chave AWS Key Management Service (AWS KMS).

Configurar recursos de trabalho de treinamento

Cada definição de trabalho de treinamento para um trabalho de sintonia deve configurar os recursos para implantação, incluindo tipos e contagens de instâncias, treinamento em instâncias Spot gerenciadas e condições de interrupção.

Configuração de recursos

Cada definição de treinamento pode ter uma configuração de recurso diferente. Escolha o tipo de instância e o número de nós.

Treinamento de spot gerenciado

Você pode economizar custos de computador para trabalhos se tiver flexibilidade nos horários de início e término, permitindo SageMaker o uso de capacidade disponível para executar trabalhos. Para obter mais informações, consulte Treinamento local gerenciado na Amazon SageMaker.

Condição de interrupção

A condição de interrupção especifica a duração máxima permitida para cada tarefa de treinamento.

Adicionar ou clonar um trabalho de treinamento

Depois de criar uma definição de tarefa de treinamento para um trabalho de ajuste, você retornará ao painel Definição de tarefa de treinamento (s). Esse painel é onde você pode criar definições adicionais de tarefas de treinamento para treinar algoritmos adicionais. Você pode selecionar a definição Adicionar tarefa de treinamento e seguir as etapas para definir uma tarefa de treinamento novamente.

Como alternativa, para replicar uma definição de tarefa de treinamento existente e editá-la para o novo algoritmo, escolha Clonar no menu Ação. A opção de clonagem pode economizar tempo porque copia todas as configurações do tarefa, incluindo os canais de dados e os locais de armazenamento do Amazon S3. Para obter mais informações sobre clonagem, consulte Gerenciar trabalhos de treinamento e ajuste de hiperparâmetros.

Limites de recurso

Você pode especificar o número máximo de trabalhos de treinamento simultâneos que um trabalho de ajuste de hiperparâmetros pode executar simultaneamente (10 no máximo). Você também pode especificar o número máximo de trabalhos de treinamento que o trabalho de sintonia de hiperparâmetros pode executar (no máximo 500). O número de trabalhos paralelos não deve exceder o número de nós que você solicitou em todas as definições de treinamento. O número total de trabalhos não pode exceder o número de trabalhos que as definições devem executar.

Revise as configurações do trabalho, as definições do trabalho de treinamento e os limites de recursos. Em seguida, selecione Criar trabalho de ajuste de hiperparâmetros.

HPOexemplo de trabalho de ajuste

Para executar um trabalho de treinamento de otimização de hiperparâmetros (HPO), primeiro crie uma definição de trabalho de treinamento para cada algoritmo que está sendo ajustado. Em seguida, defina as configurações do trabalho de ajuste e configure os recursos para o trabalho de ajuste. Por fim, execute o trabalho de ajuste.

Se seu trabalho de HPO ajuste contiver um único algoritmo de treinamento, a função de SageMaker ajuste chamará o HyperparameterTuner API diretamente e transmitirá seus parâmetros. Se seu trabalho de HPO ajuste contiver vários algoritmos de treinamento, sua função de ajuste chamará a create função do HyperparameterTunerAPI. A create função diz API para esperar um dicionário contendo um ou mais estimadores.

Na seção a seguir, exemplos de código mostram como ajustar um trabalho contendo um único algoritmo de treinamento ou vários algoritmos usando o SageMaker Python SDK.

Criar definições de trabalho de treinamento

Quando você cria um trabalho de ajuste que inclui vários algoritmos de treinamento, a configuração do trabalho de ajuste incluirá os estimadores, as métricas e outros parâmetros para seus trabalhos de treinamento. Portanto, você precisa primeiro criar a definição do trabalho de treinamento e, em seguida, configurar seu trabalho de ajuste.

O exemplo de código a seguir mostra como recuperar dois SageMaker contêineres contendo os algoritmos incorporados XGBoost e Linear Learner. Se seu trabalho de ajuste contiver somente um algoritmo de treinamento, omita um dos contêineres e um dos estimadores.

import sagemaker from sagemaker import image_uris from sagemaker.estimator import Estimator sess = sagemaker.Session() region = sess.boto_region_name role = sagemaker.get_execution_role() bucket = sess.default_bucket() prefix = "sagemaker/multi-algo-hpo" # Define the training containers and intialize the estimators xgb_container = image_uris.retrieve("xgboost", region, "latest") ll_container = image_uris.retrieve("linear-learner", region, "latest") xgb_estimator = Estimator( xgb_container, role=role, instance_count=1, instance_type="ml.m4.xlarge", output_path='s3://{}/{}/xgb_output".format(bucket, prefix)', sagemaker_session=sess, ) ll_estimator = Estimator( ll_container, role, instance_count=1, instance_type="ml.c4.xlarge", output_path="s3://{}/{}/ll_output".format(bucket, prefix), sagemaker_session=sess, ) # Set static hyperparameters ll_estimator.set_hyperparameters(predictor_type="binary_classifier") xgb_estimator.set_hyperparameters( eval_metric="auc", objective="binary:logistic", num_round=100, rate_drop=0.3, tweedie_variance_power=1.4, )

Em seguida, defina seus dados de entrada especificando os conjuntos de dados de treinamento, validação e teste, conforme mostrado no exemplo de código a seguir. Este exemplo mostra como ajustar vários algoritmos de treinamento.

training_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/train".format(bucket, prefix), content_type="csv" ) validation_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/validate".format(bucket, prefix), content_type="csv" ) test_data = sagemaker.inputs.TrainingInput( s3_data="s3://{}/{}/test".format(bucket, prefix), content_type="csv" ) train_inputs = { "estimator-1": { "train": training_data, "validation": validation_data, "test": test_data, }, "estimator-2": { "train": training_data, "validation": validation_data, "test": test_data, }, }

Se seu algoritmo de ajuste contém somente um algoritmo de treinamento, su train_inputs deve conter somente um estimador.

Você deve fazer o upload das entradas para os conjuntos de dados de treinamento, validação e treinamento em seu bucket do Amazon S3 antes de usá-las em HPO um trabalho de ajuste.

Definir recursos e configurações para seu trabalho de ajuste

Esta seção mostra como inicializar um sintonizador, definir recursos e especificar configurações de trabalho para seu trabalho de ajuste. Se seu trabalho de ajuste conter vários algoritmos de treinamento, essas configurações serão aplicadas a todos os algoritmos contidos em sua trabalho de ajuste. Esta seção fornece dois exemplos de código para definir um sintonizador. Os exemplos de código mostram como otimizar um único algoritmo de treinamento seguido por um exemplo de como ajustar vários algoritmos de treinamento.

Ajustar um único algoritmo de treinamento

O exemplo de código a seguir mostra como inicializar um sintonizador e definir intervalos de hiperparâmetros para um SageMaker algoritmo integrado, XGBoost.

from sagemaker.tuner import HyperparameterTuner from sagemaker.parameter import ContinuousParameter, IntegerParameter hyperparameter_ranges = { "max_depth": IntegerParameter(1, 10), "eta": ContinuousParameter(0.1, 0.3), } objective_metric_name = "validation:accuracy" tuner = HyperparameterTuner( xgb_estimator, objective_metric_name, hyperparameter_ranges, objective_type="Maximize", max_jobs=5, max_parallel_jobs=2, )

Ajustar vários algoritmos de treinamento

Cada trabalho de treinamento requer configurações diferentes, e elas são especificadas usando um dicionário. O exemplo de código a seguir mostra como inicializar um sintonizador com configurações para dois SageMaker algoritmos integrados, XGBoost e Linear Learner. O exemplo de código também mostra como definir uma estratégia de ajuste e outras configurações do trabalho, como os recursos computacionais para o trabalho de ajuste. O exemplo de código a seguir usa metric_definitions_dict, o que é opcional.

from sagemaker.tuner import HyperparameterTuner from sagemaker.parameter import ContinuousParameter, IntegerParameter # Initialize your tuner tuner = HyperparameterTuner.create( estimator_dict={ "estimator-1": xgb_estimator, "estimator-2": ll_estimator, }, objective_metric_name_dict={ "estimator-1": "validation:auc", "estimator-2": "test:binary_classification_accuracy", }, hyperparameter_ranges_dict={ "estimator-1": {"eta": ContinuousParameter(0.1, 0.3)}, "estimator-2": {"learning_rate": ContinuousParameter(0.1, 0.3)}, }, metric_definitions_dict={ "estimator-1": [ {"Name": "validation:auc", "Regex": "Overall test accuracy: (.*?);"} ], "estimator-2": [ { "Name": "test:binary_classification_accuracy", "Regex": "Overall test accuracy: (.*?);", } ], }, strategy="Bayesian", max_jobs=10, max_parallel_jobs=3, )

Execute seu trabalho HPO de ajuste

Agora você pode executar seu trabalho de ajuste passando suas entradas de treinamento para a função fit da classe HyperparameterTuner. O exemplo de código a seguir mostra como passar o parâmetro train_inputs, definido em um exemplo de código anterior, para seu sintonizador.

tuner.fit(inputs=train_inputs, include_cls_metadata ={}, estimator_kwargs ={})