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
diCheckpointIO
di PyTorch Lightning. - Connector for PyTorch fornisce implementazioni di
StorageWriter
eStorageReader
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.
- Per ulteriori impostazioni consigliate per il separatore, consulta Utilizzo di oggetti compositi.
- 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:
- Durante l'esecuzione del connettore per PyTorch su una VM Compute Engine, le credenziali predefinite dell'applicazione utilizzano automaticamente l'account di servizio associato alla VM per impostazione predefinita. Per ulteriori informazioni, vedi Scegliere un metodo di autenticazione del carico di lavoro.
- Le credenziali predefinite dell'applicazione possono essere configurate anche manualmente. Puoi accedere direttamente utilizzando Google Cloud CLI:
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:
- Un blocco note Jupyter di base (in hosting su Google Colab).
- Una guida passo passo al carico di lavoro di addestramento per la segmentazione delle immagini end-to-end.
- Un esempio end-to-end e il notebook per l'integrazione di PyTorch Lightning.
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 schedatura 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 bucket utilizzi le seguenti impostazioni:
- Eliminazione temporanea disabilitata
- Blocco di bucket disabilitato
- Controllo delle versioni degli oggetti disabilitato
- Archiviazione standard come classe di archiviazione sia per il bucket sia per gli oggetti.
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:
- Verifica che gli altri carichi di lavoro del progetto non stiano utilizzando una larghezza di banda eccessiva.
- Richiedi un aumento della quota.
- Modifica le opzioni
list_retry_config
edownload_retry_config
nella parte di configurazione dei set di dati che stai creando per ottimizzare il backoff del nuovo tentativo e massimizzare le prestazioni.
- 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 chiavedataflux-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 in termini 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.