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 HPO lavoro, definite le impostazioni per il lavoro di ottimizzazione e create 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. Forniamo un esempio di come ottimizzare più algoritmi utilizzando il SageMaker SDK for Python client alla fine di questa guida.
Componenti di un processo di ottimizzazione
Un processo HPO di ottimizzazione 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 HPO ottimizzazione dipende dal fatto che il lavoro 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 del processo di ottimizzazione vengono applicate a tutti gli algoritmi del processo 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 un passaggio successivo. 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 multifedeltà che alloca dinamicamente le risorse verso lavori 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 di iterazione, come XGBoosto 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 il Hyperband funzione interna di arresto anticipato, il parametro TrainingJobEarlyStoppingType
in HyperParameterTuningJobConfig
API deve essere impostato OFF
su.
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. Forniscine almeno una TrainingJobDefinition
per ogni lavoro di HPO ottimizzazione. 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.
Argomenti
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 AmazonSageMakerFullAccess
IAM policy 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 contenitori è disponibile solo quando si crea una definizione di processo da. 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 di Amazon Elastic Container Registry (AmazonECR) sono precompilate.
-
Se scegli il tuo contenitore, devi specificare le informazioni sull'immagine (AmazonECR). Puoi selezionare la modalità di input per l'algoritmo come file o pipe.
-
Se prevedi di fornire i tuoi dati utilizzando un CSV file 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 si utilizza il XGBoost Churn Prediction Notebook
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 Punti di controllo in Amazon SageMaker.
Configurazione dei dati di output
Definire una posizione Amazon S3 per gli artefatti del processo di addestramento da memorizzare. Hai la possibilità di aggiungere la crittografia all'output usando 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 Formazione Spot gestita in 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.
HPOesempio di lavoro di ottimizzazione
Per eseguire un processo di formazione sull'ottimizzazione degli iperparametri (HPO), create innanzitutto una definizione del processo di formazione 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 HPO di ottimizzazione contiene un solo algoritmo di addestramento, la funzione di SageMaker ottimizzazione lo richiamerà HyperparameterTuner
API direttamente e trasmetterà i parametri. Se il processo HPO di ottimizzazione contiene più algoritmi di allenamento, la funzione di ottimizzazione richiamerà la funzione di. create
HyperparameterTuner
API La create
funzione dice loro di API aspettarsi un dizionario contenente uno o più stimatori.
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 incorporati XGBoost e Linear Learner. Se il processo di ottimizzazione contiene solo un algoritmo di addestramento, ometti uno dei contenitori e uno degli stimatori.
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 formazione, convalida e formazione nel bucket Amazon S3 prima di utilizzarli in un lavoro 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 tuner 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, SageMaker XGBoost e Linear Learner. L'esempio di codice mostra anche come impostare una strategia di ottimizzazione e altre impostazioni del lavoro, come le risorse di calcolo per il lavoro 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 lavoro 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 ={})