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 durante l'addestramento sia per il checkpoint e il caricamento del modello:

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

  • Connector for PyTorch contiene ottimizzazioni per velocizzare l'addestramento fino a tre volte 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 in streaming.
  • La possibilità di trasformare i byte di dati non elaborati scaricati nel formato che preferisci, consentendo a PyTorch DataLoader di lavorare in modo flessibile con array NumPy o tensori PyTorch.

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

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

Per saperne di più, consulta la pagina di destinazione di GitHub per Connector for 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 Connector for PyTorch, devi disporre di quanto segue:

  • Un bucket Cloud Storage che contiene 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 Storage Object User.

Installazione

Per installare Connector for PyTorch, utilizza il seguente comando:

pip install gcs-torch-dataflux

Configurazione

Per utilizzare il Connector for PyTorch, è necessario fornire l'autenticazione tramite le Credenziali predefinite dell'applicazione utilizzando uno dei seguenti metodi:

gcloud auth application-default login

Esempi

Un set 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 dispone di ottimizzazioni specifiche progettate per i workload di ML che possono fornire prestazioni significativamente migliori rispetto alle chiamate API dirette a Cloud Storage:

  • Per ottimizzare le prestazioni di elenco, Connector for PyTorch utilizza un algoritmo di elenco rapido sviluppato per bilanciare il carico di lavoro di elenco tra i processi di elenco degli oggetti parallelizzati.
  • Per ottimizzare le prestazioni di download dei file di piccole dimensioni, il Connector for 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 loro nomi.
  • Il caricamento multiparte per la scrittura dei checkpoint consente un miglioramento delle prestazioni fino a 10 volte rispetto al caricamento dei checkpoint standard.

Puoi trovare i dati sul rendimento su GitHub per i seguenti elementi:

  • Lightning Text Based Training
  • Addestramento di immagini Lightning
  • Checkpointing su un singolo nodo
  • Checkpointing multi-nodo

Considerazioni

I seguenti aspetti devono essere presi in considerazione per ogni workload.

Operazioni di elenco rapide

L'algoritmo di elenco rapido di Connector for PyTorch fa sì che Connector for 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 costi di archiviazione in eccesso e costi di 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 ciclo di addestramento, ma in rari casi potrebbero non esserlo. 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ò comportare un aumento significativo dei tempi 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 throughput su una scala inferiore rispetto al download diretto dei file. Devi disattivare l'utilizzo di oggetti compositi quando esegui operazioni su scale multinodo elevate in cui raggiungi i limiti di QPS o throughput del progetto anche senza utilizzare oggetti compositi.

Errori 429 e prestazioni ridotte

Durante l'utilizzo di Connector for PyTorch, potresti ricevere errori 429 o tempi di esecuzione più lenti del previsto. Esistono diversi motivi comuni per cui ciò accade:

  • Molti progetti di machine learning optano per un modello di addestramento altamente distribuito che sfrutta strumenti come PyTorch Lightning e Ray. Questi modelli sono compatibili con Connector for PyTorch, ma spesso possono attivare i limiti di frequenza di Cloud Storage.
  • Gli errori 429 accompagnati da messaggi come "Questo workload sta utilizzando troppa 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 frequenza di throughput dei dati del tuo workload sta superando la capacità massima del tuo progetto Google Cloud . 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 con tempi di esecuzione più lenti del previsto. I colli di bottiglia delle QPS sono più comuni quando si opera su volumi elevati di file di piccole dimensioni. I limiti di QPS dei bucket scalano naturalmente nel tempo, quindi consentire un periodo di preparazione può spesso portare a prestazioni più rapide. Per maggiori dettagli sulle prestazioni di un bucket di destinazione, consulta la scheda Osservabilità quando visualizzi il bucket dalla console Google Cloud .
  • Se il workload non va a buon fine con un errore TooManyRequests che include la parola chiave dataflux-composed-objects nel messaggio di errore, il primo passaggio migliore per la risoluzione dei problemi è disattivare l'utilizzo degli oggetti composti. In questo modo, puoi ridurre il carico di QPS generato 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, sono completamente gestiti in memoria per ottimizzare le prestazioni di caricamento e download. Ogni macchina deve avere abbastanza RAM libera per eseguire lo stage del checkpoint in memoria in modo da poter sfruttare questi miglioramenti delle prestazioni.

Assistenza

Puoi ricevere assistenza, inviare domande generali e richiedere nuove funzionalità segnalando i problemi in GitHub.

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