Questa pagina mostra come utilizzare l'iperparametro di AI Platform Training durante l'addestramento del modello. L'ottimizzazione degli iperparametri ottimizza un target da te specificata. La variabile target è denominata metrica degli iperparametri. Quando avvii un job con l'ottimizzazione degli iperparametri, e stabilire il nome della metrica dell'iperparametro. Questo è il nome che assegni il riassunto scalare che aggiungi al tuo trainer.
I passaggi necessari per l'ottimizzazione degli iperparametri
Per utilizzare l'ottimizzazione degli iperparametri nel job di addestramento, devi eseguire quanto segue passaggi:
Specifica la configurazione dell'ottimizzazione degli iperparametri per il job di addestramento includendo HyperparameterSpec nell'oggetto TrainingInput.
Includi il codice seguente nell'applicazione di addestramento:
- Analizza gli argomenti della riga di comando che rappresentano gli iperparametri che che vuoi ottimizzare e usali per impostare gli iperparametri dell'addestramento di Google.
- Aggiungi la metrica degli iperparametri al riepilogo del grafico.
Di seguito sono riportati ulteriori dettagli per ciascun passaggio.
Specifica la configurazione dell'ottimizzazione degli iperparametri per il job di addestramento
Crea un oggetto HyperparameterSpec per contenere l'ottimizzazione degli iperparametri
configurazione per il job di addestramento e aggiungi HyperparameterSpec
come
hyperparameters
nell'oggetto TrainingInput.
Il job di ottimizzazione degli iperparametri creerà job di prova. Se vuoi accelerare
di addestramento del job di prova, puoi specificare un tipo di macchina personalizzata
Oggetto TrainingInput. Ad esempio, per creare job di prova con ogni prova
un job utilizzando n1-standard-8
VM, puoi specificare che masterType
sia n1-standard-8
e lascia vuota la configurazione del worker.
In HyperparameterSpec
, imposta hyperparameterMetricTag
su un valore
che rappresentano la metrica scelta. Se non specifichi
un hyperparameterMetricTag
, AI Platform Training cerca una metrica con
nome training/hptuning/metric
. L'esempio seguente mostra come creare un
configurazione per una metrica denominata metric1
:
gcloud
Aggiungi le informazioni sulla configurazione degli iperparametri ai file YAML di configurazione
. Di seguito è riportato un esempio. Per un file di configurazione funzionante, vedi
hptuning_config.yaml
nel campione dello strumento di stima del censimento.
trainingInput:
scaleTier: CUSTOM
masterType: complex_model_m
workerType: complex_model_m
parameterServerType: large_model
workerCount: 9
parameterServerCount: 3
hyperparameters:
goal: MAXIMIZE
hyperparameterMetricTag: metric1
maxTrials: 30
maxParallelTrials: 1
enableTrialEarlyStopping: True
params:
- parameterName: hidden1
type: INTEGER
minValue: 40
maxValue: 400
scaleType: UNIT_LINEAR_SCALE
- parameterName: numRnnCells
type: DISCRETE
discreteValues:
- 1
- 2
- 3
- 4
- parameterName: rnnCellType
type: CATEGORICAL
categoricalValues:
- BasicLSTMCell
- BasicRNNCell
- GRUCell
- LSTMCell
- LayerNormBasicLSTMCell
Python
Crea un dizionario che rappresenti il valore HyperparameterSpec e aggiungilo al tuo
input di addestramento. L'esempio seguente presuppone che tu abbia già creato
un dizionario TrainingInput
(in questo caso denominato training_inputs
) come mostrato
nella configurazione del job di addestramento
.
# Add hyperparameter tuning to the job config.
hyperparams = {
'goal': 'MAXIMIZE',
'hyperparameterMetricTag': 'metric1',
'maxTrials': 30,
'maxParallelTrials': 1,
'enableTrialEarlyStopping': True,
'params': []}
hyperparams['params'].append({
'parameterName':'hidden1',
'type':'INTEGER',
'minValue': 40,
'maxValue': 400,
'scaleType': 'UNIT_LINEAR_SCALE'})
hyperparams['params'].append({
'parameterName':'numRnnCells',
'type':'DISCRETE',
'discreteValues': [1, 2, 3, 4]})
hyperparams['params'].append({
'parameterName':'rnnCellType',
'type': 'CATEGORICAL',
'categoricalValues': [
'BasicLSTMCell',
'BasicRNNCell',
'GRUCell',
'LSTMCell',
'LayerNormBasicLSTMCell'
]
})
# Add hyperparameter specification to the training inputs dictionary.
training_inputs['hyperparameters'] = hyperparams
# Build the job spec.
job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}
controlla il codice nell'applicazione di addestramento
Nell'applicazione, gestisci gli argomenti della riga di comando per gli iperparametri e segnalare la metrica degli iperparametri ad AI Platform Training.
Gestisci gli argomenti della riga di comando per gli iperparametri da ottimizzare
AI Platform Training imposta gli argomenti della riga di comando quando chiama il tuo addestramento un'applicazione. Utilizza gli argomenti della riga di comando nel tuo codice:
Definisci un nome per ogni argomento degli iperparametri e analizzalo utilizzando parser di argomenti che preferisci (in genere
argparse
). I nomi degli argomenti devono corrispondere ai nomi dei parametri specificati nel del job, come descritto sopra.Assegnare i valori dagli argomenti della riga di comando agli iperparametri in il codice di addestramento.
Segnala la tua metrica degli iperparametri ad AI Platform Training
Il modo per segnalare la metrica degli iperparametri al servizio AI Platform Training dipende se utilizzare TensorFlow per l'addestramento o meno. Dipende anche se utilizzi o meno una versione di runtime o un container personalizzato per l'addestramento.
Consigliamo che il codice di addestramento registri la metrica degli iperparametri a AI Platform Training frequentemente per sfruttare in anticipo interruzione del servizio.
TensorFlow con una versione di runtime
Se utilizzi una versione di runtime di AI Platform Training e addestrarlo con TensorFlow, quindi puoi generare un report sulla metrica degli iperparametri AI Platform Training scrivendo la metrica in un riepilogo TensorFlow. Utilizza uno dei seguenti le seguenti funzioni:
tf.compat.v1.summary.FileWriter.add_summary
(noto anche cometf.summary.FileWriter.add_summary
in TensorFlow 1.x)tf.summary.scalar
(solo in TensorFlow 2.x)
Utilizzo di un'API TensorFlow diversa che chiama una delle funzioni precedenti, nel seguente esempio dello strumento di stima, riporta anche la metrica degli iperparametri a e AI Platform Training.
I seguenti esempi illustrano le nozioni di base di due diversi modi per scrivere i tuoi
la metrica degli iperparametri a un riepilogo. Entrambi gli esempi presuppongono che tu stia addestrando
di regressione lineare e scrivono l'errore quadratico medio tra dati empirici reali
etichette e previsioni di valutazione come metrica degli iperparametri denominata metric1
.
Keras
L'esempio seguente utilizza un keras personalizzato da richiamare per scrivere un riassunto scalare alla fine di ogni epoca di addestramento:
class MyMetricCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs=None):
tf.summary.scalar('metric1', logs['RootMeanSquaredError'], epoch)
logdir = "logs/scalars/" + datetime.now().strftime("%Y%m%d-%H%M%S")
file_writer = tf.summary.create_file_writer(logdir + "/metrics")
file_writer.set_as_default()
model = tf.keras.Sequential(
tf.keras.layers.Dense(1, activation='linear', input_dim=784))
model.compile(
optimizer='rmsprop',
loss='mean_squared_error',
metrics=['RootMeanSquaredError'])
model.fit(
x_train,
y_train,
batch_size=64,
epochs=10,
steps_per_epoch=5,
verbose=0,
callbacks=[MyMetricCallback()])
Strumento di stima
L'esempio seguente utilizza
tf.estimator.add_metrics
per aggiungere la metrica degli iperparametri al riepilogo del grafico.
Tieni presente che gli strumenti di stima scrivono un riepilogo del grafico ogni volta che il loro evaluate
metodo
viene eseguito. Questo esempio utilizza
tf.estimator.EvalSpec
con
tf.estimator.train_and_evaluate
per configurare lo strumento di stima in modo da valutare e scrivere riepiloghi ogni 300 secondi
durante l'addestramento.
# Create metric for hyperparameter tuning
def my_metric(labels, predictions):
# Note that different types of estimator provide different different
# keys on the predictions Tensor. predictions['predictions'] is for
# regression output.
pred_values = predictions['predictions']
return {'metric1': tf.compat.v1.metrics.root_mean_squared_error(labels, pred_values)}
# Create estimator to train and evaluate
def train_and_evaluate(output_dir):
estimator = tf.estimator.DNNLinearCombinedRegressor(...)
estimator = tf.estimator.add_metrics(estimator, my_metric)
train_spec = ...
eval_spec = tf.estimator.EvalSpec(
start_delay_secs = 60, # start evaluating after 60 seconds
throttle_secs = 300, # evaluate every 300 seconds
...)
tf.estimator.train_and_evaluate(estimator, train_spec, eval_spec)
Altri framework di machine learning o container personalizzati
Se utilizzi un container personalizzato per l'addestramento
o se vuoi eseguire l'ottimizzazione degli iperparametri con un framework diverso
TensorFlow, è necessario utilizzare
cloudml-hypertune
:
Pacchetto Python per segnalare la metrica degli iperparametri ad AI Platform Training.
Guarda un esempio di utilizzo
cloudml-hypertune
.
Recupero dei dettagli di un job di ottimizzazione degli iperparametri durante l'esecuzione
Puoi monitorare l'ottimizzazione degli iperparametri ottenere lo stato dettagliato di un allenamento di corsa Google Cloud.
L'oggetto TrainingOutput
nella
per la risorsa Job della risposta sono impostati i seguenti valori durante un job di addestramento con
Ottimizzazione degli iperparametri:
isHyperparameterTuningJob
impostato suTrue
.trials
è presente e contiene un elenco diHyperparameterOutput
uno per prova.
Puoi anche recuperare l'ID di prova dalla variabile di ambiente TF_CONFIG
Consulta la guida per
ricevere dettagli da TF_CONFIG
.
Ottenere i risultati dell'ottimizzazione degli iperparametri
Al termine delle esecuzioni, puoi
visualizzare i risultati di ogni prova nella console Google Cloud.
In alternativa, puoi chiamare
projects.jobs.get
per ottenere
che consentono di analizzare i dati
e visualizzare i risultati. La
TrainingOutput
nella risorsa job contiene le metriche per tutte le esecuzioni, con
per la corsa più ottimizzata identificata.
Usa lo stesso richiesta di stato dettagliata durante l'elaborazione per ottenere queste informazioni.
Puoi vedere i risultati di ogni prova nella descrizione del job. Nella
Console Google Cloud, puoi filtrare le prove per rmse
, learning_rate
e
training steps
. Trova la prova che ha prodotto il valore più desiderabile per il tuo
la metrica degli iperparametri. Se la prova soddisfa il tuo standard per il successo
del modello, puoi usare i valori degli iperparametri mostrati per quella prova nelle successive
del modello.
A volte più prove forniscono risultati identici per metrica di ottimizzazione. In tal caso, devi determinare quale iperparametro sono più vantaggiosi da altre misure. Ad esempio, se il numero di nodi in uno strato nascosto e si ottengono risultati identici quando è impostato su 8, mentre se è impostato su 20, dovresti usare 8, più nodi significano più processi e costi per l'assenza di miglioramenti nel modello.
Stato della prova di FAILED
in
HyperparameterOutput può utilizzare
significa che l'addestramento non è riuscito per quella prova, o che la prova non è riuscita
la metrica di ottimizzazione
degli iperparametri. Nel secondo caso, il job padre può
avrà esito positivo anche se la prova non va a buon fine. Puoi visualizzare il log della prova per vedere se
addestramento non riuscito per la prova.
Impostando un limite per il numero di prove
Devi decidere quante prove vuoi consentire l'esecuzione e impostare il servizio
il valore maxTrials
nell'oggetto HyperparameterSpec.
Ci sono due interessi in conflitto da considerare quando si decide quante prove consenti:
- tempo (e di conseguenza costo)
- accuracy
L'aumento del numero di prove generalmente produce risultati migliori, ma non sempre così. Nella maggior parte dei casi c'è un punto di diminuzione del rendimento dopo il quale prove aggiuntive hanno poco o nessun effetto sulla precisione. L'ideale è inizia con un numero limitato di prove per valutare l'effetto che hai scelto che gli iperparametri hanno un'accuratezza del modello prima di iniziare un job con e un numero elevato di prove.
Per ottenere il massimo dall'ottimizzazione degli iperparametri, non devi impostare il tuo valore massimo inferiore a dieci volte il numero di iperparametri utilizzati.
Gestione delle prove non riuscite
Se le prove di ottimizzazione degli iperparametri escono con errori, potresti
di terminare il job di addestramento in anticipo. Imposta il campo maxFailedTrials
nel
HyperparameterSpec al numero di prove non riuscite che vuoi consentire.
Se questo numero di prove non va a buon fine, il job di addestramento termina con AI Platform Training.
Il valore maxFailedTrials
deve essere minore o uguale a maxTrials
.
Se non imposti maxFailedTrials
o 0
,
AI Platform Training utilizza le seguenti regole per gestire le prove non riuscite:
- Se la prima prova del job non va a buon fine, AI Platform Training termina il job. immediatamente. Un errore durante la prima prova suggerisce un problema nella codice di addestramento, quindi è probabile che anche altre prove non vadano a buon fine. Il termine del lavoro dà l'opportunità di diagnosticare il problema senza aspettare ulteriori prove e comporta costi maggiori.
- Se la prima prova ha esito positivo, AI Platform Training potrebbe terminare il job dopo
errori durante le prove successive in base a uno dei seguenti criteri:
- Il numero di prove non riuscite è aumentato troppo.
- Il rapporto tra prove non riuscite e prove riuscite è aumentato troppo elevato.
Queste soglie interne sono soggette a modifiche. Per garantire un comportamento specifico,
imposta il campo maxFailedTrials
.
Esecuzione di prove parallele
Puoi specificare un numero di prove da eseguire in parallelo impostando
maxParallelTrials
nell'oggetto HyperparameterSpec.
Eseguire prove parallele ha il vantaggio di ridurre il tempo dedicato al job di addestramento. (in tempo reale, il tempo di elaborazione totale) richiesta non viene generalmente modificata). Tuttavia, l'esecuzione in parallelo può ridurre l'efficacia complessiva del job di ottimizzazione. Il motivo è che l'ottimizzazione degli iperparametri utilizza i risultati delle prove precedenti per informare i valori da assegnare al e gli iperparametri delle prove successive. Alcune prove vengono eseguite in parallelo iniziare senza avere il vantaggio dei risultati delle prove ancora in esecuzione.
Se utilizzi prove parallele, il servizio di addestramento esegue il provisioning di più di elaborazione (o più macchine singole nel caso di un trainer per un singolo processo). Viene utilizzato il livello di scalabilità impostato per il job per ogni singolo cluster di addestramento.
Interruzione anticipata delle prove
Puoi specificare che AI Platform Training deve interrompere automaticamente una prova è diventata chiaramente poco promettente. In questo modo puoi risparmiare il costo di continuare una prova che probabilmente non sarà utile.
Per consentire l'interruzione anticipata di una prova, imposta il valore enableTrialEarlyStopping
in HyperparameterSpec fino a TRUE
.
Ripresa di un job di ottimizzazione degli iperparametri completato
Puoi continuare un job di ottimizzazione degli iperparametri completato, per iniziare da uno stato che è parzialmente ottimizzato. Ciò consente di riutilizzare le conoscenze come abbiamo fatto nel precedente job di ottimizzazione degli iperparametri.
Per riprendere un job di ottimizzazione degli iperparametri, invia un nuovo job di ottimizzazione degli iperparametri con la seguente configurazione:
- Imposta il valore
resumePreviousJobId
in HyperparameterSpec all'ID job della prova precedente. - Specifica i valori per
maxTrials
emaxParallelTrials
.
AI Platform Training utilizza l'ID job precedente per trovare e riutilizzare
gli stessi valori goal
, params
e hyperparameterMetricTag
per continuare
il job di ottimizzazione degli iperparametri.
Utilizza un nome hyperparameterMetricTag
e params
coerenti per i job simili.
anche quando i job hanno parametri diversi. Questa prassi rende possibile
per AI Platform Training
per migliorare l'ottimizzazione nel tempo.
I seguenti esempi mostrano l'utilizzo della configurazione resumePreviousJobId
:
gcloud
trainingInput:
scaleTier: CUSTOM
masterType: complex_model_m
workerType: complex_model_m
parameterServerType: large_model
workerCount: 9
parameterServerCount: 3
hyperparameters:
enableTrialEarlyStopping: TRUE
maxTrials: 30
maxParallelTrials: 1
resumePreviousJobId: [PREVIOUS_JOB_IDENTIFIER]
Python
# Add hyperparameter tuning to the job config.
hyperparams = {
'enableTrialEarlyStopping': True,
'maxTrials': 30,
'maxParallelTrials': 1,
'resumePreviousJobId': [PREVIOUS_JOB_IDENTIFIER]}
# Add the hyperparameter specification to the training inputs dictionary.
training_inputs['hyperparameters'] = hyperparams
# Build the job spec.
job_spec = {'jobId': my_job_name, 'trainingInput': training_inputs}
Ottimizzazione degli iperparametri con Cloud TPU
Se esegui il tuo job di ottimizzazione degli iperparametri con Cloud TPU
AI Platform Training, la best practice è utilizzare la eval_metrics
proprietà in TPUEstimatorSpec
.
Vedi l'esempio di ottimizzazione degli iperparametri TPU ResNet-50 per un esempio pratico dell'ottimizzazione degli iperparametri con Cloud TPU.
Anziché utilizzare la proprietà eval_metrics
per usare l'ottimizzazione degli iperparametri
un'alternativa è chiamare tf.summary
in host_call
. Per maggiori dettagli,
consulta TPUEstimatorSpec
.
Passaggi successivi
- Scopri di più sui concetti relativi all'iperparametro dell'ottimizzazione.
- Leggi un post del blog che misura l'impatto dei recenti miglioramenti alle dell'ottimizzazione degli iperparametri.
- Leggi un blog post sull'ottimizzazione e gli iperparametri bayesiani dell'ottimizzazione.