Creare un processo di ottimizzazione degli iperparametri per uno o più algoritmi (console) - 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à.

Creare un processo di ottimizzazione degli iperparametri per uno o più algoritmi (console)

Questa guida mostra come creare un nuovo processo di ottimizzazione degli iperparametri (HPO) per uno o più algoritmi. Per creare un processo HPO, definisci le impostazioni per il processo di ottimizzazione e crea le definizioni dei processi di addestramento per ogni algoritmo da ottimizzare. Quindi, configura le risorse e crea il processo di ottimizzazione. Nelle seguenti sezioni sono fornite maggiori informazioni su come completare ogni fase. Alla fine di questa guida viene fornito un esempio di come ottimizzare più algoritmi utilizzando il Python client SageMaker SDK for.

Componenti di un processo di ottimizzazione

Un processo di ottimizzazione HPO contiene i seguenti tre componenti:

  • Impostazioni del processo di ottimizzazione

  • Definizioni del processo di addestramento

  • Configurazione del processo di ottimizzazione

Il modo in cui questi componenti vengono inclusi nel processo di ottimizzazione HPO dipende dal fatto che il processo di ottimizzazione contenga uno o più algoritmi di addestramento. La seguente guida descrive ciascuno dei componenti e fornisce un esempio di entrambi i tipi di processi di ottimizzazione.

Le impostazioni dell'attività di ottimizzazione vengono applicate a tutti gli algoritmi dell'attività di ottimizzazione HPO. L'avvio a caldo e l'arresto anticipato sono disponibili solo quando si ottimizza un singolo algoritmo. Dopo aver definito le impostazioni dell'attività, è possibile creare definizioni di addestramento individuali per ogni algoritmo o variazione che si desidera ottimizzare.

Avvio a caldo

Se è stata clonata quest'attività, è possibile scegliere di utilizzare i risultati di un'attività di ottimizzazione precedente per migliorare le prestazioni di questa nuova attività di ottimizzazione. Questa è la funzione di avvio a caldo ed è disponibile solo per l'elaborazione di un singolo algoritmo. Con l'opzione di avvio a caldo, puoi scegliere fino a cinque processi di ottimizzazione degli iperparametri precedenti da utilizzare. In alternativa, puoi utilizzare l'apprendimento del trasferimento per aggiungere ulteriori dati al processo di ottimizzazione principale. Quando si seleziona questa opzione, si sceglie un'attività di ottimizzazione precedente come padre.

Nota

L'avvio a caldo è compatibile solo con le attività di ottimizzazione create dopo il 1 ottobre 2018. Per ulteriori informazioni, consulta Eseguire un'attività di avvio a caldo.

Arresto anticipato

Per ridurre i tempi di calcolo ed evitare un overfitting del modello, puoi interrompere i processi di addestramento in anticipo. L'arresto anticipato è utile quando è improbabile che il processo di addestramento migliori l'attuale migliore parametro obiettivo del processo di ottimizzazione degli iperparametri. Come per l'avvio a caldo, questa funzione è disponibile solo quando si ottimizza un singolo algoritmo. Si tratta di una funzionalità automatica senza opzioni di configurazione ed è disattivata per impostazione predefinita. Per ulteriori informazioni su come funziona l'arresto anticipato, sugli algoritmi che lo supportano e su come utilizzarlo con i propri algoritmi, consulta Interrompere in anticipo i processi di addestramento.

Strategia di ottimizzazione

La strategia di ottimizzazione può essere casuale, bayesiana o Hyperband. Queste selezioni specificano il modo in cui gli algoritmi di ottimizzazione automatica cercano intervalli di iperparametri specificati che vengono selezionati in una fase successiva. La ricerca casuale sceglie combinazioni casuali di valori dagli intervalli specificati e può essere eseguita in sequenza o in parallelo. L'ottimizzazione bayesiana sceglie i valori in base a ciò che è probabile che ottenga il miglior risultato in base alla cronologia nota delle selezioni precedenti. Hyperband utilizza una strategia multi-fedeltà che alloca dinamicamente le risorse verso processi ben utilizzati e blocca automaticamente quelli con prestazioni inferiori. La nuova configurazione che inizia dopo l'interruzione di altre configurazioni viene scelta casualmente.

Hyperband può essere utilizzato solo con algoritmi iterativi o algoritmi che eseguono fasi iterative, come XGBoost o Random Cut Forest. Hyperband non può essere utilizzato con algoritmi non iterativi, come alberi decisionali o k-Nearest Neighbors. Per ulteriori informazioni sulle strategie di ricerca, vedere Come funziona l'ottimizzazione degli iperparametri.

Nota

Hyperband utilizza un meccanismo interno avanzato per applicare l'arresto anticipato. Pertanto, quando si utilizza la funzionalità interna Hyperband di arresto anticipato, il parametro TrainingJobEarlyStoppingType nell'API HyperParameterTuningJobConfig deve essere impostato su OFF.

Tag

Per aiutarti a gestire i processi di ottimizzazione, puoi inserire i tag come coppie chiave-valore per assegnare i metadati ai processi di ottimizzazione. I valori nella coppia chiave-valore non sono obbligatori. È possibile utilizzare la chiave senza valori. Per visualizzare le chiavi associate a un'attività, scegliere la scheda Tag nella pagina dei dettagli del processo di ottimizzazione. Per ulteriori informazioni sull'utilizzo dei tag per i processi di ottimizzazione, consultare Gestire i processi di ottimizzazione e addestramento degli iperparametri.

Per creare una definizione del processo di addestramento, è necessario configurare l'algoritmo e i parametri, definire l'input e l'output dei dati e configurare le risorse. Fornisci almeno una TrainingJobDefinition per ogni processo di ottimizzazione HPO. Ogni definizione di addestramento specifica la configurazione di un algoritmo.

Per creare diverse definizioni per il tuo processo di addestramento, puoi clonare una definizione. La clonazione di un processo può far risparmiare tempo perché copia tutte le impostazioni del processo, inclusi i canali di dati e le posizioni di archiviazione di Amazon S3 degli artefatti di output. Puoi modificare un processo clonato per cambiare ciò che ti serve per il tuo caso d'uso.

Configura algoritmo e parametri

L'elenco seguente descrive ciò che è necessario per configurare l'insieme di valori degli iperparametri per ogni processo di addestramento.

  • Un nome per il tuo processo di ottimizzazione

  • Autorizzazioni di accesso ai servizi

  • Parametri per qualsiasi opzione di algoritmo

  • Un parametro obiettivo

  • L'intervallo di valori degli iperparametri, se richiesto

Nome

Fornire un nome univoco per la definizione di addestramento.

Autorizzazioni

Amazon SageMaker richiede le autorizzazioni per chiamare altri servizi per tuo conto. Scegli un ruolo AWS Identity and Access Management (IAM) o lascia che venga AWS creato un ruolo con la policy AmazonSageMakerFullAccess IAM allegata.

Impostazioni di sicurezza facoltative

L'impostazione di isolamento di rete impedisce al container di effettuare chiamate di rete in uscita. Questo è necessario per le offerte di Marketplace AWS machine learning.

Puoi anche scegliere di utilizzare un cloud privato virtuale (VPC).

Nota

La crittografia tra container è disponibile solo quando si crea la definizione del processo dall'API.

Opzioni algoritmo

Puoi scegliere algoritmi integrati, un tuo algoritmo, un tuo container con un algoritmo oppure puoi iscriverti a un algoritmo da Marketplace AWS.

  • Se scegli un algoritmo integrato, le informazioni sull'immagine Amazon Elastic Container Registry (Amazon ECR) sono precompilate.

  • Se scegli un tuo container, devi specificare le informazioni sull'immagine (Amazon ECR). È possibile selezionare la modalità di input per l'algoritmo come file o pipe.

  • Se intendi fornire i tuoi dati utilizzando un file CSV di Amazon S3, devi selezionare il file.

Metriche

Quando scegli un algoritmo integrato, i parametri vengono forniti per l'utente. Se scegli il tuo algoritmo, devi definire i parametri. Puoi definire fino a 20 parametri da monitorare per il processo di ottimizzazione. È necessario scegliere un parametro come parametro obiettivo. Per ulteriori informazioni su come definire un parametro per un processo di ottimizzazione, consulta Definizione dei parametri.

Parametro obiettivo

Per trovare il miglior processo di addestramento, stabilisci un parametro obiettivo e stabilisci se massimizzarlo o minimizzarlo. Dopo aver completato il processo di addestramento, è possibile visualizzare la pagina dei dettagli del processo di ottimizzazione. La pagina dei dettagli fornisce un riepilogo del miglior processo di addestramento trovato utilizzando questo parametro obiettivo.

Configurazione degli iperparametri

Quando scegli un algoritmo integrato, i valori predefiniti degli iperparametri vengono impostati per l'utente, utilizzando intervalli ottimizzati per gli algoritmi da ottimizzare. Puoi modificare questi valori in base alle tue esigenze. Per esempio, invece di un intervallo, è possibile impostare un valore fisso per un iperparametro impostando il tipo di parametro su statico. Ogni algoritmo ha diversi parametri obbligatori e facoltativi. Per ulteriori informazioni, consulta Best practice per l'ottimizzazione degli iperparametri e Definizione degli intervalli deglli iperparametri.

Definizione dell'input e dell'output dei dati

Ogni definizione di processo di addestramento per un processo di ottimizzazione deve configurare i canali per gli input di dati, le posizioni di output dei dati e, facoltativamente, le posizioni di archiviazione dei checkpoint per ogni processo di addestramento.

Configurazione dei dati di input

I dati di input sono definiti per canali. Ogni canale ha la propria posizione di origine (Amazon S3 o Amazon Elastic File System), compressione e opzioni di formato. Puoi definire fino a 20 canali di origine di input. Se l'algoritmo scelto supporta più canali di input, puoi specificare anche quelli. Ad esempio, quando utilizzi il XGBoostnotebook di previsione dei tassi di abbandono, puoi aggiungere due canali: addestramento e convalida.

Configurazione checkpoint

I checkpoint vengono generati periodicamente durante l’addestramento. Per salvare i checkpoint, devi scegliere una posizione Amazon S3. I checkpoint vengono utilizzati nei report dei parametri e vengono utilizzati anche per riprendere i processi di addestramento spot gestite. Per ulteriori informazioni, consulta Usa i checkpoint in Amazon SageMaker.

Configurazione dei dati di output

Definire una posizione Amazon S3 per gli artefatti del processo di addestramento da memorizzare. È possibile aggiungere la crittografia all'output utilizzando una chiave AWS Key Management Service (AWS KMS).

Configurare le risorse per il processo di addestramento

Ogni definizione di processo di addestramento per un processo di ottimizzazione deve configurare le risorse da distribuire, compresi i tipi e i numeri di istanze, l’addestramento spot gestito e le condizioni di arresto.

Configurazione delle risorse

Ogni definizione di addestramento può avere una configurazione di risorse diversa. È possibile scegliere il tipo di istanza e il numero di nodi.

Addestramento spot gestito

È possibile ridurre i costi informatici per i lavori se si dispone di flessibilità negli orari di inizio e fine consentendo di SageMaker utilizzare la capacità inutilizzata per eseguire i lavori. Per ulteriori informazioni, consulta Usa la formazione Spot gestita su Amazon SageMaker.

Condizione di arresto

La condizione di arresto specifica la durata massima consentita per ogni processo di addestramento.

Aggiungi o clona un processo di addestramento

Dopo aver creato una definizione di processo di addestramento per un processo di ottimizzazione, tornerai al pannello Definizioni dei processi di addestramento. In questo pannello è possibile creare definizioni di processi di addestramento aggiuntive per addestrare algoritmi aggiuntivi. È possibile selezionare la definizione di Aggiungi processo di addestramento ed eseguire nuovamente le fasi per definire nuovamente un processo di addestramento.

In alternativa, per replicare una definizione di processo di addestramento esistente e modificarla per il nuovo algoritmo, scegli Clona dal menu Azioni. L'opzione clona può far risparmiare tempo perché copia tutte le impostazioni del processo, inclusi i canali dei dati e le posizioni di archiviazione di Amazon S3. Per maggiori informazioni sulla clonazione, consulta Gestire i processi di ottimizzazione e addestramento degli iperparametri.

Limiti delle risorse

È possibile specificare il numero massimo di processi di addestramento concomitanti che un processo di ottimizzazione degli iperparametri può eseguire simultaneamente (massimo 10). È possibile anche specificare il numero massimo di processi di addestramento che il processo di ottimizzazione degli iperparametri può eseguire (500 al massimo). Il numero di attività parallele non deve superare il numero di nodi richiesti in tutte le definizioni di addestramento. Il numero totale di attività non può superare il numero di attività che si prevede saranno eseguite dalle definizioni.

Rivedi le impostazioni del processo, le definizioni dei processi di addestramento e i limiti delle risorse. Poi scegli Crea processo di ottimizzazione degli iperparametri.

Esempio di processo di ottimizzazione HPO

Per eseguire un processo di addestramento sull'ottimizzazione degli iperparametri (HPO), crea innanzitutto una definizione di processo di addestramento per ogni algoritmo che viene ottimizzato. Quindi, definisci le impostazioni del processo di ottimizzazione e configura le risorse del processo di ottimizzazione. Infine, esegui il processo di ottimizzazione.

Se il processo di ottimizzazione HPO contiene un singolo algoritmo di addestramento, la funzione di SageMaker ottimizzazione chiamerà direttamente l'HyperparameterTunerAPI e trasmetterà i parametri. Se il processo di ottimizzazione HPO contiene più algoritmi di addestramento, la funzione di ottimizzazione chiamerà la funzione createdell'API HyperparameterTuner. La funzione create indica all'API di aspettarsi un dizionario contenente uno o più strumenti di valutazione.

Nella sezione seguente, alcuni esempi di codice mostrano come ottimizzare un job contenente un singolo algoritmo di addestramento o più algoritmi utilizzando il. SageMaker Python SDK

Creazione di definizioni dei processi di addestramento

Quando crei un processo di ottimizzazione che include più algoritmi di addestramento, la configurazione del processo di ottimizzazione includerà gli strumenti di valutazione, le metriche e altri parametri per i tuoi processi di addestramento. Pertanto, è necessario creare prima la definizione del processo di addestramento e quindi configurare il processo di ottimizzazione.

Il seguente esempio di codice mostra come recuperare due SageMaker contenitori contenenti gli algoritmi XGBoostincorporati e. Linear Learner Se il processo di ottimizzazione contiene solo un algoritmo di addestramento, ometti uno dei container e uno degli strumenti di valutazione.

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

Quindi, definisci i dati di input specificando i set di dati di addestramento, convalida e test, come mostrato nel seguente esempio di codice. In questo esempio viene illustrato come ottimizzare più algoritmi di addestramento.

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 l'algoritmo di ottimizzazione contiene un solo algoritmo di addestramento, train_inputs dovrebbe contenere solo uno strumento di valutazione.

È necessario caricare gli input per i set di dati di addestramento, di convalida e di addestramento nel bucket Amazon S3 prima di utilizzarli in un processo di ottimizzazione HPO.

Definisci le risorse e le impostazioni per il tuo processo di ottimizzazione

Questa sezione mostra come inizializzare un sintonizzatore, definire le risorse e specificare le impostazioni del processo ottimizzazione. Se il processo di ottimizzazione contiene più algoritmi di addestramento, queste impostazioni vengono applicate a tutti gli algoritmi contenuti nel processo di ottimizzazione. Questa sezione fornisce due esempi di codice per definire un sintonizzatore. Gli esempi di codice mostrano come ottimizzare un singolo algoritmo di addestramento seguiti da un esempio di come ottimizzare più algoritmi di addestramento.

Ottimizzare un singolo algoritmo di addestramento

Il seguente esempio di codice mostra come inizializzare un sintonizzatore e impostare intervalli di iperparametri per un algoritmo integrato,. 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, )

Ottimizzare più algoritmi di addestramento

Ogni processo di addestramento richiede configurazioni diverse, che vengono specificate utilizzando un dizionario. Il seguente esempio di codice mostra come inizializzare un sintonizzatore con configurazioni per due algoritmi incorporati e. SageMaker XGBoost Linear Learner L'esempio di codice mostra anche come impostare una strategia di ottimizzazione e altre impostazioni di processo, come le risorse di calcolo per il processo di ottimizzazione. Il seguente esempio di codice utilizza metric_definitions_dict, che è facoltativo.

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

Esegui il tuo processo di ottimizzazione HPO

Ora puoi eseguire il processo di ottimizzazione trasferendo gli input di addestramento alla funzione fit della classe HyperparameterTuner. Il seguente esempio di codice mostra come passare al sintonizzatore il parametro train_inputs, definito in un esempio di codice precedente.

tuner.fit(inputs=train_inputs, include_cls_metadata ={}, estimator_kwargs ={})