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

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 Comprensione delle strategie di ottimizzazione degli iperparametri disponibili in Amazon SageMaker AI. 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 è TrainingJobSummary per il processo di addestramento con il miglior valore del parametro obiettivo di tutti i processi di addestramento avviati da questo processo di ottimizzazione e di tutti i processi padre 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 notebook di esempio che mostra come utilizzare l'ottimizzazione con avvio a caldo, consulta https://github.com/awslabs/amazon-sagemaker-examples/blob/master/iperparametro_tuning/image_classification_warmstart/hpo_image_classification_warmstart.ipynb.

Creazione di un processo di ottimizzazione con avvio a caldo

Puoi utilizzare l’AWS SDK per Python di basso livello (Boto 3) o il SageMaker AI Python SDK di alto livello per creare un processo di ottimizzazione con avvio a caldo.

Creazione di un processo di ottimizzazione con avvio a caldo (API SageMaker AI di basso livello per 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 oggetto HyperParameterTuningJobWarmStartConfig e passarlo al processo CreateHyperParameterTuningJob utilizzando l’API SageMaker AI di basso livello 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)

Creazione di un processo di ottimizzazione con avvio a caldo (SageMaker AI Python SDK)

Per utilizzare l'SDK Python di Amazon SageMaker per eseguire un lavoro di ottimizzazione con avvio a caldo, devi:

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

  • Passare l'oggetto WarmStartConfig come valore dell'argomento warm_start_config di un oggetto HyperparameterTuner.

  • Chiamare il metodo fit dell'oggetto HyperparameterTuner.

Per maggiori informazioni sull'utilizzo dell'SDK Python di Amazon SageMaker e 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)