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

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 tarefa de HPO, 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 SDK SageMaker para o cliente Python no final deste guia.

Componentes de um trabalho de ajuste

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

  • Configurações do trabalho de ajuste

  • Definições de trabalho de treinamento

  • Configuração do trabalho de ajuste

A forma como esses componentes são incluídos em seu trabalho de ajuste de HPO 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.

As configurações do trabalho de ajuste são aplicadas em todos os algoritmos no trabalho de ajuste de HPO. 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.

Inicialização 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 atributo de inicialização a quente e só está disponível ao ajustar um único algoritmo. Com a opção de inicialização 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 a quente é 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 sobreajuste 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 atributo só está disponível ao ajustar um único algoritmo. Esse é um atributo 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 são compatíveis com 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 ou 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 na probabilidade de obter o melhor resultado de acordo com o histórico conhecido de seleções anteriores. O Hyperband utiliza uma estratégia de múltipla fidelidade que aloca dinamicamente recursos para trabalhos bem utilizados e interrompe automaticamente aqueles que têm desempenho inferior. A nova configuração que começa após a interrupção de outras configurações é escolhida aleatoriamente.

O Hyperband pode ser usado apenas com algoritmos iterativos, ou seja, algoritmos que executam etapas em iterações, como XGBoost ou Random Cut Forest. O 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

O Hyperband usa um mecanismo interno avançado para aplicar a interrupção antecipada. Portanto, quando você usa o atributo Hyperband interno de parada antecipada, o parâmetro TrainingJobEarlyStoppingType na API HyperParameterTuningJobConfig deve ser definido como OFF.

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 TrainingJobDefinition para cada trabalho de ajuste do HPO. 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

O Amazon SageMaker requer permissões para chamar outros serviços em seu nome. Escolha um perfil do IAM AWS Identity and Access Management ou permita que AWS crie uma função com a política do IAM AmazonSageMakerFullAccess 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 de machine learning do AWS Marketplace.

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

nota

A criptografia entre contêineres está disponível apenas ao criar uma definição de trabalho por meio da API.

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 (Amazon ECR) pré-preenchidas.

  • Se você escolher seu próprio contêiner, é necessário especificar as informações da imagem (Amazon ECR). Você pode selecionar o modo de entrada para o algoritmo como File ou Pipe.

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

Métricas

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 é compatível com vários canais de entrada, você também pode especificá-los. Por exemplo, ao usar o caderno de predição de fragmentos do XGBoost, você pode adicionar dois canais: treino 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 no 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 do 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 ao permitir que o SageMaker use a capacidade disponível para executar trabalhos. Para obter mais informações, consulte Treinamento gerenciado de spots no 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.

Exemplo de trabalho de ajuste de HPO

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 ajuste de HPO conter um único algoritmo de treinamento, a função de ajuste do SageMaker chamará HyperparameterTuner a API diretamente e transmitirá seus parâmetros. Se seu trabalho de ajuste do HPO conter vários algoritmos de treinamento, sua função de ajuste chamará a create função da API HyperparameterTuner. A função create diz à API que espere 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 contêineres do SageMaker contendo os algoritmos integrados XGBoost e Linear Learner. Se seu trabalho de ajuste conter 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, seu 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 um trabalho de ajuste de HPO.

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 algoritmo integrado do SageMaker 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 otimizador com configurações para dois algoritmos integrados do SageMaker, 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 de computação 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, )

Executar seu trabalho de ajuste de HPO

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 ={})