Executar um trabalho de ajuste de hiperparâmetros de inicialização a quente - 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á.

Executar um trabalho de ajuste de hiperparâmetros de inicialização a quente

Use a inicialização a quente para iniciar um trabalho de ajuste de hiperparâmetros usando um ou mais trabalhos de ajuste anteriores como ponto de partida. Os resultados dos trabalhos de ajuste anteriores são usados para informar quais combinações de hiperparâmetros devem ser pesquisadas no novo trabalho de ajuste. O ajuste de hiperparâmetros usa a pesquisa bayesiana ou a pesquisa aleatória para escolher combinações de valores de hiperparâmetros nos intervalos especificados por você. Para obter mais informações, consulte Como funciona o ajuste de hiperparâmetros com a Amazon SageMaker . O uso de informações de trabalhos de ajuste de hiperparâmetros anteriores pode ajudar a aumentar o desempenho do novo trabalho de ajuste de hiperparâmetros, tornando a pesquisa pela melhor combinação de hiperparâmetros mais eficiente.

nota

Normalmente, os trabalhos de ajuste com inicialização a quente demoram mais para serem iniciados do que os trabalhos de ajuste de hiperparâmetros padrão, porque os resultados dos trabalhos pai precisam ser carregados antes que o trabalho possa ser iniciado. O aumento do tempo depende do número total de trabalhos de treinamento executados pelos trabalhos pai.

Razões para considerar a inicialização a quente incluem as seguintes:

  • Para aumentar gradualmente o número de trabalhos de treinamento ao longo de vários trabalhos de ajuste com base nos resultados após cada iteração.

  • Para ajustar um modelo usando os novos dados que você recebeu.

  • Para alterar os intervalos de hiperparâmetros que você usou em um trabalho de ajuste anterior, mude hiperparâmetros estáticos para ajustáveis ou altere hiperparâmetros ajustáveis para valores estáticos.

  • Você parou um trabalho de hiperparâmetros anterior precocemente ou ele foi interrompido inesperadamente.

Tipos de trabalhos de ajuste com inicialização a quente

Existem dois tipos diferentes de trabalhos de ajuste com inicialização a quente:

IDENTICAL_DATA_AND_ALGORITHM

O novo trabalho de ajuste de hiperparâmetros usa os mesmos dados de entrada e imagem de treinamento que os trabalhos de ajuste pai. Você pode alterar os intervalos de hiperparâmetros a serem pesquisados e o número máximo de trabalhos de treinamento executados pela tarefa de ajuste de hiperparâmetros. Você também pode transformar os hiperparâmetros de ajustáveis para estáticos e de estáticos para ajustáveis, mas o número total de hiperparâmetros estáticos mais os ajustáveis deve permanecer o mesmo que o de todos os trabalhos pai. Não é possível usar uma nova versão do algoritmo de treinamento, a menos que as alterações na nova versão não afetem o algoritmo em si. Por exemplo, são permitidas alterações que melhoram o registro em log ou adicionam suporte a um formato de dados diferente.

Use dados e algoritmos idênticos ao usar os mesmos dados de treinamento de um trabalho de ajuste de hiperparâmetros anterior, mas você deseja aumentar o número total de trabalhos de treinamento ou alterar intervalos ou valores de hiperparâmetros.

Quando você executa um trabalho de ajuste com inicialização a quente do tipo IDENTICAL_DATA_AND_ALGORITHM, há um campo adicional na resposta para a DescribeHyperParameterTuningJob denominado OverallBestTrainingJob. O valor desse campo é TrainingJobSummarypara o trabalho de treinamento com o melhor valor métrico objetivo de todos os trabalhos de treinamento lançados por esse trabalho de ajuste e de todos os trabalhos principais especificados para o trabalho de ajuste de partida a quente.

TRANSFER_LEARNING

O novo trabalho de ajuste de hiperparâmetros pode incluir dados de entrada, intervalos de hiperparâmetros, o número máximo de trabalhos de treinamento simultâneos e número máximo de trabalhos de treinamento que são diferentes daqueles dos respectivos trabalhos de ajuste de hiperparâmetros pai. Você também pode transformar os hiperparâmetros de ajustáveis para estáticos e de estáticos para ajustáveis, mas o número total de hiperparâmetros estáticos mais os ajustáveis deve permanecer o mesmo que o de todos os trabalhos pai. A imagem do algoritmo de treinamento também pode ser uma versão diferente da usada no trabalho de ajuste de hiperparâmetros pai. Quando você usa a aprendizagem por transferência, as alterações no conjunto de dados ou no algoritmo que afetam significativamente o valor da métrica objetiva podem reduzir a utilidade do uso do ajuste com inicialização a quente.

Restrições do ajuste com inicialização a quente

As seguintes restrições são aplicáveis a todos os trabalhos de ajuste com inicialização a quente:

  • Um trabalho de ajuste pode ter no máximo 5 trabalhos pai, e todos esses trabalhos pai devem estar em um estado terminal (Completed, Stopped ou Failed) antes do início do novo trabalho de ajuste.

  • A métrica objetiva usada no novo trabalho de ajuste deve ser a mesma que a métrica objetiva usada nos trabalhos pai.

  • O número total de hiperparâmetros estáticos mais os ajustáveis deve permanecer o mesmo entre os trabalhos pai e o novo trabalho de ajuste. Por causa disso, se você acha que pode querer usar um hiperparâmetro como ajustável em um trabalho de ajuste futuro com inicialização a quente, deve adicioná-lo como um hiperparâmetro estático ao criar um trabalho de ajuste.

  • O tipo de cada hiperparâmetro (contínuo, inteiro, categórico) não deve ser alterado entre os trabalhos pai e o novo trabalho de ajuste.

  • O número total de alterações de hiperparâmetros ajustáveis nos trabalhos pai para hiperparâmetros estáticos no novo trabalho de ajuste, mais o número de alterações nos valores de parâmetros estáticos, não pode ser maior que 10. Por exemplo, se o trabalho pai tiver um hiperparâmetro categórico ajustável com os valores possíveis red e blue e você alterar esse hiperparâmetro para estático no novo trabalho de ajuste, isso contará como 2 alterações em relação ao total permitido de 10. Se o mesmo hiperparâmetro tivesse um valor estático de red no trabalho pai e você alterasse o valor estático para blue no novo trabalho de ajuste, isso também contaria como 2 alterações.

  • O ajuste com inicialização a quente não é recursivo. Por exemplo, se você criar MyTuningJob3 como um trabalho de ajuste com inicialização a quente com MyTuningJob2 como trabalho pai, e MyTuningJob2 for por si só um trabalho de ajuste com inicialização a quente com um trabalho pai MyTuningJob1, as informações aprendidas durante a execução de MyTuningJob1 não serão usadas para MyTuningJob3. Se você quiser usar as informações de MyTuningJob1, deverá adicioná-lo explicitamente como pai de MyTuningJob3.

  • Os trabalhos de treinamento iniciados por cada trabalho pai em um trabalho de ajuste com inicialização a quente são comparados com os 500 trabalhos de treinamento máximos para um trabalho de ajuste.

  • Os trabalhos de ajuste de hiperparâmetros criados antes de 1º de outubro de 2018 não podem ser usados como trabalhos pai para trabalhos de ajuste com inicialização a quente.

Bloco de anotações de amostra para ajuste com inicialização a quente

Para um exemplo de caderno que mostra como usar o ajuste de partida a quente, consulte https://github.com/awslabs/amazon-sagemaker-examples/blob/master/hyperparameter_tuning/image_classification_warmstart/hpo_image_classification_warmstart.ipynb. Para obter instruções sobre como criar e acessar instâncias do notebook Jupyter que você pode usar para executar o exemplo SageMaker, consulte. Blocos de anotações de exemplo Depois de criar uma instância do notebook e abri-la, selecione a guia SageMaker Exemplos para ver uma lista de todas as SageMaker amostras. O bloco de anotações de ajuste com inicialização a quente está localizado na seção Ajuste de hiperparâmetros e se chama hpo_image_classification_warmstart.ipynb. Para abrir um bloco de anotações, clique em sua guia Uso e selecione Criar cópia.

Criar um trabalho de ajuste com inicialização a quente

Você pode usar o nível baixo AWS SDK para Python (Boto 3) ou o Python de alto nível para criar um trabalho de SageMaker ajuste de SDK início rápido.

Crie um Warm Start Tuning Job (baixo nível SageMaker API para Python (Boto 3))

Para utilizar o ajuste com inicialização a quente, você especifica os valores de um objeto HyperParameterTuningJobWarmStartConfig e o transmite como o campo WarmStartConfig em uma chamada para CreateHyperParameterTuningJob.

O código a seguir mostra como criar um HyperParameterTuningJobWarmStartConfigobjeto e passá-lo para o CreateHyperParameterTuningJobtrabalho usando o nível baixo SageMaker API para Python (Boto 3).

Crie o objeto HyperParameterTuningJobWarmStartConfig:

warm_start_config = { "ParentHyperParameterTuningJobs" : [ {"HyperParameterTuningJobName" : 'MyParentTuningJob'} ], "WarmStartType" : "IdenticalDataAndAlgorithm" }

Crie o trabalho de ajuste com inicialização a quente:

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)

Crie um Warm Start Tuning Job (SageMakerPythonSDK)

Para usar o Amazon SageMaker Python SDK para executar um trabalho de ajuste de inicialização a quente, você:

  • Especifica os trabalhos pai e o tipo de inicialização a quente usando um objeto WarmStartConfig.

  • Passe o WarmStartConfig objeto como o valor do warm_start_config argumento de um HyperparameterTunerobjeto.

  • Chama o método fit do objeto HyperparameterTuner.

Para obter mais informações sobre o uso do Amazon SageMaker Python SDK para ajuste de hiperparâmetros, consulte thon-sdk#. https://github.com/aws/sagemaker-py sagemaker-automatic-model-tuning

Este exemplo usa um estimador que usa o algoritmo Classificação de imagens - MXNet para treinamento. O código a seguir define os intervalos de hiperparâmetros que o trabalho de ajuste com inicialização a quente procura para encontrar a melhor combinação de valores. Para obter informações sobre como definir intervalos de hiperparâmetros, consulte Definir intervalos de hiperparâmetros.

hyperparameter_ranges = {'learning_rate': ContinuousParameter(0.0, 0.1), 'momentum': ContinuousParameter(0.0, 0.99)}

O código a seguir configura o trabalho de ajuste com inicialização a quente criando um objeto 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})

Agora, defina os valores para hiperparâmetros estáticos, que são hiperparâmetros que mantêm o mesmo valor para cada trabalho de treinamento executado pelo trabalho de ajuste com inicialização a quente. No código a seguir, imageclassification é um estimador criado anteriormente.

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')

Agora, crie o objeto HyperparameterTuner e transmita o objeto WarmStartConfig que você criou anteriormente como o argumento warm_start_config.

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)

Por fim, chame o método fit do objeto HyperparameterTuner para executar o trabalho de ajuste com inicialização a quente.

tuner_warm_start.fit( {'train': s3_input_train, 'validation': s3_input_validation}, include_cls_metadata=False)