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
Connector for PyTorch offre vantaggi sia per il caricamento dei dati nell'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 dei modelli, 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
DatafluxLightningCheckpointdiCheckpointIOdi PyTorch Lightning. - Connector for PyTorch fornisce implementazioni
StorageWritereStorageReaderda 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 contenente i dati con cui vuoi lavorare.
- Consulta l'utilizzo degli oggetti compositi per ulteriori impostazioni consigliate per il bucket.
- 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 verrà utilizzato per l'autenticazione dal Connector for PyTorch 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:
- Durante l'esecuzione del Connector for PyTorch su una VM di Compute Engine, le credenziali predefinite dell'applicazione utilizzano automaticamente il account di servizio collegato alla VM per impostazione predefinita. Per saperne di più, consulta Scegli un metodo di autenticazione del workload.
- Le Credenziali predefinite dell'applicazione possono anche essere configurate manualmente. Puoi accedere direttamente utilizzando Google Cloud CLI:
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:
- Un blocco note Jupyter di base (ospitato da Google Colab).
- Una procedura dettagliata per il workload di addestramento della segmentazione delle immagini end-to-end.
- Un esempio end-to-end e il notebook per l'integrazione di PyTorch Lightning.
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 della generazione di elenchi, Connector for PyTorch utilizza un algoritmo di generazione di elenchi rapida sviluppato per bilanciare il workload della generazione di elenchi tra i processi di generazione di elenchi di 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 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 Lightning Image
- 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:
- Eliminazione temporanea disabilitata
- Blocco bucket disattivato
- Controllo delle versioni degli oggetti disattivato
- Standard Storage come classe di archiviazione sia per il bucket che per gli oggetti.
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 multi-nodo 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. Questo può accadere per diversi motivi comuni:
- 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 velocità effettiva dei dati del tuo workload sta superando la capacità massima del tuo progetto Cloud de Confiance by S3NS . Per risolvere questi problemi, segui questi passaggi:
- Verifica che altri workload nel progetto non utilizzino una larghezza di banda eccessiva.
- Richiedi un aumento della quota.
- Modifica le opzioni
list_retry_configedownload_retry_confignella sezione di configurazione dei set di dati che stai creando per ottimizzare il backoff dei nuovi tentativi e massimizzare le prestazioni.
- 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 sul rendimento di un bucket di destinazione, consulta la scheda Osservabilità quando visualizzi il bucket dalla console Cloud de Confiance . - Se il workload non va a buon fine con un errore
TooManyRequestsche include la parola chiavedataflux-composed-objectsnel messaggio di errore, disattivare l'utilizzo degli oggetti composti è il primo passaggio migliore per la risoluzione dei problemi. 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.