Questa guida mostra come eseguire un job di ricerca dell'architettura neurale di Vertex AI utilizzando gli spazi di ricerca predefiniti di Google e il codice di addestramento predefinito basato su TF-vision per MnasNet e SpineNet. Per esempi end-to-end, consulta il quaderno di classificazione MnasNet e il blocco note sul rilevamento di oggetti SpineNet.
Preparazione dei dati per il formatore predefinito
Il trainer predefinito di Neural Architecture Search richiede che i dati siano
in formato TFRecord
, contenenti
tf.train.Example
. I tf.train.Example
devono includere i seguenti campi:
'image/encoded': tf.FixedLenFeature(tf.string)
'image/height': tf.FixedLenFeature(tf.int64)
'image/width': tf.FixedLenFeature(tf.int64)
# For image classification only.
'image/class/label': tf.FixedLenFeature(tf.int64)
# For object detection only.
'image/object/bbox/xmin': tf.VarLenFeature(tf.float32)
'image/object/bbox/xmax': tf.VarLenFeature(tf.float32)
'image/object/bbox/ymin': tf.VarLenFeature(tf.float32)
'image/object/bbox/ymax': tf.VarLenFeature(tf.float32)
'image/object/class/label': tf.VarLenFeature(tf.int64)
Puoi seguire le istruzioni per la preparazione dei dati ImageNet.
Per convertire i tuoi dati personalizzati, utilizza lo script di analisi incluso nel codice di esempio e nelle utilità che hai scaricato. Per personalizzare l'analisi dei dati, modifica i file tf_vision/dataloaders/*_input.py.
Scopri di più su
TFRecord
e tf.train.Example
.
Definisci le variabili di ambiente dell'esperimento
Prima di eseguire gli esperimenti, devi definire diverse variabili di ambiente, tra cui:
- TRAINER_DOCKER_ID:
${USER}_nas_experiment
(formato consigliato) Posizioni di Cloud Storage dei set di dati di addestramento e convalida che verranno utilizzate dall'esperimento. Ad esempio (CoCo per il rilevamento):
gs://cloud-samples-data/ai-platform/built-in/image/coco/train*
gs://cloud-samples-data/ai-platform/built-in/image/coco/val*
Percorso di Cloud Storage per l'output dell'esperimento. Formato consigliato:
gs://${USER}_nas_experiment
REGIONE: una regione che deve essere uguale a quella del bucket di output dell'esperimento. Ad esempio:
us-central1
.PARAM_OVERRIDE: un file .yaml che sostituisce i parametri dell'addestramento predefinito. Neural Architecture Search (NAS) fornisce alcune configurazioni predefinite che puoi utilizzare:
PROJECT_ID=PROJECT_ID
TRAINER_DOCKER_ID=TRAINER_DOCKER_ID
LATENCY_CALCULATOR_DOCKER_ID=LATENCY_CALCULATOR_DOCKER_ID
GCS_ROOT_DIR=OUTPUT_DIR
REGION=REGION
PARAM_OVERRIDE=tf_vision/configs/experiments/spinenet_search_gpu.yaml
TRAINING_DATA_PATH=gs://PATH_TO_TRAINING_DATA
VALIDATION_DATA_PATH=gs://PATH_TO_VALIDATION_DATA
Potresti voler selezionare e/o modificare il file di override che corrisponde ai tuoi requisiti di addestramento. Considera quanto segue:
- Puoi impostare
--accelerator_type
in modo da scegliere tra GPU o CPU. Per eseguire solo alcune epoche per test rapidi con la CPU, puoi impostare il flag--accelerator_type=""
e utilizzare il file di configurazionetf_vision/test_files/fast_nas_detection_spinenet_search_for_testing.yaml
. - Numero di epoche
- Runtime addestramento
- Iperparametri come il tasso di apprendimento
Per un elenco di tutti i parametri per controllare i job di addestramento, consulta
tf_vision/configs/
. Di seguito sono riportati i parametri chiave:
task:
train_data:
global_batch_size: 80
validation_data:
global_batch_size: 16
init_checkpoint: null
trainer:
train_steps: 16634
steps_per_loop: 1386
optimizer_config:
learning_rate:
cosine:
initial_learning_rate: 0.16
decay_steps: 16634
type: 'cosine'
warmup:
type: 'linear'
linear:
warmup_learning_rate: 0.0067
warmup_steps: 1386
Crea un bucket Cloud Storage per Neural Architecture Search (NAS) per archiviare gli output dei job (ovvero checkpoint):
gsutil mkdir $GCS_ROOT_DIR
Crea un contenitore di addestramento e un contenitore del calcolatore della latenza
Il seguente comando creerà un'immagine di addestramento in Google Cloud con il seguente URI: gcr.io/PROJECT_ID/TRAINER_DOCKER_ID
, che verrà utilizzata nel job di Neural Architecture Search (NAS) nel passaggio successivo.
python3 vertex_nas_cli.py build \
--project_id=PROJECT_ID \
--trainer_docker_id=TRAINER_DOCKER_ID \
--latency_calculator_docker_id=LATENCY_CALCULATOR_DOCKER_ID \
--trainer_docker_file=tf_vision/nas_multi_trial.Dockerfile \
--latency_calculator_docker_file=tf_vision/latency_computation_using_saved_model.Dockerfile
Per modificare lo spazio di ricerca e il premio, aggiornali nel file Python e poi ricrea l'immagine Docker.
Testa il formatore a livello locale
Poiché l'avvio di un job nel servizio Google Cloud richiede diversi minuti, potrebbe essere più pratico testare localmente il docker di addestramento, ad esempio convalidando il formato TFRecord. Utilizza lo spazio di ricerca spinenet
come esempio, puoi eseguire il job di ricerca in locale (il modello verrà campionato in modo casuale):
# Define the local job output dir.
JOB_DIR="/tmp/iod_${search_space}"
python3 vertex_nas_cli.py search_in_local \
--project_id=PROJECT_ID \
--trainer_docker_id=TRAINER_DOCKER_ID \
--prebuilt_search_space=spinenet \
--use_prebuilt_trainer=True \
--local_output_dir=${JOB_DIR} \
--search_docker_flags \
params_override="tf_vision/test_files/fast_nas_detection_spinenet_search_for_testing.yaml" \
training_data_path=TEST_COCO_TF_RECORD \
validation_data_path=TEST_COCO_TF_RECORD \
model=retinanet
training_data_path
e validation_data_path
sono i percorsi verso i tuoi TFRecord.
Avvia una ricerca fase 1 seguita da un job di addestramento di fase 2 su Google Cloud
Per esempi end-to-end, consulta il blocco note di classificazione MnasNet e il blocco note sul rilevamento di oggetti SpineNet.
Puoi impostare i flag
--max_parallel_nas_trial
e--max_nas_trial
da personalizzare. Neural Architecture Search avvieràmax_parallel_nas_trial
prove in parallelo e terminerà dopomax_nas_trial
prove.Se è impostato il flag
--target_device_latency_ms
, verrà avviato un joblatency calculator
separato con un acceleratore specificato dal flag--target_device_type
.A ogni prova verrà fornito un suggerimento per una nuova architettura candidata tramite il FLAG
--nas_params_str
.Ogni prova creerà un grafico basato sul valore del flag
nas_params_str
e avvierà un job di addestramento. Ogni prova salva anche il suo valore in un file json (all'indirizzoos.path.join(nas_job_dir, str(trial_id), "nas_params_str.json")
).
Premio con un vincolo di latenza
Il blocco note di classificazione MnasNet mostra un esempio di ricerca con limiti di latenza basata su dispositivo cloud-cpu.
Per cercare modelli con vincoli di latenza, il formatore può segnalare la ricompensa in funzione dell'accuratezza e della latenza.
Nel codice sorgente condiviso, il premio viene calcolato come segue:
def compute_reward(target_latency, accuracy, inference_latency, weight=0.07):
"""Compute reward from accuracy and latency."""
speed_ratio = target_latency / inference_latency
return accuracy * (speed_ratio**weight)
Puoi utilizzare altre varianti del calcolo di reward
a pagina 3
dell'articolo del mnasnet.
target_device_type
specifica il tipo di dispositivo di destinazione supportato in Google Cloud, ad esempioNVIDIA_TESLA_P100
.use_prebuilt_latency_calculator
usa il nostro calcolatore di latenza predefinitotf_vision/latency_computation_using_saved_model.py
.target_device_latency_ms
specifica la latenza target del dispositivo.
Per informazioni su come personalizzare la funzione di calcolo della latenza, consulta tf_vision/latency_computation_using_saved_model.py
.
Monitorare l'avanzamento del job di Neural Architecture Search (NAS)
Nella pagina del job della console Google Cloud, il grafico mostra reward vs. trial number
, mentre la tabella mostra i premi per ogni prova. Puoi trovare le prove principali
con il premio più alto.
Traccia una curva di addestramento fase 2
Dopo l'addestramento della fase 2, utilizzi Cloud Shell o Google Cloud TensorBoard
per tracciare la curva di addestramento puntando alla directory del job:
Esegui il deployment di un modello selezionato
Per creare uno savedModel, puoi utilizzare lo script export_saved_model.py
con params_override=${GCS_ROOT_DIR}/${TRIAL_ID}/params.yaml
.