Eseguire un processo di ottimizzazione degli iperparametri con avvio a caldo - Amazon SageMaker

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Eseguire un processo di ottimizzazione degli iperparametri con avvio a caldo

Esegui un avvio a caldo per avviare un processo di ottimizzazione degli iperparametri utilizzando uno o più processi di ottimizzazione precedenti come punto di partenza. I risultati dei processi di ottimizzazione precedenti vengono utilizzati per indicare le combinazioni di iperparametri da cercare nel nuovo processo di ottimizzazione. L'ottimizzazione degli iperparametri utilizza la ricerca bayesiana o random per scegliere le combinazioni di valori degli iperparametri da intervalli specificati da te. Per ulteriori informazioni, consulta Comprendi le strategie di ottimizzazione degli iperparametri disponibili in Amazon SageMaker. L'utilizzo delle informazioni provenienti da processi di ottimizzazione degli iperparametri precedenti consente di aumentare le prestazioni del nuovo processo di ottimizzazione degli iperparametri perché rende più efficiente la ricerca per la migliore combinazione di iperparametri.

Nota

L'avvio dei processi di ottimizzazione con avvio a caldo richiede in genere più tempo rispetto ai processi di ottimizzazione degli iperparametri standard perché i risultati dei processi padre devono essere caricati prima di poter avviare il processo. I tempi più lunghi dipendono dal numero totale di processi di addestramento avviati dai processi padre.

I motivi per considerare l'avvio a caldo includono quanto segue:

  • Per aumentare gradualmente il numero di processi di addestramento in più processi di ottimizzazione in base ai risultati dopo ogni iterazione.

  • Per ottimizzare un modello utilizzando i nuovi dati ricevuti.

  • Per modificare gli intervalli di iperparametri utilizzati in un processo di ottimizzazione precedente, modifica gli iperparametri statici in ottimizzabili oppure modifica gli iperparametri ottimizzabili in valori statici.

  • Un processo di ottimizzazione degli iperparametri è stato interrotto in anticipo o in modo imprevisto.

Tipi di processi di ottimizzazione con avvio a caldo

Sono disponibili due diversi tipi di processi di ottimizzazione con avvio a caldo:

IDENTICAL_DATA_AND_ALGORITHM

Il nuovo processo di ottimizzazione degli iperparametri utilizza gli stessi dati di input e la stessa immagine di addestramento dei processi di ottimizzazione padre. Puoi modificare gli intervalli di iperparametri da cercare e il numero massimo di processi di addestramento avviati dal processo di ottimizzazione degli iperparametri. Puoi anche modificare gli iperparametri da ottimizzabili a statici e da statici a ottimizzabili, ma il numero totale di iperparametri statici e ottimizzabili deve rimanere inalterato in tutti i processi padre. Non puoi utilizzare una nuova versione dell'algoritmo di addestramento, a meno che le modifiche nella nuova versione non interessino l'algoritmo stesso. Ad esempio, sono consentite le modifiche che migliorano il logging o l'aggiunta del supporto per un altro formato di dati.

Non modificare dati e algoritmi quando utilizzi gli stessi dati di addestramento di un processo di ottimizzazione degli iperparametri precedente, aumentando però il numero totale di processi di addestramento o modificando gli intervalli o i valori degli iperparametri.

Quando esegui un processo di ottimizzazione con avvio a caldo di tipo IDENTICAL_DATA_AND_ALGORITHM, viene visualizzato un altro campo nella risposta a DescribeHyperParameterTuningJob denominato OverallBestTrainingJob. Il valore di questo campo si riferisce al TrainingJobSummaryprocesso di formazione con il miglior valore metrico oggettivo tra tutti i lavori di formazione avviati da questo processo di ottimizzazione e tutti i processi principali specificati per il processo di ottimizzazione con avvio a caldo.

TRANSFER_LEARNING

Il nuovo processo di ottimizzazione degli iperparametri può includere dati di input, intervalli di iperparametri, il numero massimo di processi di addestramento simultanei e il numero massimo di processi di addestramento diversi rispetto a quelli dei processi di ottimizzazione degli iperparametri padre. Puoi anche modificare gli iperparametri da ottimizzabili a statici e da statici a ottimizzabili, ma il numero totale di iperparametri statici e ottimizzabili deve rimanere inalterato in tutti i processi padre. L'immagine dell'algoritmo di addestramento può anche essere una versione diversa rispetto a quella utilizzata nel processo di ottimizzazione degli iperparametri padre. Quando utilizzi il trasferimento dell'apprendimento, le modifiche nel set di dati o l'algoritmo che influisce significativamente sul valore del parametro obiettivo potrebbero rendere meno utile l'utilizzo dell'ottimizzazione con avvio a caldo.

Limitazioni dell'ottimizzazione con avvio a caldo

Le seguenti limitazioni si applicano a tutti i processi di ottimizzazione con avvio a caldo:

  • Un processo di ottimizzazione può avere un massimo di 5 processi padre e tutti i processi padre devono essere in uno stato terminale (Completed, Stopped o Failed) prima di avviare il nuovo processo di ottimizzazione.

  • Il parametro obiettivo utilizzato nel nuovo processo di ottimizzazione deve essere lo stesso di quello utilizzato nei processi padre.

  • Il numero totale iperparametri statici e ottimizzabili deve rimanere lo stesso tra i processi padre e il nuovo processo di ottimizzazione. Per questo motivo, se pensi di voler utilizzare un iperparametro ottimizzabile in un futuro processo di ottimizzazione con avvio a caldo, devi aggiungerlo come iperparametro statico quando crei un processo di ottimizzazione.

  • Il tipo di ogni iperparametro (continuo, intero, categorico) non deve cambiare tra un processo padre e il nuovo processo di ottimizzazione.

  • Il numero totale delle modifiche da iperparametri ottimizzabili nei processi padre a iperparametri statici nel nuovo processo di ottimizzazione più il numero di modifiche nei valori degli iperparametri statici non può superare 10. Ad esempio, se il processo padre ha un iperparametro ottimizzabile categorico con i valori possibili red e blue e modifichi l'iperparametro su statico nel nuovo processo di ottimizzazione, vengono conteggiate 2 modifiche in rapporto al limite di 10. Vengono conteggiate 2 modifiche anche se lo stesso iperparametro aveva un valore statico di red nel processo padre e modifichi il valore statico su blue nel nuovo processo di ottimizzazione.

  • L'ottimizzazione con avvio a caldo non è ricorsiva. Ad esempio, se crei MyTuningJob3 come processo di ottimizzazione con avvio a caldo con MyTuningJob2 come processo padre e MyTuningJob2 è un processo di ottimizzazione con avvio a caldo con un processo padre MyTuningJob1, le informazioni apprese durante l'esecuzione di MyTuningJob1 non vengono utilizzate per MyTuningJob3. Per utilizzare le informazioni di MyTuningJob1, devi aggiungerlo esplicitamente come padre per MyTuningJob3.

  • I processi di addestramento avviati da ogni processo padre in un processo di ottimizzazione con avvio a caldo vengono conteggiati nel numero massimo di 500 processi di addestramento per un processo di ottimizzazione.

  • I processi di ottimizzazione degli iperparametri creati prima del 1° ottobre 2018 non possono essere utilizzati come processi padre per i processi di ottimizzazione con avvio a caldo.

Notebook di esempio per l'ottimizzazione con avvio a caldo

Per un taccuino di esempio che mostra come utilizzare l'ottimizzazione con avvio a caldo, consulta /blob/master/hyperparameter_tuning/image_classification_warmstart/hpo_image_classification_warmstart.ipynb. https://github.com/awslabs/ amazon-sagemaker-examples Per istruzioni su come creare e accedere alle istanze di notebook Jupyter che è possibile utilizzare per eseguire l'esempio, vedere. SageMaker Accedi a taccuini di esempio Dopo aver creato un'istanza di notebook e averla aperta, seleziona la scheda SageMaker Esempi per visualizzare un elenco di tutti gli esempi. SageMaker Il notebook di esempio per l'ottimizzazione con avvio a caldo è disponibile nella sezione Hyperparameter tuning (Ottimizzazione degli iperparametri) ed è denominato hpo_image_classification_warmstart.ipynb. Per aprire un notebook, fai clic sulla relativa scheda Use (Utilizza) e seleziona Create copy (Crea copia).

Creare un processo di ottimizzazione con avvio a caldo

Puoi usare il livello basso AWS SDK per Python (Boto 3) o il Python di alto livello per creare un lavoro di SageMaker ottimizzazione con SDK avvio immediato.

Crea un Warm Start Tuning Job (di basso livello per SageMaker API Python (Boto 3))

Per utilizzare l'ottimizzazione con avvio a caldo, devi specificare i valori di un oggetto HyperParameterTuningJobWarmStartConfig e passarli come campo WarmStartConfig in una chiamata a CreateHyperParameterTuningJob.

Il codice seguente mostra come creare un HyperParameterTuningJobWarmStartConfigoggetto e passarlo al CreateHyperParameterTuningJobjob utilizzando il livello basso SageMaker API per Python (Boto 3).

Crea l'oggetto HyperParameterTuningJobWarmStartConfig:

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

Crea il processo di ottimizzazione con avvio a caldo:

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)

Creare un Warm Start Tuning Job (SageMakerPythonSDK)

Per utilizzare Amazon SageMaker Python SDK per eseguire un processo di ottimizzazione con avvio immediato, devi:

  • Specificare i processi padre e il tipo di avvio a caldo utilizzando un oggetto WarmStartConfig.

  • Passa l'WarmStartConfigoggetto come valore dell'warm_start_configargomento di un HyperparameterTuneroggetto.

  • Chiamare il metodo fit dell'oggetto HyperparameterTuner.

Per ulteriori informazioni sull'utilizzo di Amazon SageMaker Python SDK per l'ottimizzazione degli iperparametri, consulta #. https://github.com/aws/ sagemaker-python-sdk sagemaker-automatic-model-tuning

Questo esempio utilizza uno strumento di valutazione basato sull'algoritmo Classificazione delle immagini - MXNet per l’addestramento. Il codice seguente imposta gli intervalli degli iperparametri in cui il processo di ottimizzazione con avvio a caldo esegue le ricerche per trovare la migliore combinazione di valori. Per ulteriori informazioni sull'impostazione degli intervalli degli iperparametri, consulta Definire gli intervalli degli iperparametri.

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

Il codice seguente configura il processo di ottimizzazione con avvio a caldo creando un oggetto 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})

Ora imposta i valori per gli iperparametri statici, ovvero gli iperparametri che mantengono lo stesso valore per ogni processo di addestramento avviato dal processo di ottimizzazione con avvio a caldo. Nel codice seguente, imageclassification è uno strumento di valutazione creato in precedenza.

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

Ora, crea l'oggetto HyperparameterTuner e passa l'oggetto WarmStartConfig creato in precedenza come argomento 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)

Infine, chiama il metodo fit dell'oggetto HyperparameterTuner e avvia il processo di ottimizzazione con avvio a caldo.

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