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 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 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 di 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 pratico e diretto i checkpoint del modello in un bucket Cloud Storage e caricare i checkpoint del modello 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 carico di lavoro 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:

  • 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 concesse all'account che il Connector for PyTorch utilizzerà per l'autenticazione utilizzando un ruolo IAM come Utente oggetti Storage.

Installazione

Per installare il Connector for PyTorch, utilizza il seguente comando:

pip install gcs-torch-dataflux

Configurazione

Per utilizzare il Connector per PyTorch Credenziali predefinite dell'applicazione, 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 carichi di lavoro di ML che possono fornire prestazioni significativamente migliori rispetto alle chiamate API dirette a Cloud Storage:

  • Per ottimizzare il rendimento dell'elenco, il Connector for 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 il rendimento del 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 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 di migliorare il 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 carico di lavoro.

Operazioni di elenco rapido

L'algoritmo di elenco rapido del Connector per PyTorch fa sì che il Connector 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 di 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:

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 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 loop di addestramento, soprattutto quando lavori con file di piccole dimensioni.

L'utilizzo di oggetti compositi fa sì che Cloud Storage raggiunga i limiti di QPS e throughput a una scala inferiore rispetto al download diretto dei file. Dovresti disattivare l'utilizzo di oggetti compositi quando esegui a scale multi-nodo elevate in cui raggiungi i limiti di QPS o throughput del progetto anche senza utilizzare oggetti compositi.

Errori 429 e prestazioni ridotte

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

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 una quantità di RAM libera sufficiente per eseguire il checkpoint in memoria in modo da poter sfruttare questi miglioramenti del rendimento.

Assistenza

Puoi richiedere assistenza, inviare domande generali e richiedere nuove funzionalità segnalando problemi su GitHub.

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