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.
Argomenti
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 aDescribeHyperParameterTuningJob
denominatoOverallBestTrainingJob
. 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
oFailed
) 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
eblue
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 dired
nel processo padre e modifichi il valore statico sublue
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 conMyTuningJob2
come processo padre eMyTuningJob2
è un processo di ottimizzazione con avvio a caldo con un processo padreMyTuningJob1
, le informazioni apprese durante l'esecuzione diMyTuningJob1
non vengono utilizzate perMyTuningJob3
. Per utilizzare le informazioni diMyTuningJob1
, devi aggiungerlo esplicitamente come padre perMyTuningJob3
. -
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-exampleshpo_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.
Argomenti
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 HyperParameterTuningJobWarmStartConfig
oggetto e passarlo al CreateHyperParameterTuningJob
job 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
-
Specificare i processi padre e il tipo di avvio a caldo utilizzando un oggetto
WarmStartConfig
. -
Passa l'
WarmStartConfig
oggetto come valore dell'warm_start_config
argomento di un HyperparameterTuneroggetto. -
Chiamare il metodo
fit
dell'oggettoHyperparameterTuner
.
Per ulteriori informazioni sull'utilizzo di Amazon SageMaker Python SDK
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)