Connector for PyTorch

Il connettore di Cloud Storage per PyTorch è un prodotto open source supportato da Google che fornisce un'integrazione diretta di Cloud Storage con PyTorch.

Panoramica

Il connettore per PyTorch offre vantaggi sia per il caricamento dei dati nell'addestramento sia per il checkpointing e il caricamento del modello:

Per il caricamento dei dati nell'addestramento, Connector for PyTorch offre i seguenti vantaggi:

  • Il connettore per PyTorch contiene ottimizzazioni per rendere l'addestramento fino a tre volte più veloce rispetto a PyTorch predefinito nei set di dati costituiti principalmente da file più piccoli di 1 MB.
  • Il connettore per PyTorch implementa la primitiva del set di dati di PyTorch che può essere utilizzata per caricare in modo efficiente i dati di addestramento dai bucket Cloud Storage.
  • Supporto per set di dati in stile mappa per pattern di accesso ai dati casuali e set di dati in stile iterabile per pattern di accesso ai dati in streaming.
  • La possibilità di trasformare i byte di dati non elaborati scaricati nel formato di tua scelta, consentendo a PyTorch DataLoader di lavorare in modo flessibile con array NumPy o tensori PyTorch.

Per il checkpoint e il caricamento del modello, Connector for PyTorch offre i seguenti vantaggi:

  • Un'interfaccia di checkpointing per salvare in modo pratico e diretto i checkpoint del modello in un bucket Cloud Storage e caricarli dal bucket.
  • Connector for PyTorch supporta il checkpointing di PyTorch Lightning utilizzando l'implementazione DatafluxLightningCheckpoint di CheckpointIO di PyTorch Lightning.
  • Connector for PyTorch fornisce implementazioni di StorageWriter e StorageReader da utilizzare con il checkpointing distribuito di PyTorch. La libreria demo Connector for PyTorch include un codice di esempio per l'utilizzo in un carico di lavoro FSDP di PyTorch Lightning.
  • Il checkpointing del connettore include il supporto per i salvataggi dei checkpoint asincroni con Lightning e PyTorch di base.

Per maggiori informazioni, consulta la pagina di destinazione di GitHub del connettore per PyTorch.

Framework

Connector for PyTorch è supportato nelle seguenti versioni del framework:

  • Python 3.8 o versioni successive
  • PyTorch Lightning 2.0 o versioni successive
  • PyTorch 2.3.1 o versioni successive

Per iniziare

Per utilizzare il connettore per PyTorch, devi disporre di:

  • Un bucket Cloud Storage che contiene i dati che vuoi utilizzare.
  • Le seguenti autorizzazioni per lavorare con i dati archiviati nel bucket:
    • storage.objects.create
    • storage.objects.list
    • storage.objects.get
    • storage.objects.delete, se intendi utilizzare i download composti

Queste autorizzazioni devono essere concesse all'account che Connector for PyTorch utilizzerà per l'autenticazione utilizzando un ruolo IAM come Utente oggetto Storage.

Installazione

Per installare il connettore per PyTorch, utilizza il seguente comando:

pip install gcs-torch-dataflux

Configurazione

Per utilizzare il connettore per PyTorch, è necessario fornire l'autenticazione delle credenziali predefinite dell'applicazione tramite uno dei seguenti metodi:

gcloud auth application-default login

Esempi

Un insieme completo di esempi per l'utilizzo di Connector for PyTorch è disponibile nella directory demo del repository GitHub di Connector for PyTorch. Ecco alcuni esempi:

Prestazioni

Il connettore per PyTorch dispone di ottimizzazioni specifiche progettate per i carichi di lavoro di ML che possono offrire prestazioni significativamente migliori rispetto alle chiamate API dirette a Cloud Storage:

  • Per ottimizzare il rendimento dell'elenco, il connettore per PyTorch utilizza un algoritmo di elenco rapido sviluppato per bilanciare il carico di lavoro dell'elenco tra i processi di elenco degli oggetti parallelizzati.
  • Per ottimizzare le prestazioni di download dei file di piccole dimensioni, il connettore per PyTorch utilizza l'operazione di composizione per concatenare insiemi di oggetti più piccoli in oggetti singoli più grandi. Questi nuovi oggetti compositi vengono archiviati nello stesso bucket degli oggetti di origine e hanno il prefisso dataflux-composed-objects/ nei loro nomi.
  • Il caricamento multiparte per la scrittura dei checkpoint consente un miglioramento delle prestazioni fino a 10 volte superiore rispetto al caricamento standard dei checkpoint.

Puoi trovare i dati sul rendimento su GitHub per quanto segue:

  • Lightning Text Based Training
  • Addestramento rapido delle immagini
  • Checkpointing a nodo singolo
  • Checkpointing multi-nodo

Considerazioni

I seguenti elementi devono essere presi in considerazione in base al carico di lavoro.

Operazioni di schede rapide

Il connettore per l'algoritmo di elenco rapido di PyTorch fa sì che il connettore per PyTorch utilizzi più operazioni di elenco rispetto a un normale elenco sequenziale. Le operazioni di elenco vengono addebitate come operazioni di classe A.

Utilizzo di oggetti compositi

Per evitare addebiti per spazio di archiviazione in eccesso e addebiti per eliminazione anticipata quando lavori con oggetti compositi temporanei, devi assicurarti che il bucket utilizzi le seguenti impostazioni:

Gli oggetti compositi creati da Connector for PyTorch vengono in genere rimossi automaticamente al termine del ciclo di addestramento, ma in rari casi potrebbe non accadere. Per assicurarti che gli oggetti vengano rimossi dal bucket, puoi eseguire questo comando:

gcloud storage rm gs://<my-bucket>/dataflux-composed-objects/ --recursive

Puoi disattivare l'utilizzo di oggetti compositi includendo disable_compose=True o max_composite_object_size=0 nella parte di configurazione del set di dati che stai creando. Tuttavia, la disattivazione di questo comportamento può allungare notevolmente i cicli di addestramento, soprattutto quando si lavora con file di piccole dimensioni.

L'utilizzo di oggetti compositi fa sì che Cloud Storage raggiunga i limiti di QPS e velocità effettiva a una scala inferiore rispetto al download diretto dei file. Devi disattivare l'utilizzo di oggetti compositi quando esegui scalabilità multimodale elevata in cui raggiungi i limiti di QPS o di velocità effettiva del progetto anche senza utilizzare oggetti compositi.

Errori 429 e prestazioni ridotte

Quando utilizzi il connettore per PyTorch, potresti ricevere errori 429 o tempi di esecuzione più lenti del previsto. Esistono diversi motivi comuni per cui si verifica questo problema:

  • Molti progetti di machine learning scelgono un modello di addestramento altamente distribuito che sfrutta strumenti come PyTorch Lightning e Ray. Questi modelli sono compatibili con il connettore per PyTorch, ma spesso possono attivare i limiti di frequenza di Cloud Storage.
  • Gli errori 429 accompagnati da messaggi come "Questo workload sta utilizzando una larghezza di banda di uscita troppo elevata da Cloud Storage" o "Questo workload ha attivato il limite di larghezza di banda di uscita di Cloud Storage" indicano che la velocità effettiva dei dati del tuo workload sta superando la capacità massima del tuo Google Cloud progetto. Per risolvere questi problemi, segui questi passaggi:
  • I limiti di QPS possono attivare errori 429 con un messaggio nel corpo che indica TooManyRequests, ma più comunemente si manifestano in tempi di esecuzione più lenti del previsto. I colli di bottiglia QPS sono più comuni quando si opera su volumi elevati di file di piccole dimensioni. I limiti QPS dei bucket aumentano naturalmente nel tempo, quindi consentire un periodo di riscaldamento può spesso portare a prestazioni più rapide. Per visualizzare ulteriori dettagli sul rendimento di un bucket di destinazione, consulta la scheda Osservabilità quando visualizzi il bucket dalla console Google Cloud .
  • Se il tuo workload non funziona e viene visualizzato un errore TooManyRequests che include la parola chiave dataflux-composed-objects nel messaggio di errore, la disattivazione dell'utilizzo di oggetti composti è il primo passaggio di risoluzione dei problemi. In questo modo è possibile ridurre il carico di QPS causato dalle operazioni di composizione quando vengono utilizzate su larga scala.

Consumo di memoria

Le scritture e i caricamenti dei checkpoint, inclusi i modelli finali per l'inferenza, vengono eseguiti completamente in memoria per ottimizzare le prestazioni di caricamento e download. Ogni macchina deve disporre di RAM libera sufficiente per memorizzare il checkpoint in modo da poter sfruttare questi miglioramenti delle prestazioni.

Assistenza

Puoi ricevere assistenza, inviare domande generali e richiedere nuove funzionalità utilizzando uno dei canali di assistenza diGoogle Cloud ufficiali. Puoi anche ricevere assistenza inviando segnalazioni su GitHub.

PyTorch, il logo PyTorch e tutti i marchi correlati sono marchi di The Linux Foundation.