Con Vertex AI Neural Architecture Search, puoi cercare architetture neurali ottimali in termini di accuratezza, latenza, memoria, una combinazione di queste architetture o una metrica personalizzata.
Determinare se Vertex AI Neural Architecture Search è lo strumento migliore per me
- Vertex AI Neural Architecture Search è uno strumento di ottimizzazione di fascia alta utilizzato per trovare le migliori architetture neurali in termini di accuratezza con o senza vincoli come latenza, memoria o una metrica personalizzata. Lo spazio di ricerca delle possibili scelte di architettura neurale può essere grande fino a 10^20. Si basa su una tecnica che negli ultimi anni ha generato con successo diversi modelli di visione artificiale all'avanguardia, tra cui Nasnet, MNasnet, EfficientNet, NAS-FPN e SpineNet.
- Neural Architecture Search (NAS) non è una soluzione che ti consente di utilizzare solo i dati e aspettarti un buon risultato senza sperimentare. È uno strumento di sperimentazione.
- Neural Architecture Search (NAS) non consente l'ottimizzazione degli iperparametri, ad esempio per l'ottimizzazione del tasso di apprendimento o delle impostazioni dell'ottimizzatore. È pensato solo per la ricerca dell'architettura. Non dovresti combinare l'ottimizzazione iperparametri con Neural Architecture Search (NAS).
- Neural Architecture Search (NAS) non è consigliato con dati di addestramento limitati o per set di dati altamente sbilanciati in cui alcune classi sono molto rare. Se utilizzi già aumenti intensivi per l'addestramento di base a causa della mancanza di dati, Neural Architecture Search non è consigliata.
- Prova prima altri metodi e tecniche di machine learning tradizionali e convenzionali, come l'ottimizzazione degli iperparametri. Utilizza Neural Architecture Search (NAS) solo se i metodi tradizionali non migliorano.
- Dovresti avere un team interno per l'ottimizzazione del modello, che abbia un'idea di base sui parametri dell'architettura da modificare e provare. Questi parametri dell'architettura possono includere, tra le altre cose, la dimensione del kernel, il numero di canali o le connessioni. Se hai in mente un'area di ricerca da esplorare, Neural Architecture Search è molto preziosa e può ridurre circa sei mesi di tempo di ingegneria nell'esplorazione di un ampio spazio di ricerca: fino a 10^20 scelte di architettura.
- Neural Architecture Search (NAS) è pensato per i clienti aziendali che possono spendere varie migliaia di euro in un esperimento.
- Neural Architecture Search (NAS) non si limita al caso d'uso esclusivo di visione artificiale. Al momento, sono forniti solo spazi di ricerca predefiniti basati sulla visione artificiale e formatori predefiniti, ma i clienti possono anche utilizzare i propri spazi di ricerca e formatori non relativi alla visione artificiale.
- Neural Architecture Search (NAS) non utilizza un approccio supernet (NAS one-shot o NAS basato sulla condivisione del peso) in cui devi solo portare i tuoi dati e utilizzarli come soluzione. Non è banale (mesi di impegno) personalizzare una superrete. A differenza di una supernet, Neural Architecture Search (NAS) è altamente personalizzabile per definire spazi di ricerca e premi personalizzati. La personalizzazione può essere effettuata in circa uno o due giorni.
- Neural Architecture Search è supportato in otto regioni del mondo. Verifica la disponibilità nella tua regione.
Prima di utilizzare Neural Architecture Search (NAS), ti consigliamo di leggere anche la sezione seguente sul costo previsto, i guadagni dei risultati e i requisiti delle quote GPU.
Costo previsto, aumenti dei risultati e requisiti di quota GPU
La figura mostra una tipica curva di Neural Architecture Search (NAS).
Y-axis
mostra i premi delle prove, mentre X-axis
indica il numero di prove lanciate.
Man mano che il numero di prove aumenta, il controller inizia a trovare modelli migliori. Pertanto, la ricompensa inizia ad aumentare e, in seguito, la varianza della ricompensa e la crescita della ricompensa iniziano a diminuire e mostrano la convergenza. Al momento della convergenza, il numero di prove può variare in base alle dimensioni dello spazio di ricerca, ma è nell'ordine di circa 2000 prove.
Ogni prova è progettata come una versione più piccola dell'addestramento completo denominata proxy-task, che viene eseguita per circa una o due ore su due GPU Nvidia V100. Il cliente può interrompere manualmente la ricerca in qualsiasi momento e potrebbe trovare modelli con rendimento più elevato rispetto alla base di riferimento prima che si verifichi il punto di convergenza.
Per scegliere i risultati migliori, potrebbe essere preferibile attendere fino a quando non si verifica il punto di convergenza.
Dopo la ricerca, la fase successiva consiste
nel scegliere i primi 10 modelli (modelli) ed eseguire un addestramento completo.
(Facoltativo) Esegui un test dello spazio di ricerca e dell'addestramento MNasNet predefiniti
In questa modalità, osserva la curva di ricerca o alcune prove, circa 25, ed esegui un test drive con uno spazio di ricerca e un addestramento MNasNet predefiniti.
Nella figura, la migliore ricompensa della fase 1 inizia a salire da ~0,30 nella prova-1 a ~0,37 nella prova-17. La corsa esatta potrebbe apparire leggermente diversa a causa della casualità del campionamento, ma dovresti notare un piccolo aumento del premio migliore. Tieni presente che si tratta comunque di un giocattolo e non rappresenta un proof of concept o una convalida di benchmark pubblica.
Il costo di questa esecuzione è dettagliato come segue:
- Fase 1:
- Numero di prove: 25
- Numero di GPU per prova: 2
- Tipo di GPU: TESLA_T4
- Numero di CPU per prova: 1
- Tipo di CPU: n1-highmem-16
- Tempo medio di addestramento di una singola prova: 3 ore
- Numero di prove parallele: 6
- Quota GPU utilizzata: (num-gpus-per-trial * num-parallel-prove) = 12 GPU. Utilizza la regione us-central1 per i dati di addestramento del test drive e dell'host nella stessa regione. Non è necessaria una quota aggiuntiva.
- Tempo di esecuzione: (totali-prove * tempo di addestramento-per-prova)/(numero-prove-parallele) = 12 ore
- Ore GPU: (prove totali * tempo di addestramento per prova * num-gpus per prova) = 150 ore GPU T4
- Ore CPU: (totali-prove * tempo di addestramento per prova * num-cpus-per-prova) = 75 n1-highmem-16 ore
- Costo: circa $185. Puoi arrestare il job prima per ridurre i costi. Consulta la pagina dei prezzi per calcolare il prezzo esatto.
Poiché si tratta di un giocattolo, non è necessario eseguire un addestramento completo della fase 2 per i modelli della fase 1. Per ulteriori informazioni sull'esecuzione della fase 2, consulta il tutorial 3.
Per questa esecuzione viene utilizzato il blocco note MnasNet.
(Facoltativo) Esecuzione Proof of concept (POC) dello spazio di ricerca e dell'addestramento MNasNet predefiniti
Puoi utilizzare questa modalità se ti interessa quasi replicare un risultato MNasnet pubblicato. Secondo l'articolo, MnasNet raggiunge il 75,2% di precisione top-1 con una latenza di 78 ms su uno smartphone Pixel, 1,8 volte più veloce del MobileNetV2 con un'accuratezza dello 0,5% superiore e di 2,3 volte più veloce rispetto a NASNet con un'accuratezza superiore dell'1,2%. Tuttavia, questo esempio utilizza GPU anziché TPU per l'addestramento e una CPU cloud (n1-highmem-8) per valutare la latenza. Con questo esempio, l'accuratezza prevista per lo stadio Stage2 di primo livello su MNasNet è del 75,2% con una latenza di 50 ms su CPU cloud (n1-highmem-8).
Il costo di questa esecuzione è dettagliato come segue:
Ricerca fase 1:
- Numero di prove: 2000
- Numero di GPU per prova: 2
- Tipo di GPU: TESLA_T4
- Tempo medio di addestramento di una singola prova: 3 ore
- Numero di prove parallele: 10
- Quota GPU utilizzata: (num-gpus-per-trial * num-parallel-prove) = 20 GPU T4. Poiché questo numero supera la quota predefinita, crea una richiesta di quota dall'interfaccia utente del progetto. Per ulteriori informazioni, vedi setting_up_path.
- Tempo di esecuzione: (totali-prove * tempo di addestramento-per-prova)/(numero-prove-parallele)/24 = 25 giorni. Nota: il job termina dopo 14 giorni. Dopodiché, potrai riprendere il job di ricerca facilmente con un comando per altri 14 giorni. Se disponi di una quota GPU più alta, il runtime diminuisce in modo proporzionale.
- Ore GPU: (prove totali * tempo di addestramento per prova * num-gpus per prova) = 12.000 ore GPU T4.
- Costo: circa$15.000
Fase 2: addestramento completo con i primi 10 modelli:
- Numero di prove: 10
- Numero di GPU per prova: 4
- Tipo di GPU: TESLA_T4
- Tempo medio di addestramento di una singola prova: circa 9 giorni
- Numero di prove parallele: 10
- Quota GPU utilizzata: (num-gpus-per-trial * num-parallel-prove) = 40 GPU T4. Poiché questo numero è superiore alla quota predefinita, crea una richiesta di quota dall'interfaccia utente del progetto. Per ulteriori informazioni, vedi setting_up_path. Puoi anche eseguirlo con 20 GPU T4 eseguendo il job due volte con cinque modelli alla volta, anziché tutti e dieci in parallelo.
- Tempo di esecuzione: (totali-prove * tempo di addestramento per prova)/(numero-prove-parallele)/24 = ~9 giorni
- Ore GPU: (prove totali * tempo di addestramento per prova * num-gpus per prova) = 8960 ore GPU T4.
- Costo: circa$8000
Costo totale: circa $23.000. Consulta la pagina dei prezzi per calcolare il prezzo esatto. Nota: questo esempio non è un normale job di addestramento. L'addestramento completo dura circa nove giorni su quattro GPU TESLA_T4.
Per questa esecuzione viene utilizzato il blocco note MnasNet.
Utilizzare lo spazio di ricerca e le scarpe da ginnastica
Forniamo un costo approssimativo per un utente medio personalizzato. Le esigenze possono variare a seconda dell'attività di addestramento e delle GPU e delle CPU utilizzate. È necessaria almeno una quota di 20 GPU per un'esecuzione end-to-end come documentato qui. Nota: il miglioramento del rendimento dipende completamente dalla tua attività. Possiamo fornire solo esempi come MNasnet come esempi di riferimento per il miglioramento delle prestazioni.
Il costo per questa ipotetica esecuzione personalizzata è dettagliato come segue:
Ricerca fase 1:
- Numero di prove: 2000
- Numero di GPU per prova: 2
- Tipo di GPU: TESLA_T4
- Tempo medio di addestramento di una singola prova: 1,5 ore
- Numero di prove parallele: 10
- Quota GPU utilizzata: (num-gpus-per-trial * num-parallel-prove) = 20 GPU T4. Poiché questo numero è superiore alla quota predefinita, devi creare una richiesta di quota dall'interfaccia utente del progetto. Per maggiori informazioni, consulta Richiedere una quota aggiuntiva per i dispositivi per il progetto.
- Tempo di esecuzione: (totali-prove * tempo di addestramento-per-prova)/(numero-prove-parallele)/24 = 12,5 giorni
- Ore GPU: (prove totali * tempo di addestramento per prova * num-gpus per prova) = 6000 ore GPU T4.
- Costo: circa 7400 $
Fase 2: addestramento completo con i primi 10 modelli:
- Numero di prove: 10
- Numero di GPU per prova: 2
- Tipo di GPU: TESLA_T4
- Tempo medio di addestramento di una singola prova: circa 4 giorni
- Numero di prove parallele: 10
- Quota GPU utilizzata: (num-gpus-per-trial * num-parallel-prove) = 20 GPU T4. **Poiché questo numero è superiore alla quota predefinita, devi creare una richiesta di quota dall'interfaccia utente del progetto. Per ulteriori informazioni, consulta Richiedere una quota aggiuntiva per i dispositivi per il progetto. Fai riferimento alla stessa documentazione per le esigenze relative alle quote personalizzate.
- Tempo di esecuzione: (totali-prove * tempo di addestramento-per-prova)/(numero-prove-parallele)/24 = circa 4 giorni
- Ore GPU: (prove totali * tempo di addestramento per prova * num-gpus per prova) = 1920 ore GPU T4.
- Costo: circa 2400 $
Per ulteriori informazioni sul costo di progettazione delle attività proxy, consulta Progettazione delle attività proxy Il costo è simile all'addestramento di 12 modelli (la fase 2 nella figura utilizza 10 modelli):
- Quota GPU utilizzata: uguale all'esecuzione fase 2 nella figura.
- Costo: (12/10) * costo-fase-per-10-modelli = ~2.880 $
Costo totale: circa $12.680. Consulta la pagina dei prezzi per calcolare il prezzo esatto.
Questi costi di ricerca della fase 1 riguardano la ricerca fino al raggiungimento del punto di convergenza e per il massimo miglioramento del rendimento. Tuttavia, non aspettare che la ricerca converga. Ci si può aspettare un piccolo aumento delle prestazioni con un costo di ricerca inferiore eseguendo l'addestramento completo di fase 2 con il modello migliore finora se la curva ricerca-premio ha iniziato a crescere. Ad esempio, per il plot di ricerca mostrato in precedenza, non attendere fino a quando non vengono raggiunte le 2000 prove per la convergenza. Potresti aver trovato modelli migliori con 700 o 1200 prove e puoi eseguire un addestramento completo fase 2 per queste. Puoi sempre interrompere la ricerca prima per ridurre i costi. Puoi anche eseguire in parallelo un addestramento completo di fase 2 mentre la ricerca è in esecuzione, ma assicurati di disporre di una quota GPU per supportare un job parallelo aggiuntivo.
Riepilogo di prestazioni e costi
La seguente tabella riassume alcuni punti dati con diversi casi d'uso e le prestazioni e i costi associati.
Casi d'uso e funzionalità
Le funzionalità di Neural Architecture Search sono flessibili e facili da usare. Un utente alle prime armi può utilizzare spazi di ricerca predefiniti, un trainer predefinito e blocchi note senza alcuna ulteriore configurazione per iniziare a esplorare Vertex AI Neural Architecture Search per il proprio set di dati. Allo stesso tempo, un utente esperto può utilizzare Neural Architecture Search (NAS) con il proprio addestramento personalizzato, lo spazio di ricerca personalizzato e il dispositivo di inferenza personalizzato, nonché estendere la ricerca dell'architettura anche per i casi d'uso non legati alla visione.
Neural Architecture Search offre addestratori predefiniti e spazi di ricerca da eseguire sulle GPU per i seguenti casi d'uso:
- Formatori TensorFlow con risultati basati su set di dati pubblici pubblicati in un blocco note
- Rilevamento di oggetti immagine con spazi di ricerca end-to-end (SpineNet)
- Classificazione con spazi di ricerca backbone predefiniti (MnasNet)
- Rilevamento di oggetti cloud di punti 3D LiDAR con spazi di ricerca end-to-end predefiniti
- Ricerca con latenza e limiti di memoria per i dispositivi di targeting
- Esempio di trainer PyTorch da utilizzare solo come tutorial
- Esempio di spazio di ricerca di segmentazione dell'immagine medica 3D di PyTorch
- Classificazione MNasNet basata su PyTorch
- Ricerca con latenza e limiti di memoria per i dispositivi di targeting
- Spazi di ricerca predefiniti e all'avanguardia basati su Tensorflow con codice
- Scalabilità del modello
- Incremento dei dati
Il set completo di funzionalità offerte da Neural Architecture Search può essere utilizzato facilmente anche per architetture e casi d'uso personalizzati:
- Un linguaggio Neural Architecture Search (NAS) per definire uno spazio di ricerca personalizzato rispetto a possibili architetture neurali e integrare questo spazio di ricerca con il codice del trainer personalizzato.
- Spazi di ricerca predefiniti e all'avanguardia pronti per l'uso con codice.
- Trainer predefinito pronto all'uso, con codice che viene eseguito su GPU.
- Un servizio gestito per la ricerca dell'architettura che include:
- Un controller di ricerca dell'architettura neurale che campiona lo spazio di ricerca per trovare la migliore architettura.
- Docker/librerie predefinite con codice per calcolare latenza/FLOP/memoria su hardware personalizzato.
- Tutorial per insegnare l'uso del NAS.
- Una serie di strumenti per progettare attività proxy.
- Linee guida ed esempi per un addestramento PyTorch efficiente con Vertex AI.
- Supporto della libreria per l'analisi e la generazione di report con metriche personalizzate.
- UI della console Google Cloud per monitorare e gestire i job.
- Blocchi note facili da utilizzare per avviare la ricerca.
- Supporto della libreria per la gestione dell'utilizzo delle risorse di GPU/CPU per progetto o livello di granularità dei job.
- Client Nas basato su Python per creare Docker, avviare job NAS e riprendere un job di ricerca precedente.
- Assistenza clienti basata sull'interfaccia utente della console Google Cloud.
Premesse
Neural Architecture Search è una tecnica per automatizzare la progettazione delle reti neurali. Negli ultimi anni ha generato con successo diversi modelli di visione artificiale all'avanguardia, tra cui:
I modelli risultanti sono all'avanguardia in tutte e tre le classi principali di problemi di visione artificiale: classificazione delle immagini, rilevamento di oggetti e segmentazione.
Con Neural Architecture Search, gli ingegneri possono ottimizzare i modelli per accuratezza, latenza e memoria nella stessa prova, riducendo il tempo necessario per il deployment dei modelli. Neural Architecture Search esplora molti tipi diversi di modelli: il controller propone modelli ML, quindi addestra e valuta i modelli e li ripete più di 1000 volte per trovare le soluzioni migliori con limiti di latenza e/o memoria sui dispositivi di targeting. La figura seguente mostra i componenti chiave del framework di ricerca dell'architettura:
- Modello: un'architettura neurale con operazioni e connessioni.
- Spazio di ricerca: lo spazio dei possibili modelli (operazioni e connessioni) che possono essere progettati e ottimizzati.
- Docker di addestramento: codice del trainer personalizzabile dall'utente per addestrare e valutare un modello e la precisione di calcolo del modello.
- Dispositivo di inferenza: un dispositivo hardware, ad esempio CPU/GPU, su cui viene calcolata la latenza del modello e l'utilizzo della memoria.
- Premio: una combinazione di metriche del modello, come accuratezza, latenza e memoria, utilizzata per classificare i modelli come migliore o peggiore.
- Neural Architecture Search Controller: l'algoritmo di orchestrazione che (a) campiona i modelli dallo spazio di ricerca, (b) riceve i premi per il modello e (c) fornisce il successivo set di suggerimenti per i modelli da valutare per trovare i modelli più ottimali.
Attività di configurazione utente
Neural Architecture Search offre un trainer predefinito integrato con spazi di ricerca predefiniti che possono essere facilmente utilizzati con i blocchi note forniti senza ulteriori configurazioni.
Tuttavia, la maggior parte degli utenti deve utilizzare un trainer personalizzato, spazi di ricerca personalizzati, metriche personalizzate (memoria, latenza e tempo di addestramento, ad esempio) e un premio personalizzato (combinazione di elementi come accuratezza e latenza). Per farlo, devi:
- Definisci uno spazio di ricerca personalizzata utilizzando il linguaggio Neural Architecture Search (NAS) fornito.
- Integra la definizione dello spazio di ricerca nel codice del trainer.
- Aggiungi report sulle metriche personalizzate al codice del trainer.
- Aggiungi un premio personalizzato al codice del formatore.
- Crea un container di addestramento e utilizzalo per avviare job di Neural Architecture Search.
Il seguente diagramma illustra ciò:
Servizio Neural Architecture Search in funzione
Dopo aver configurato il container di addestramento da utilizzare, il servizio Neural Architecture Search avvia più container di addestramento in parallelo su più dispositivi GPU. Puoi controllare quante prove utilizzare in parallelo per l'addestramento e quante prove totali avviare. A ogni container di addestramento viene suggerita un'architettura suggerita dallo spazio di ricerca. Il container di addestramento crea il modello suggerito, esegue l'addestramento/la valutazione, quindi segnala i premi al servizio Neural Architecture Search. Man mano che il processo procede, il servizio Neural Architecture Search utilizza il feedback sui premi per trovare architetture di modello sempre migliori. Dopo la ricerca, hai accesso alle metriche riportate per ulteriori analisi.
Panoramica del percorso dell'utente per Neural Architecture Search
Di seguito sono riportati i passaggi generali per eseguire un esperimento di ricerca dell'architettura neurale:
Configurazioni e definizioni:
- Identifica il set di dati etichettato e specifica il tipo di attività (rilevamento o segmentazione, ad esempio).
- Personalizza il codice del formatore:
- Utilizza uno spazio di ricerca predefinito o definisci uno spazio di ricerca personalizzato utilizzando il linguaggio Neural Architecture Search (NAS).
- Integra la definizione dello spazio di ricerca nel codice del trainer.
- Aggiungi report sulle metriche personalizzate al codice del trainer.
- Aggiungi un premio personalizzato al codice del formatore.
- Crea un container di addestramento.
- Configura i parametri della prova di ricerca per l'addestramento parziale (attività proxy). Idealmente, l'addestramento sulla rete di ricerca dovrebbe terminare rapidamente (ad esempio 30-60 minuti) per addestrare parzialmente i modelli:
- Epoche minime necessarie ai modelli campionati per ottenere i risultati (le epoche minime non devono garantire la convergenza dei modelli).
- Iperparametri (ad es. tasso di apprendimento).
Esegui la ricerca localmente per assicurarti che il contenitore integrato dello spazio di ricerca possa essere eseguito correttamente.
Avvia il job di ricerca di Google Cloud (fase 1) con cinque prove di prova e verifica che le prove di ricerca soddisfino gli obiettivi di runtime e precisione.
Avvia il job di ricerca di Google Cloud (fase 1) con più di 1000 prove.
Nell'ambito della ricerca, imposta anche un intervallo regolare per addestrare i primi N modelli (fase 2):
- Iperparametri e algoritmo per la ricerca degli iperparametri. La fase 2 normalmente utilizza la configurazione simile a quella dello stage 1, ma con impostazioni più elevate per determinati parametri, ad esempio passaggi/epoche di addestramento e numero di canali.
- Criteri di interruzione (il numero di epoche).
Analizza le metriche dei report e/o visualizza le architetture per ottenere approfondimenti.
Un esperimento di ricerca sull'architettura può essere seguito da un esperimento di scalabilità sulla rete di ricerca e poi da un esperimento di ricerca di aumento.
Ordine di lettura della documentazione
- (Obbligatorio) Configura il tuo ambiente
- (Obbligatorio) Tutorial
- (Obbligatorio solo per i clienti di PyTorch) Addestramento efficiente di PyTorch con dati cloud
- (Obbligatorio) Best practice e flusso di lavoro suggerito
- (Obbligatorio) Progettazione attività proxy
- (Obbligatorio solo se si utilizzano addestratori predefiniti) Come utilizzare gli spazi di ricerca predefiniti e un addestramento predefinito
Riferimenti
- Utilizzare il machine learning per esplorare l'architettura delle reti neurali
- MnasNet: Towards Automating the Design of Mobile Machine Learning Models
- EfficientNet: migliorare l'accuratezza e l'efficienza tramite AutoML e la scalabilità dei modelli
- NAS-FPN: apprendimento dell'architettura a piramide di funzionalità scalabili per il rilevamento di oggetti
- SpineNet: Learning Scale-Permuted Backbone per il riconoscimento e la localizzazione
- RandAugment