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

Connector for PyTorch offre vantaggi sia per il caricamento dei dati durante l'addestramento sia per il checkpointing e il caricamento del modello:

Per il caricamento dei dati durante l'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 di dimensioni inferiori a 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 i set di dati in stile mappa per pattern di accesso ai dati casuali e per i set di dati in stile iterabile per pattern di accesso ai dati in streaming.
  • La possibilità di trasformare i byte non elaborati dei dati scaricati nel formato scelto, consentendo a PyTorch DataLoader di lavorare in modo flessibile con gli array NumPy o i tensori PyTorch.

Per il checkpointing e il caricamento dei modelli, Connector for PyTorch offre i seguenti vantaggi:

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

Per ulteriori informazioni, visita 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 quanto segue:

  • Un bucket Cloud Storage contenente i dati con cui vuoi lavorare.
  • 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 concedute all'account che il connettore per PyTorch utilizzerà per l'autenticazione utilizzando un ruolo IAM come Utente oggetto archiviazione.

Installazione

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

pip install gcs-torch-dataflux

Configurazione

Per utilizzare le credenziali predefinite dell'applicazione del connettore per PyTorch, devi fornire l'autenticazione 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

Connector for PyTorch include ottimizzazioni specifiche progettate per i carichi di lavoro di ML che possono offrire prestazioni notevolmente migliori rispetto alle chiamate API dirette a Cloud Storage:

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

Su GitHub puoi trovare i dati sul rendimento per quanto riguarda:

  • Formazione basata su testo di Lightning
  • Formazione di immagini con Lightning
  • Checkpoint a nodo singolo
  • Controllo dei punti di controllo a più nodi

Considerazioni

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

Operazioni rapide per le schede

L'algoritmo di elencazione rapida di Connector for PyTorch fa sì che Connector for PyTorch utilizzi più operazioni sugli elenchi rispetto a una normale elencazione 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 tuo bucket utilizzi le seguenti impostazioni:

Gli oggetti compositi creati da Connector for PyTorch vengono solitamente rimossi automaticamente al termine del ciclo di addestramento, ma in rari casi potrebbero non essere rimossi. Per assicurarti che gli oggetti vengano rimossi dal bucket, puoi eseguire il seguente 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ò far sì che i loop di addestramento richiedano molto più tempo, 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 throughput su una scala inferiore rispetto al download diretto dei file. Devi disattivare l'uso di oggetti compositi quando esegui l'esecuzione su larga scala con più nodi e raggiungi i limiti di QPS o di throughput del progetto anche senza utilizzare oggetti compositi.

Errori 429 e prestazioni ridotte

Quando utilizzi Connector for PyTorch, potresti ricevere errori 429 o tempi di esecuzione inferiori alle aspettative. Esistono diversi motivi comuni per cui questo accade:

  • 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 carico di lavoro sta utilizzando troppa larghezza di banda in uscita da Cloud Storage" o "Questo carico di lavoro ha attivato il limite di larghezza di banda in uscita di Cloud Storage" indicano che la velocità in uscita dei dati del tuo carico di lavoro sta superando la capacità massima del tuo progetto Google Cloud. Per risolvere questi problemi, svolgi i seguenti passaggi:
  • I limiti QPS possono attivare errori 429 con un messaggio nel corpo che indica TooManyRequests, ma più comunemente si manifestano in tempi di esecuzione inferiori alle aspettative. I colli di bottiglia QPS sono più comuni quando si opera su volumi elevati di file di piccole dimensioni. I limiti QPS del bucket aumentano naturalmente nel tempo, quindi consentire un periodo di riscaldamento può spesso portare a prestazioni più rapide. Per maggiori dettagli sul rendimento di un bucket di destinazione, consulta la scheda Osservabilità quando visualizzi il bucket dalla console Google Cloud.
  • Se il tuo carico di lavoro non va a buon fine con un errore TooManyRequests che include la parola chiave dataflux-composed-objects nel messaggio di errore, la disattivazione dell'uso degli oggetti composti è il primo passaggio migliore per la risoluzione dei problemi. In questo modo, è possibile ridurre il carico QPS causato dalle operazioni di composizione se utilizzate su larga scala.

Consumo di memoria

Le scritture e i caricamenti dei checkpoint, inclusi i modelli finali per l'inferenza, vengono completamente eseguiti in memoria per ottimizzare le prestazioni di caricamento e download. Ogni macchina deve avere RAM libera sufficiente per eseguire il checkpoint in memoria 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 Google 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.