Guida all'avvio di un nuovo progetto

Questa sezione spiega come scegliere le seguenti opzioni all'inizio di di un progetto ML:

  • l'architettura del modello
  • l'ottimizzatore
  • la dimensione del batch
  • la configurazione iniziale
di Gemini Advanced.

Ipotesi

I consigli in questa sezione si basano sui seguenti presupposti:

  • Hai già formulato il problema, e preparato i dati di addestramento in una certa misura.
  • Hai già configurato una pipeline di addestramento e test.
  • Hai già selezionato e implementato metriche rappresentative il più possibile di ciò che prevedi di misurare nell'ambiente di cui è stato eseguito il deployment.

Supponendo che tu abbia soddisfatto tutti i prerequisiti precedenti, ora puoi dedicare tempo all'architettura del modello e alla configurazione dell'addestramento.

Scegli l'architettura del modello

Iniziamo con le seguenti definizioni:

  • Un'architettura del modello è un sistema per produrre previsioni. Un'architettura del modello contiene il framework per la conversione dei dati di input nelle previsioni, ma non contiene parameter. Ad esempio: una rete neurale con tre strati nascosti di 10 nodi, 5 nodi e 3 nodi, è un'architettura del modello.
  • Un modello è un'architettura del modello dotata di valori specifici per tutte le parametri. Ad esempio, un modello è costituito dalla rete neurale descritta nella definizione dell'architettura del modello, oltre a valori specifici per ponderazioni e bias di ciascun nodo.
  • Una famiglia di modelli è un modello per creare un'architettura del modello un insieme di iperparametri.

Scegliere l'architettura del modello significa in realtà scegliere un insieme di (uno per ogni impostazione degli iperparametri del modello).

Cerca di trovare un codebase documentato che risponda a un problema, se possibile. il più vicino possibile al problema attuale. Quindi, riproduci il modello un punto di partenza.

Scegli l'ottimizzatore

Nessun ottimizzatore è "migliore" in tutti i tipi di problemi di machine learning e le architetture dei modelli. Anche solo confrontando il rendimento degli ottimizzatori è difficile. 🤖Ti consigliamo di usare ottimizzatori consolidati e diffusi, soprattutto quando si avvia un nuovo progetto.

Consigliamo di scegliere l'ottimizzatore più popolare per il tipo di problema su cui stai lavorando. Ti consigliamo i seguenti ottimizzatori consolidati:

Presta attenzione a tutti gli argomenti dell'ottimizzatore scelto. Gli ottimizzatori con più iperparametri richiedono in genere uno sforzo di ottimizzazione maggiore. Ciò è particolarmente difficile nelle fasi iniziali di un progetto quando stai cercando di trovare i valori migliori di vari altri iperparametri (ad esempio, il tasso di apprendimento) pur trattando gli argomenti di ottimizzazione come seccatori. Pertanto, consigliamo il seguente approccio:

  1. All'inizio del progetto, scegli un ottimizzatore senza molti e regolare gli iperparametri. Ecco due esempi:
    • SGD con momentum fisso.
    • Adam con Epsilon, Beta1 e Beta2 fissi.
  2. Nelle fasi successive del progetto, passa a un ottimizzatore più generale ottimizza più iperparametri anziché correggerli ai valori predefiniti.

Scegli la dimensione del batch

Riepilogo: la dimensione del batch regola la velocità di addestramento; non utilizzare la dimensione del batch per ottimizzare direttamente le prestazioni del set di convalida.

La dimensione del batch determina pesantemente il tempo di addestramento e la risorsa di calcolo il consumo eccessivo. Aumentando la dimensione del batch spesso si riduce il tempo di addestramento, che:

  • Consente di ottimizzare gli iperparametri in modo più approfondito entro un tempo fisso l'intervallo, generando potenzialmente un modello finale migliore.
  • Riduce la latenza del ciclo di sviluppo, consentendo di sviluppare nuove idee vengono testati con maggiore frequenza.

L'aumento della dimensione del batch può ridurre o aumentare il consumo di risorse, o lasciare invariato il consumo delle risorse.

Non trattare la dimensione del batch come un iperparametro regolabile per la convalida delle prestazioni. Se tutte le vengono soddisfatte le seguenti condizioni, le prestazioni del modello non devono dipendere dimensione del batch:

  • Tutti gli iperparametri di ottimizzazione sono ottimizzati.
  • La regolarizzazione è sufficiente e ottimizzata.
  • Il numero di passaggi di addestramento è sufficiente.

Le stesse prestazioni finali dovrebbero essere ottenibili utilizzando qualsiasi dimensione del batch (vedi Shallue et al. 2018 e Perché la dimensione del batch non dovrebbe essere ottimizzata per migliorare delle prestazioni del set di convalida?)

Determinare le dimensioni del batch fattibili e stimare la velocità effettiva di addestramento

Per un determinato modello e ottimizzatore, l'hardware disponibile in genere supporta un intervallo di dimensioni del batch. Il fattore limitante è solitamente dell'acceleratore. Purtroppo, può essere difficile calcolare quale le dimensioni del batch rientreranno nella memoria senza eseguire, o almeno compilare, programma di formazione completo. La soluzione più semplice è di solito eseguire job di addestramento a batch di dimensioni diverse (ad esempio, aumentando la potenza di 2) per un di passaggi finché uno dei job non supera la memoria disponibile. Per ogni dimensione del batch, esegui l'addestramento abbastanza a lungo da ottenere una stima affidabile velocità effettiva di addestramento:

velocità effettiva di addestramento = il numero di esempi elaborati al secondo

o, equivalentemente, il tempo per passaggio:

tempo per passaggio = dimensione del batch / velocità effettiva di addestramento

Se gli acceleratori non sono ancora saturi, se la dimensione del batch raddoppia, anche la velocità effettiva di addestramento dovrebbe raddoppiare (o almeno quasi raddoppiare). In modo equivalente, il tempo per passo deve essere costante (o almeno quasi costante) man mano che la dimensione del batch aumenta. In caso contrario, la pipeline di addestramento ha un collo di bottiglia, come I/O o la sincronizzazione tra i nodi di computing. Valutare la possibilità di diagnosticare e correggere il collo di bottiglia prima di procedere.

Se la velocità effettiva di addestramento aumenta solo fino a una certa dimensione massima del batch, considera solo dimensioni del batch fino alla dimensione massima del batch, anche se se l'hardware supporta una dimensione batch più grande. Tutti i vantaggi dell'utilizzo di una dimensione del batch più grande presuppongono la velocità effettiva di addestramento aumenta. In caso contrario, risolvi il collo di bottiglia o utilizza un batch di dimensioni inferiori.

L'accumulo del gradiente simula una dimensione del batch più grande di quella consentita dall'hardware e pertanto non offre vantaggi in termini di velocità effettiva. Dovresti di solito evitano l'accumulo del gradiente nel lavoro applicato.

Potrebbe essere necessario ripetere questi passaggi ogni volta che modifichi il modello l'ottimizzatore. Ad esempio, una diversa architettura del modello potrebbe consentire di un batch di dimensioni maggiori per adattarlo alla memoria.

Scegli la dimensione del batch per ridurre al minimo il tempo di addestramento

Ecco la nostra definizione di tempo di addestramento:

  • tempo di addestramento = (tempo per passo) x (numero totale di passi)

Spesso puoi considerare che il tempo per passo sia pressoché costante per tutte le dimensioni dei batch fattibili. Ciò si verifica nei seguenti casi:

  • Non c'è alcun overhead per i calcoli paralleli.
  • Tutti i colli di bottiglia dell'addestramento sono stati diagnosticati e risolti. (consulta la sezione precedente per scoprire come identificare colli di bottiglia nell'addestramento. Nella pratica, di solito ci sono dall'aumento della dimensione del batch.

Man mano che la dimensione del batch aumenta, il numero totale di passaggi necessari per raggiungere un obiettivo di rendimento fisso solitamente diminuisce, a condizione che tu regoli gli iperparametri pertinenti quando si modifica la dimensione del batch. (Vedi Shallue et al. 2018. Ad esempio, raddoppiando la dimensione del batch potrebbe dimezzare il numero totale passaggi richiesti. Questa relazione è chiamata scalabilità perfetta e dovrebbe per tutti i batch di dimensioni fino a quelle critiche.

Al di là della dimensione critica del batch, l'aumento della dimensione produce rendimenti decrescenti. Vale a dire, aumentare la dimensione del batch alla fine non riduce più il numero di passaggi di addestramento, ma non lo aumenta mai. Pertanto, la dimensione del batch che riduce al minimo il tempo di addestramento è la dimensione del batch più grande, che riduce comunque il numero di passaggi di addestramento obbligatorio. Questa dimensione del batch dipende dal set di dati, dal modello e l'ottimizzatore, ed è un problema aperto a calcolarle e sperimentarlo per ogni nuovo problema. 🤖

Quando confronti le dimensioni dei batch, tieni presente la distinzione tra i seguenti elementi:

  • Un budget di esempio o un budget dell'epoca, in esecuzione di tutti gli esperimenti mentre corretto il numero di presentazioni di esempio.
  • Un budget per i passaggi: per eseguire tutti gli esperimenti con un numero fisso di passaggi di addestramento.

Il confronto tra dimensioni dei batch e un budget di epoca consente di rilevare solo di scalabilità, anche quando dimensioni batch più grandi possono comunque fornire un'accelerazione significativa riducendo il numero di passaggi di addestramento richiesti. Spesso, la dimensione del batch più grande supportata dall'hardware disponibile è inferiore alla dimensione critica del batch. Pertanto, una buona regola (senza eseguire esperimenti) è quello di utilizzare il batch più grande non ha senso usare una dimensione del batch più grande se termina aumentando il tempo di addestramento.

Scegli la dimensione del batch per ridurre al minimo il consumo di risorse

Esistono due tipi di costi delle risorse associati all'aumento della dimensione del batch:

  • Costi iniziali. Ad esempio, l'acquisto di nuovo hardware o la riscrittura del per implementare l'addestramento con più GPU / TPU.
  • Costi di utilizzo. Ad esempio, fatturazione con i budget delle risorse del team, fatturazione da un provider cloud, costi di elettricità / manutenzione.

Se l'aumento della dimensione del batch comporta costi iniziali significativi, sarebbe meglio posticipare l'aumento della dimensione del batch finché è maturata ed è più facile valutare il compromesso tra costi e benefici. L'implementazione di programmi di addestramento parallelo multi-host può introdurre bug e problemi lievi quindi probabilmente è meglio iniziare con una della pipeline in ogni caso. D'altra parte, una notevole accelerazione del tempo di addestramento possono essere molto utili all'inizio del processo, quando molte ottimizzazioni sono necessari esperimenti.

Ci riferiamo al costo di utilizzo totale (che può includere più tipi di costi) come consumo di risorse, calcolato come segue:

consumo di risorse = consumo di risorse per passaggio x numero totale di passaggi

L'aumento della dimensione del batch di solito riduce il numero totale di passaggi. Il fatto che il consumo di risorse aumenti o diminuisca dipende come cambia il consumo per passaggio, che dipende dalle dimensioni del batch come segue:

  • L'aumento della dimensione del batch potrebbe ridurre il consumo di risorse. Ad esempio, se puoi eseguire ogni passaggio con la dimensione del batch più grande sullo stesso hardware della dimensione batch più piccola (con solo aumento nel tempo per passaggio), allora qualsiasi aumento della risorsa consumo per passo potrebbe essere compensato dalla diminuzione della di passaggi.
  • L'aumento della dimensione del batch potrebbe non modificare il consumo delle risorse. Ad esempio, se raddoppiando la dimensione del batch si dimezza il numero di passaggi e raddoppia il numero di GPU utilizzate, il consumo totale (in termini di ore GPU) non cambia.
  • L'aumento della dimensione del batch potrebbe incrementare il consumo di risorse. Ad esempio, se per aumentare la dimensione del batch è necessario un upgrade dell'hardware, l'aumento del consumo per passo potrebbe superare la riduzione del il numero di passaggi.

La modifica della dimensione del batch richiede la riottimizzazione della maggior parte degli iperparametri

I valori ottimali della maggior parte degli iperparametri sono sensibili alle dimensioni del batch. Di conseguenza, la modifica della dimensione del batch richiede in genere l'avvio dell'ottimizzazione il processo da capo. Gli iperparametri che interagiscono maggiormente con la dimensione del batch, perciò è più importante ottimizzare separatamente per ciascuna dimensione del batch:

  • Gli iperparametri dell'ottimizzatore (ad esempio tasso di apprendimento e momentum)
  • Gli iperparametri di regolarizzazione

Tieni presente questo aspetto quando scegli la dimensione del batch all'inizio di un progetto. Se in un secondo momento devi passare a una dimensione del batch diversa, potrebbe essere difficile, dispendioso in termini di tempo e costoso ottimizzare gli altri iperparametri per la nuova dimensione del batch.

Come la norma del batch interagisce con la dimensione del batch

La norma batch è complicata e, in generale, dovrebbe usare un batch diverso rispetto al calcolo del gradiente per calcolare le statistiche. Consulta Implementazione della normalizzazione batch dettagli per una discussione dettagliata.

Scegli la configurazione iniziale

La prima fase dell'ottimizzazione degli iperparametri è determinare punti di partenza per le seguenti attività:

  • la configurazione del modello (ad es. numero di strati)
  • gli iperparametri dell'ottimizzatore (ad es. il tasso di apprendimento)
  • il numero di passaggi di addestramento

Per determinare questa configurazione iniziale sono necessarie alcune le esecuzioni e gli errori di addestramento configurati.

Il nostro principio guida è il seguente:

Trova un consumo di risorse semplice, relativamente veloce e relativamente basso che genera prestazioni ragionevoli.

dove:

  • Semplice significa evitare funzionalità della pipeline non necessarie, come l'uso regolarizza o trucchi architettonici. Ad esempio, una pipeline senza abbandono regolarizzazione (o con la regolarizzazione dell'abbandono disattivata) è più semplice di una con la regolarizzazione dell'abbandono scolastico.
  • Un rendimento ragionevole dipende dal problema, ma almeno una un modello addestrato ragionevole esegue un rendimento molto migliore rispetto al caso sul set di convalida.

Scelta di una configurazione iniziale rapida e con un consumo minimo rende l'ottimizzazione degli iperparametri molto più efficiente. Ad esempio, inizia con un modello più piccolo.

La scelta del numero di passaggi dell'addestramento implica il bilanciamento dei seguenti aspetti:

  • L'addestramento per più passaggi può migliorare le prestazioni e semplificare l'iperparametro dell'ottimizzazione. Per ulteriori dettagli, vedi Shallue et al. 2018).
  • Al contrario, l'addestramento con meno passaggi significa che ogni esecuzione di addestramento più velocemente e utilizza meno risorse, aumentando l'efficienza dell'ottimizzazione riducendo tra un ciclo e l'altro e ti permette di eseguire più esperimenti in parallelo. Inoltre, se hai scelto un budget di passaggio inutilmente elevato all'inizio al progetto, potrebbe essere difficile modificarlo in una fase successiva del progetto. ad esempio dopo aver ottimizzato la programmazione del tasso di apprendimento per quel numero di passaggi.