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 del modello:
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 più piccoli di 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 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 di tua scelta, consentendo a PyTorch DataLoader di lavorare in modo flessibile con array NumPy o tensori PyTorch.
Per il checkpoint e il caricamento del modello, 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 caricarli dal bucket.
- Connector for PyTorch supporta il checkpointing di PyTorch Lightning utilizzando l'implementazione
DatafluxLightningCheckpoint
diCheckpointIO
di PyTorch Lightning. - Connector for PyTorch fornisce implementazioni di
StorageWriter
eStorageReader
da utilizzare con il checkpointing distribuito di PyTorch. La libreria demo Connector for PyTorch include un 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 dei checkpoint asincroni con Lightning e PyTorch di base.
Per maggiori informazioni, consulta 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:
- Un bucket Cloud Storage che contiene i dati che vuoi utilizzare.
- Per ulteriori impostazioni consigliate per il bucket, 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 concesse all'account che Connector for PyTorch utilizzerà per l'autenticazione utilizzando un ruolo IAM come Utente oggetto Storage.
Installazione
Per installare il connettore per PyTorch, utilizza il seguente comando:
pip install gcs-torch-dataflux
Configurazione
Per utilizzare il connettore per PyTorch, è necessario fornire l'autenticazione delle credenziali predefinite dell'applicazione tramite uno dei seguenti metodi:
- Durante l'esecuzione di 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 saperne di più, vedi Scegliere un metodo di autenticazione dei 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 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 notebook Jupyter di base (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 connettore per PyTorch dispone di ottimizzazioni specifiche progettate per i carichi di lavoro di ML che possono offrire prestazioni significativamente migliori rispetto alle chiamate API dirette a Cloud Storage:
- Per ottimizzare il rendimento dell'elenco, il connettore per 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 le prestazioni di 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 nuovi 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 superiore rispetto al caricamento standard dei checkpoint.
Puoi trovare i dati sul rendimento su GitHub per quanto segue:
- Lightning Text Based Training
- Addestramento rapido delle immagini
- Checkpointing a nodo singolo
- Checkpointing multi-nodo
Considerazioni
I seguenti elementi devono essere presi in considerazione in base al carico di lavoro.
Operazioni di schede rapide
Il connettore per l'algoritmo di elenco rapido di PyTorch fa sì che il connettore per PyTorch utilizzi più operazioni di elenco rispetto a un normale elenco 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:
- Disabilitata Eliminazione temporanea
- Disabilitato Blocco di bucket
- Controllo delle versioni degli oggetti disattivato
- Standard Storage come classe di archiviazione sia per il bucket che per gli oggetti.
Gli oggetti compositi creati da Connector for PyTorch vengono in genere rimossi automaticamente al termine del ciclo di addestramento, ma in rari casi potrebbe non accadere. 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ò
allungare notevolmente i cicli 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 velocità effettiva a una scala inferiore rispetto al download diretto dei file. Devi disattivare l'utilizzo di oggetti compositi quando esegui scalabilità multimodale elevata in cui raggiungi i limiti di QPS o di velocità effettiva del progetto anche senza utilizzare oggetti compositi.
Errori 429 e prestazioni ridotte
Quando utilizzi il connettore 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 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 workload sta utilizzando una larghezza di banda di uscita troppo elevata da Cloud Storage" o "Questo workload ha attivato il limite di larghezza di banda di uscita di Cloud Storage" indicano che la velocità effettiva dei dati del tuo workload sta superando la capacità massima del tuo Google Cloud progetto. Per risolvere questi problemi, segui questi
passaggi:
- Verifica che altri carichi di lavoro nel tuo progetto non utilizzino una larghezza di banda eccessiva.
- Richiedi un aumento della quota.
- Modifica le opzioni
list_retry_config
edownload_retry_config
nella sezione di configurazione dei set di dati che stai creando per ottimizzare il backoff dei 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 in tempi di esecuzione più lenti del previsto. I colli di bottiglia QPS sono più comuni quando si opera su volumi elevati di file di piccole dimensioni. I limiti QPS dei bucket aumentano naturalmente nel tempo, quindi consentire un periodo di riscaldamento può spesso portare a prestazioni più rapide. Per visualizzare ulteriori dettagli sul rendimento di un bucket di destinazione, consulta la scheda Osservabilità quando visualizzi il bucket dalla console Google Cloud . - Se il tuo workload non funziona e viene visualizzato un errore
TooManyRequests
che include la parola chiavedataflux-composed-objects
nel messaggio di errore, la disattivazione dell'utilizzo di oggetti composti è il primo passaggio di 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 le prestazioni di caricamento e download. Ogni macchina deve disporre di RAM libera sufficiente per memorizzare il checkpoint 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 diGoogle Cloud ufficiali. Puoi anche ricevere assistenza inviando segnalazioni su GitHub.