Cargador de datos mapeado en memoria - Amazon SageMaker AI

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Cargador de datos mapeado en memoria

Otra sobrecarga de reinicio se debe a la carga de datos: el clúster de entrenamiento permanece inactivo mientras el cargador de datos se inicializa, descarga datos de sistemas de archivos remotos y los procesa en lotes.

Para solucionar este problema, presentamos el cargador de datos con mapas de memoria DataLoader (MMAP), que almacena en caché los lotes precargados en la memoria persistente, lo que garantiza que permanezcan disponibles incluso después de un reinicio provocado por un error. Este enfoque elimina el tiempo de configuración del cargador de datos y permite reanudar inmediatamente el entrenamiento utilizando lotes en caché, mientras que el cargador de datos se reinicializa simultáneamente y recupera los datos subsiguientes en segundo plano. La caché de datos se encuentra en cada rango que requiere datos de entrenamiento y mantiene dos tipos de lotes: los lotes consumidos recientemente que se han utilizado para el entrenamiento y los lotes precargados listos para su uso inmediato.

Esta imagen muestra el cargador de datos MMAP, las cachés y los lotes consumidos.

El cargador de datos MMAP ofrece las dos funciones siguientes:

  • Obtención previa de datos: recupera y almacena en caché de forma proactiva los datos generados por el cargador de datos

  • Almacenamiento en caché persistente: almacena los lotes consumidos y precargados en un sistema de archivos temporal que sobrevive a los reinicios del proceso

Al utilizar la memoria caché, el trabajo de formación se beneficiará de:

  • Menor consumo de memoria: aprovecha la memoria mapeada I/O para mantener una única copia compartida de los datos en la memoria de la CPU del host, lo que elimina las copias redundantes en los procesos de la GPU (por ejemplo, reduce de 8 copias a 1 en una instancia p5 con 8) GPUs

  • Recuperación más rápida: reduce el tiempo medio de reinicio (MTTR) al permitir que la formación se reanude inmediatamente a partir de los lotes almacenados en caché, lo que elimina la espera de que se reinicialice el cargador de datos y se genere el primer lote

Configuraciones MMAP

Para usar MMAP, simplemente pase el módulo de datos original a 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: Los parámetros del cargador de datos MMAP controlan la ubicación del directorio de la memoria caché, los límites de tamaño y la delegación de captura de datos. De forma predeterminada, solo el TP de rango 0 por nodo recupera los datos de la fuente, mientras que los demás clasificados en el mismo grupo de replicación de datos leen desde la caché compartida, lo que elimina las transferencias redundantes.

MMAPDataModule: Envuelve el módulo de datos original y devuelve el cargador de datos mmap para su procesamiento y validación.

Consulte el ejemplo para habilitar MMAP.

Referencia de la 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)

Clase de configuración para la funcionalidad del cargador de datos mapeado en memoria caché (MMAP) en un entrenamiento sin puntos de control. HyperPod

Esta configuración permite una carga de datos eficiente con capacidades de almacenamiento en caché y recuperación previa, lo que permite reanudar el entrenamiento rápidamente después de los fallos al mantener los lotes de datos en caché en archivos mapeados en memoria.

Parámetros

  • cache_dir (str, opcional): ruta de directorio para almacenar lotes de datos en caché. Predeterminado: «/_cache» dev/shm/pdl

  • prefetch_length (int, opcional): número de lotes que se deben recuperar previamente durante el entrenamiento. Valor predeterminado: 10

  • val_prefetch_length (int, opcional): número de lotes que se van a recuperar previamente durante la validación. Valor predeterminado: 10

  • lookback_length (int, opcional): número de lotes utilizados anteriormente que se deben guardar en la caché para su posible reutilización. Valor predeterminado: 2

  • checkpoint_frequency (int, opcional): frecuencia de los pasos de los puntos de control del modelo. Se utiliza para optimizar el rendimiento de la memoria caché. Valor predeterminado: none

  • model_parallel_group (objeto, opcional): grupo de procesos para el paralelismo de modelos. Si es Ninguno, se creará automáticamente. Valor predeterminado: none

  • enable_batch_encryption (bool, opcional): indica si se debe habilitar el cifrado de los datos por lotes almacenados en caché. Valor predeterminado: False

Métodos

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 y devuelve una instancia de cargador de datos MMAP configurada.

Parámetros

  • dataloader_init_callable (Callable): función para inicializar el cargador de datos subyacente

  • parallel_state_util (object): utilidad para administrar el estado paralelo en todos los procesos

  • step (int): el paso de datos desde el que continuar durante el entrenamiento

  • is_data_loading_rank (Callable): función que devuelve True si el rango actual debe cargar datos

  • create_model_parallel_group_callable (Callable): función para crear un modelo de grupo de procesos paralelos

  • name (str, opcional): identificador de nombre para el cargador de datos. Predeterminado: «Tren»

  • is_val (bool, opcional): indica si se trata de un cargador de datos de validación. Valor predeterminado: False

  • cached_len (int, opcional): longitud de los datos en caché si se reanudan desde la caché existente. Predeterminado: 0

Devuelve CacheResumePrefetchedDataLoader oCacheResumeReadDataLoader: instancia de cargador de datos MMAP configurada

Se genera ValueError si el parámetro de paso es. None

Ejemplo

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" )

Notas

  • El directorio de caché debe tener suficiente espacio y un I/O rendimiento rápido (por ejemplo, /dev/shm para el almacenamiento en memoria).

  • La configuración checkpoint_frequency mejora el rendimiento de la caché al alinear la administración de la caché con los puntos de control del modelo

  • Para los dataloaders de validación (is_val=True), el paso se restablece en 0 y se fuerza el arranque en frío

  • Se utilizan diferentes implementaciones de cargadores de datos en función de si el rango actual es responsable de la carga de datos

MMAPDataMódulo

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

Un DataModule contenedor PyTorch Lightning que aplica las capacidades de carga de datos mapeados en memoria (MMAP) a las existentes para un entrenamiento sin puntos de control. DataModules

Esta clase combina un PyTorch Lightning existente DataModule y lo mejora con la funcionalidad MMAP, lo que permite un almacenamiento eficiente de los datos en caché y una recuperación rápida en caso de errores de entrenamiento. Mantiene la compatibilidad con la DataModule interfaz original y, al mismo tiempo, añade capacidades de entrenamiento sin puntos de control.

Parameters

data_module (pl. LightningDataModule)

El subyacente DataModule a envolver (por ejemplo, el LLMData módulo)

mmap_config () MMAPConfig

El objeto de configuración de MMAP que define el comportamiento y los parámetros del almacenamiento en caché

parallel_state_util(MegatronParallelStateUtil, opcional)

Utilidad para gestionar el estado paralelo en los procesos distribuidos. Predeterminado: MegatronParallelStateUtil ()

is_data_loading_rank(Se puede llamar, opcional)

Función que devuelve True si el rango actual debe cargar datos. Si es None, el valor predeterminado es parallel_state_util.is_tp_0. Valor predeterminado: none

Atributos

global_step (int)

Paso de formación global actual, que se utiliza para reanudar el entrenamiento desde los puntos de control

cached_train_dl_len (int)

Longitud almacenada en caché del cargador de datos de entrenamiento

cached_val_dl_len (int)

Longitud en caché del cargador de datos de validación

Métodos

setup(stage=None)

Configure el módulo de datos subyacente para la etapa de entrenamiento especificada.

stage(str, opcional)

Etapa del entrenamiento («ajustar», «validar», «probar» o «predecir»). Valor predeterminado: none

train_dataloader()

Cree el entrenamiento DataLoader con el empaquetado MMAP.

Devoluciones: DataLoader — Entrenamiento empaquetado en MMAP DataLoader con capacidades de almacenamiento en caché y precarga

val_dataloader()

Cree la validación con el empaquetado MMAP. DataLoader

Devuelve: DataLoader — Validación empaquetada en MMAP con capacidades de almacenamiento en caché DataLoader

test_dataloader()

Cree la prueba DataLoader si el módulo de datos subyacente la admite.

Devuelve: DataLoader o Ninguno: prueba DataLoader desde el módulo de datos subyacente, o Ninguno si no se admite

predict_dataloader()

Cree la predicción DataLoader si el módulo de datos subyacente la admite.

Devuelve: DataLoader o ninguno: predice DataLoader a partir del módulo de datos subyacente, o ninguno si no se admite

load_checkpoint(checkpoint)

Carga la información de los puntos de control para reanudar el entrenamiento a partir de un paso específico.

punto de control (dict)

Diccionario de puntos de control que contiene la clave 'global_step'

get_underlying_data_module()

Obtenga el módulo de datos empaquetado subyacente.

Devoluciones: pl. LightningDataModule — El módulo de datos original que estaba empaquetado

state_dict()

Obtenga el diccionario de estados del MMAP DataModule para los puntos de control.

Devuelve: dict — Diccionario que contiene las longitudes de los cargadores de datos en caché

load_state_dict(state_dict)

Cargue el diccionario de estados para restaurar el estado del MMAP. DataModule

state_dict(dictado)

Diccionario estatal para cargar

Propiedades

data_sampler

Exponga el muestreador de datos del módulo de datos subyacente al NeMo marco.

Devuelve: objeto o ninguno: el muestreador de datos del módulo de datos subyacente

Ejemplo

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)

Notas

  • El contenedor delega la mayor parte del acceso a los atributos al módulo de datos subyacente mediante __getattr__

  • Solo los rangos de carga de datos realmente inicializan y usan el módulo de datos subyacente; otros rangos usan cargadores de datos falsos

  • Las longitudes de los cargadores de datos en caché se mantienen para optimizar el rendimiento durante la reanudación del entrenamiento