View a markdown version of this page

Dataloader mappato in memoria - Amazon SageMaker AI

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Dataloader mappato in memoria

Un altro sovraccarico di riavvio deriva dal caricamento dei dati: il cluster di addestramento rimane inattivo mentre il dataloader si inizializza, scarica i dati dai file system remoti e li elabora in batch.

Per risolvere questo problema, introduciamo il Dataloader Memory Mapped DataLoader (MMAP), che memorizza nella cache i batch precaricati nella memoria persistente, assicurando che rimangano disponibili anche dopo un riavvio indotto da un errore. Questo approccio elimina i tempi di configurazione del dataloader e consente di riprendere immediatamente l'addestramento utilizzando batch memorizzati nella cache, mentre il dataloader reinizializza e recupera contemporaneamente i dati successivi in background. La cache dei dati si trova su ogni livello che richiede dati di addestramento e mantiene due tipi di batch: i batch consumati di recente che sono stati utilizzati per l'addestramento e i batch precaricati pronti per l'uso immediato.

Questa immagine illustra il Dataloader MMAP, le cache e i batch consumati.

Il dataloader MMAP offre le due seguenti funzionalità:

  • Prefetching dei dati: recupera e memorizza nella cache in modo proattivo i dati generati dal dataloader

  • Caching persistente: memorizza i batch consumati e precaricati in un file system temporaneo che sopravvive ai riavvii del processo

Utilizzando la cache, il lavoro di formazione trarrà vantaggio da:

  • Impronta di memoria ridotta: sfrutta la memoria mappata I/O per mantenere una singola copia condivisa dei dati nella memoria della CPU host, eliminando le copie ridondanti tra i processi GPU (ad esempio, riduce da 8 copie a 1 su un'istanza p5 con 8 GPU)

  • Ripristino più rapido: riduce il tempo medio di riavvio (MTTR) consentendo di riprendere immediatamente la formazione dai batch memorizzati nella cache, eliminando l'attesa per la reinizializzazione del dataloader e la generazione del primo batch

Configurazioni MMAP

Per utilizzare MMAP, è sufficiente inserire il modulo dati originale in MMAPDataModule

data_module=MMAPDataModule( data_module=MY_DATA_MODULE(...), mmap_config=CacheResumeMMAPConfig( cache_dir=self.cfg.mmap.cache_dir, checkpoint_frequency=self.cfg.mmap.checkpoint_frequency), )

CacheResumeMMAPConfig: i parametri di MMAP Dataloader controllano la posizione della directory della cache, i limiti di dimensione e la delega per il recupero dei dati. Per impostazione predefinita, solo il rango TP 0 per nodo recupera i dati dall'origine, mentre gli altri ranghi dello stesso gruppo di replica dei dati vengono letti dalla cache condivisa, eliminando i trasferimenti ridondanti.

MMAPDataModule: racchiude il modulo dati originale e restituisce il dataloader mmap sia per l'addestramento che per la convalida.

Vedi l'esempio per abilitare MMAP.

Guida di riferimento alle API

CacheResumeMMAPConfig

class hyperpod_checkpointless_training.dataloader.config.CacheResumeMMAPConfig( cache_dir='/dev/shm/pdl_cache', prefetch_length=10, val_prefetch_length=10, lookback_length=2, checkpoint_frequency=None, model_parallel_group=None, enable_batch_encryption=False)

Classe di configurazione per la funzionalità del dataloader cache-resume memory-mapped (MMAP) nell'addestramento senza checkpoint. HyperPod

Questa configurazione consente un caricamento efficiente dei dati con funzionalità di caching e prefetching, consentendo di riprendere rapidamente l'addestramento dopo gli errori mantenendo i batch di dati memorizzati nella cache in file mappati in memoria.

Parametri

  • cache_dir (str, opzionale) — Percorso della directory per l'archiviazione dei batch di dati memorizzati nella cache. Predefinito: «//pdl_cache» dev/shm

  • prefetch_length (int, opzionale) — Numero di batch da precaricare in anticipo durante l'allenamento. Impostazione predefinita: 10

  • val_prefetch_length (int, opzionale) — Numero di batch da precaricare in anticipo durante la convalida. Impostazione predefinita: 10

  • lookback_length (int, opzionale) — Numero di batch utilizzati in precedenza da conservare nella cache per un potenziale riutilizzo. Impostazione predefinita: 2

  • checkpoint_frequency (int, opzionale) — Frequenza delle fasi di checkpoint del modello. Utilizzato per l'ottimizzazione delle prestazioni della cache. Impostazione predefinita: nessuna

  • model_parallel_group (object, opzionale) — Gruppo di processi per il parallelismo del modello. Se Nessuno, verrà creato automaticamente. Impostazione predefinita: nessuna

  • enable_batch_encryption (bool, opzionale) — Indica se abilitare la crittografia per i dati batch memorizzati nella cache. Impostazione predefinita: False

Metodi

create(dataloader_init_callable, parallel_state_util, step, is_data_loading_rank, create_model_parallel_group_callable, name='Train', is_val=False, cached_len=0)

Crea e restituisce un'istanza del dataloader MMAP configurata.

Parametri

  • dataloader_init_callable (Callable) — Funzione per inizializzare il dataloader sottostante

  • parallel_state_util (object) — Utilità per la gestione dello stato parallelo tra processi

  • step (int) — La fase di dati da cui riprendere durante l'allenamento

  • is_data_loading_rank (Callable) — Funzione che restituisce True se il rango corrente deve caricare i dati

  • create_model_parallel_group_callable (Callable) — Funzione per creare un gruppo di processi paralleli modello

  • name (str, opzionale) — Identificatore del nome per il dataloader. Predefinito: «Treno»

  • is_val (bool, opzionale) — Indica se si tratta di un dataloader di convalida. Impostazione predefinita: False

  • cached_len (int, opzionale) — Lunghezza dei dati memorizzati nella cache se si riprende dalla cache esistente. Impostazione predefinita: 0

Restituisce o — CacheResumePrefetchedDataLoader Istanza del dataloader MMAP configurata CacheResumeReadDataLoader

Aumenta ValueError se il parametro step è. None

Esempio

from hyperpod_checkpointless_training.dataloader.config import CacheResumeMMAPConfig # Create configuration config = CacheResumeMMAPConfig( cache_dir="/tmp/training_cache", prefetch_length=20, checkpoint_frequency=100, enable_batch_encryption=False ) # Create dataloader dataloader = config.create( dataloader_init_callable=my_dataloader_init, parallel_state_util=parallel_util, step=current_step, is_data_loading_rank=lambda: rank == 0, create_model_parallel_group_callable=create_mp_group, name="TrainingData" )

Note

  • La directory della cache deve avere spazio sufficiente e I/O prestazioni elevate (ad esempio,/dev/shm per l'archiviazione in memoria).

  • L'impostazione checkpoint_frequency migliora le prestazioni della cache allineando la gestione della cache con il checkpoint del modello

  • Per i dataloaders di convalida (is_val=True), il passaggio viene reimpostato su 0 e l'avvio a freddo viene forzato

  • Vengono utilizzate diverse implementazioni di dataloader a seconda che il rango corrente sia responsabile del caricamento dei dati

MMAPDataModule

class hyperpod_checkpointless_training.dataloader.mmap_data_module.MMAPDataModule( data_module, mmap_config, parallel_state_util=MegatronParallelStateUtil(), is_data_loading_rank=None)

Un DataModule wrapper PyTorch Lightning che applica le funzionalità di caricamento dei dati mappati in memoria (MMAP) all'addestramento esistente per l'addestramento senza checkpoint. DataModules

Questa classe integra un PyTorch Lightning esistente e lo migliora con la funzionalità MMAP, consentendo una memorizzazione efficiente dei dati nella cache DataModule e un rapido ripristino in caso di errori di allenamento. Mantiene la compatibilità con l' DataModule interfaccia originale aggiungendo al contempo funzionalità di formazione senza checkpoint.

Parameters

data_module (pl. LightningDataModule)

Il sottostante DataModule da avvolgere (ad es. LLMDataModule)

mmap_config (mmapConfig)

L'oggetto di configurazione MMAP che definisce il comportamento e i parametri di memorizzazione nella cache

parallel_state_util(MegatronParallelStateUtil, opzionale)

Utilità per la gestione dello stato parallelo tra processi distribuiti. Predefinito: MegatronParallelStateUtil ()

is_data_loading_rank(Richiamabile, opzionale)

Funzione che restituisce True se il rango corrente deve caricare dati. Se None, il valore predefinito è parallel_state_util.is_tp_0. Impostazione predefinita: nessuna

Attributes

global_step (int)

Fase di formazione globale attuale, utilizzata per la ripresa dai checkpoint

cached_train_dl_len (int)

Lunghezza memorizzata nella cache del dataloader di addestramento

cached_val_dl_len (int)

Lunghezza memorizzata nella cache del dataloader di convalida

Metodi

setup(stage=None)

Imposta il modulo dati sottostante per la fase di formazione specificata.

stage(str, opzionale)

Fase dell'allenamento ('fit', 'validate', 'test' o 'predict'). Impostazione predefinita: nessuna

train_dataloader()

Crea la formazione DataLoader con MMAP wrapping.

Restituisce: DataLoader — MMAP-wrapped formazione DataLoader con funzionalità di caching e prefetching

val_dataloader()

Crea la convalida con il wrapping DataLoader MMAP.

Restituisce: DataLoader — MMAP-wrapped convalida DataLoader con funzionalità di caching

test_dataloader()

Crea il test DataLoader se il modulo dati sottostante lo supporta.

Restituisce: DataLoader o Nessuno: DataLoader esegue il test dal modulo dati sottostante o Nessuno se non è supportato

predict_dataloader()

Crea la previsione DataLoader se il modulo dati sottostante la supporta.

Restituisce: DataLoader o Nessuno: prevede DataLoader in base al modulo dati sottostante o Nessuno se non è supportato

load_checkpoint(checkpoint)

Carica le informazioni sui checkpoint per riprendere l'allenamento da una fase specifica.

checkpoint (dict)

Dizionario Checkpoint contenente la chiave 'global_step'

get_underlying_data_module()

Ottieni il modulo dati avvolto sottostante.

Restituisce: pl. LightningDataModule — Il modulo dati originale che è stato inserito

state_dict()

Ottieni il dizionario di stato del MMAP DataModule per il checkpoint.

Restituisce: dict — Dizionario contenente le lunghezze dei dataloader memorizzati nella cache

load_state_dict(state_dict)

Carica il dizionario di stato per ripristinare lo stato MMAP. DataModule

state_dict(dict)

Dizionario di stato da caricare

Proprietà

data_sampler

Esporre il campionatore di dati del modulo di dati sottostante al framework. NeMo

Restituisce: object o None: il campionatore di dati del modulo dati sottostante

Esempio

from hyperpod_checkpointless_training.dataloader.mmap_data_module import MMAPDataModule from hyperpod_checkpointless_training.dataloader.config import CacheResumeMMAPConfig from my_project import MyLLMDataModule # Create MMAP configuration mmap_config = CacheResumeMMAPConfig( cache_dir="/tmp/training_cache", prefetch_length=20, checkpoint_frequency=100 ) # Create original data module original_data_module = MyLLMDataModule( data_path="/path/to/data", batch_size=32 ) # Wrap with MMAP capabilities mmap_data_module = MMAPDataModule( data_module=original_data_module, mmap_config=mmap_config ) # Use in PyTorch Lightning Trainer trainer = pl.Trainer() trainer.fit(model, data=mmap_data_module) # Resume from checkpoint checkpoint = {"global_step": 1000} mmap_data_module.load_checkpoint(checkpoint)

Note

  • Il wrapper delega la maggior parte degli attributi di accesso al modulo di dati sottostante utilizzando __getattr__

  • Solo i ranghi di caricamento dei dati effettivamente inizializzano e utilizzano il modulo di dati sottostante; altri ranghi utilizzano dataloader falsi

  • Le lunghezze dei dataloader memorizzati nella cache vengono mantenute per ottimizzare le prestazioni durante la ripresa dell'allenamento