Connector for PyTorch

Il connettore Cloud Storage per PyTorch è uno strumento open source per l'integrazione diretta tra Cloud Storage e PyTorch. Questo connettore ti aiuta a caricare i dati di addestramento e a gestire i checkpoint dei modelli per i workload di intelligenza artificiale (AI) e machine learning (ML).

Questa pagina descrive come installare e iniziare a utilizzare il connettore Cloud Storage per PyTorch.

Panoramica

Il Connector for PyTorch offre vantaggi sia per il caricamento dei dati nell'addestramento sia per il checkpointing e il caricamento dei modelli:

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 di dimensioni inferiori a 1 MB.
  • Connector for 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 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 di tua scelta, consentendo a PyTorch DataLoader di lavorare in modo flessibile con array NumPy o tensori PyTorch.

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

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

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

Framework

Il connettore per 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.
    • Consulta l'utilizzo degli oggetti compositi per altre impostazioni consigliate per il bucket.
  • 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 il connettore per PyTorch utilizzerà per l'autenticazione utilizzando un ruolo IAM come Utente oggetti Storage.

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 set completo di esempi per l'utilizzo del Connector for PyTorch è disponibile nella directory demo del repository GitHub del Connector for PyTorch. Ecco alcuni esempi:

Prestazioni

Il Connector for PyTorch ha ottimizzazioni specifiche progettate per i workload di ML che possono fornire 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 workload dell'elenco tra i processi di elenco degli oggetti parallelizzati.
  • Per ottimizzare il rendimento del download dei file di piccole dimensioni, il connettore per PyTorch utilizza l'operazione di composizione per concatenare set di oggetti più piccoli in oggetti singoli più grandi. Questi 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 dei checkpoint consente un miglioramento del rendimento fino a 10 volte rispetto al caricamento standard dei checkpoint.

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

  • Addestramento basato su testo di Lightning
  • Addestramento delle immagini di Lightning
  • Checkpointing a nodo singolo
  • Checkpointing multi-nodo

Considerazioni

Di seguito sono riportate alcune considerazioni da tenere presenti per ogni workload.

Operazioni di elenco rapido

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

Utilizzo degli oggetti compositi

Per evitare addebiti di archiviazione eccessivi e addebiti per eliminazione anticipata quando lavori con oggetti compositi temporanei, assicurati che il bucket utilizzi le seguenti impostazioni:

  • Eliminazione temporanea disabilitata
  • Blocco di bucket disabilitato
  • Controllo delle versioni degli oggetti disabilitato
  • Standard Storage come classe di archiviazione sia per il bucket sia per gli oggetti.

Gli oggetti compositi creati dal Connector for PyTorch vengono in genere rimossi automaticamente alla fine del loop 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 degli 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ò comportare un aumento significativo della durata dei loop 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. Dovresti disattivare l'utilizzo degli oggetti compositi quando esegui a scale multi-nodo elevate in cui raggiungi i limiti di QPS o velocità effettiva del progetto anche senza utilizzare oggetti compositi.

Errori 429 e prestazioni ridotte

Quando lavori con 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 sforzi di machine learning optano per 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 quantità eccessiva di larghezza di banda in uscita da Cloud Storage" o "Questo workload ha attivato il limite di larghezza di banda in uscita di Cloud Storage" indicano che la velocità effettiva dei dati del workload supera la capacità massima del Google Cloud tuo 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 di QPS sono più comuni quando si opera su volumi elevati di file di piccole dimensioni. I limiti di QPS dei bucket aumentano naturalmente nel tempo, quindi consentire un periodo di riscaldamento può spesso portare a un rendimento più rapido. Per visualizzare ulteriori dettagli sul rendimento di un bucket di destinazione, consulta la scheda Osservabilità quando visualizzi il bucket dalla Google Cloud console.
  • Se il workload non riesce a causa di un errore TooManyRequests che include la parola chiave dataflux-composed-objects nel messaggio di errore, la disattivazione dell'utilizzo degli oggetti composti è il primo passo di risoluzione dei problemi migliore. 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 il rendimento di caricamento e download. Ogni macchina deve avere RAM libera sufficiente per eseguire il checkpoint in memoria in modo da poter sfruttare questi miglioramenti del rendimento.

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.