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
DatafluxLightningCheckpointdiCheckpointIOdi PyTorch Lightning. - Il connettore per PyTorch fornisce implementazioni
StorageWritereStorageReaderper 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.
- Per altre impostazioni consigliate per il bucket, consulta Utilizzo di oggetti compositi.
- Le seguenti autorizzazioni per lavorare con i dati archiviati nel bucket:
storage.objects.createstorage.objects.liststorage.objects.getstorage.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:
- Quando esegui il Connector for PyTorch su una VM Compute Engine, le Credenziali predefinite dell'applicazione utilizzano automaticamente il account di servizio collegato alla VM per impostazione predefinita. Per ulteriori informazioni, consulta 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 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:
- Un notebook Jupyter di base per iniziare (ospitato da Google Colab).
- Una procedura dettagliata del 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
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:
- 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 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:
- 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 carico di lavoro sta utilizzando una quantità eccessiva di 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à di trasmissione dei dati del carico di lavoro supera la capacità massima del tuo progetto. Cloud de Confiance by S3NS Per risolvere questi problemi, procedi come segue:
- Verifica che altri carichi di lavoro nel tuo progetto non stiano utilizzando una quantità eccessiva di larghezza di banda.
- Richiedi un aumento della quota.
- Modifica le opzioni
list_retry_configedownload_retry_confignella parte di configurazione dei set di dati che stai creando per ottimizzare il backoff dei tentativi e massimizzare il rendimento.
- 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 prestazioni più veloci. Per maggiori dettagli sul rendimento di un bucket di destinazione, consulta la scheda Osservabilità quando visualizzi il bucket dalla Cloud de Confiance console. - Se il carico di lavoro non riesce a causa di un errore
TooManyRequestsche include la parola chiavedataflux-composed-objectsnel messaggio di errore, la disattivazione dell'utilizzo di oggetti composti è il primo passo per la risoluzione dei problemi. 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 una quantità di RAM libera sufficiente per eseguire il checkpoint in memoria in modo da poter sfruttare questi miglioramenti del rendimento.