Accelerate documentation
Funciones y clases de utilidad
Funciones y clases de utilidad
A continuación se muestran diversas funciones de utilidad que proporciona 🤗 Accelerate, clasificadas por caso de uso.
Constantes
Constantes utilizadas en todo 🤗 Accelerate como referencia
Los siguientes son constantes utilizadas al emplear Accelerator.save_state()
utils.MODEL_NAME: "pytorch_model" utils.OPTIMIZER_NAME: "optimizer" utils.RNG_STATE_NAME: "random_states" utils.SCALER_NAME: "scaler.pt utils.SCHEDULER_NAME: "scheduler
Los siguientes son constantes utilizadas al emplear Accelerator.save_model()
utils.WEIGHTS_NAME: "pytorch_model.bin" utils.SAFE_WEIGHTS_NAME: "model.safetensors" utils.WEIGHTS_INDEX_NAME: "pytorch_model.bin.index.json" utils.SAFE_WEIGHTS_INDEX_NAME: "model.safetensors.index.json"
Clases de datos
Estas son dataclasses básicas que se utilizan en todo 🤗 Accelerate y pueden pasarse como parámetros.
Independiente
Estas son dataclasses independientes que se utilizan para comprobaciones, como el tipo de sistema distribuido que se está utilizando
Representa un tipo de entorno de cálculo.
Valores:
- LOCAL_MACHINE — hardware de clúster privado/personalizado.
- AMAZON_SAGEMAKER — Amazon SageMaker como entorno de cálculo.
Representa un tipo de entorno distribuido.
Valores:
- NO — No es un entorno distribuido, solo un proceso único.
- MULTI_CPU — Distribuido en varios nodos de CPU.
- MULTI_GPU — Distribuido en varias GPU.
- MULTI_MLU — Distribuido en varias MLU.
- MULTI_SDAA — Distribuido en múltiples SDAAs.
- MULTI_MUSA — Distribuido en múltiples MUSAs.
- MULTI_NPU — Distribuido en múltiples NPU.
- MULTI_XPU — Distribuido en varios XPUs.
- MULTI_HPU — Distribuido en varios HPU.
- MULTI_NEURON — Distribuido en varios núcleos Neuron.
- DEEPSPEED — Uso de DeepSpeed.
- FSDP — Uso de Fully Sharded Data Parallelism (FSDP).
- XLA — Uso de TorchXLA.
- MEGATRON_LM — Uso de Megatron-LM.
Representa un backend de dynamo (consulte https://pytorch.org/docs/stable/torch.compiler.html).
Valores:
- NO — No utilices torch dynamo.
- EAGER — Utiliza PyTorch para ejecutar el GraphModule extraído. Esto resulta bastante útil para depurar problemas de TorchDynamo.
- AOT_EAGER — Utiliza AotAutograd sin compilador, es decir, solo usa PyTorch eager para los grafos de forward y backward extraídos por AotAutograd. Esto es útil para depurar y es poco probable que ofrezca mejoras de velocidad.
- INDUCTOR — Utiliza el backend TorchInductor con AotAutograd y cudagraphs aprovechando los kernels de Triton generados por código. Leer más
- AOT_TS_NVFUSER — nvFuser con AotAutograd/TorchScript. Más información
- NVPRIMS_NVFUSER — nvFuser con PrimTorch. Más información
- CUDAGRAPHS — cudagraphs con AotAutograd. Leer más
- OFI — Utiliza Torchscript optimize_for_inference. Solo para inferencia. Más información
- FX2TRT — Utiliza Nvidia TensorRT para optimizaciones de inferencia. Solo inferencia. Leer más
- ONNXRT — Utiliza ONNXRT para la inferencia en CPU/GPU. Solo inferencia. Leer más
- TENSORRT — Utiliza ONNXRT para ejecutar TensorRT con fines de optimización de inferencia. Más información
- AOT_TORCHXLA_TRACE_ONCE — Utiliza Pytorch/XLA con la optimización de TorchDynamo, para el entrenamiento. Más información
- TORCHXLA_TRACE_ONCE — Utiliza Pytorch/XLA con la optimización de TorchDynamo, para inferencia. Más información
- TVM — Utiliza Apache TVM para optimizaciones de inferencia. Leer más
- HPU_BACKEND — Utiliza el backend HPU para optimizaciones de inferencia.
- NEURON — Utiliza el backend AWS Neuron para Trainium/Inferentia.
Representa un tipo de rastreador de experimentos admitido
Valores:
- TODOS — todos los trackers disponibles en el entorno que son compatibles
- TENSORBOARD — TensorBoard como rastreador de experimentos
- WANDB — wandb como rastreador de experimentos
- TRACKIO — trackio como registrador de experimentos
- COMETML — comet_ml como rastreador de experimentos
- MLFLOW — mlflow como rastreador de experimentos
- CLEARML — clearml como registrador de experimentos
- DVCLIVE — dvclive como rastreador de experimentos
- SWANLAB — swanlab como rastreador de experimentos
Representa un tipo de precisión utilizado en valores de punto flotante
Valores:
- NO — usando precisión completa (FP32)
- FP16 — usando media precisión
- BF16 — usando precisión de coma flotante cerebral
Representa un tipo de entorno distribuido.
Valores:
- NO — No es un entorno distribuido, solo un proceso único.
- DATA_PARALLEL — usando la paralelización distribuida de datos de sagemaker.
- MODEL_PARALLEL — uso de la paralelización distribuida de modelos de sagemaker.
Kwargs
Estos son argumentos configurables para interacciones específicas en todo el ecosistema de PyTorch que Accelerate gestiona internamente.
clase accelerate.AutocastKwargs
< source >( enabled: bool = Truecache_enabled: bool | None = None )
Use este objeto en su Accelerator para personalizar el comportamiento de torch.autocast. Consulte la
documentación de este context manager para obtener más
información sobre cada argumento.
clase accelerate.DistributedDataParallelKwargs
< source >( dim: int = 0broadcast_buffers: bool = Truebucket_cap_mb: int = 25find_unused_parameters: bool = Falsecheck_reduction: bool = Falsegradient_as_bucket_view: bool = Falsestatic_graph: bool = Falsecomm_hook: DDPCommunicationHookType = <DDPCommunicationHookType.NO: 'no'>comm_wrapper: typing.Literal[<DDPCommunicationHookType.NO: 'no'>, <DDPCommunicationHookType.FP16: 'fp16'>, <DDPCommunicationHookType.BF16: 'bf16'>] = <DDPCommunicationHookType.NO: 'no'>comm_state_option: dict = <factory> )
Use este objeto en su Accelerator para personalizar cómo se envuelve su modelo en un torch.nn.parallel.DistributedDataParallel. Consulte la documentación de este wrapper para obtener más información sobre cada argumento.
clase accelerate.GradScalerKwargs
< source >( init_scale: float = 65536.0growth_factor: float = 2.0backoff_factor: float = 0.5growth_interval: int = 2000enabled: bool = True )
Use este objeto en su Accelerator para personalizar el comportamiento de la precisión mixta, específicamente cómo se crea el torch.amp.GradScaler o torch.cuda.amp.GradScaler que se utiliza. Consulte la documentación de este scaler para obtener más información sobre cada argumento.
clase accelerate.InitProcessGroupKwargs
< source >( backend: str | None = 'nccl'init_method: str | None = Nonetimeout: datetime.timedelta | None = None )
Use este objeto en su Accelerator para personalizar la inicialización de los procesos distribuidos. Consulte la documentación de este método para obtener más información sobre cada argumento.
Nota: Si timeout se establece en None, el valor predeterminado se basará en cómo se configure backend.
Mixin interno que implementa un método to_kwargs() para un dataclass.
Devuelve un diccionario que contiene los atributos con valores diferentes de los valores predeterminados de esta clase.
Plugins
Estos son complementos que pueden pasarse al objeto Accelerator. Aunque se definen en otras partes de la documentación, por comodidad, todos están disponibles para verlos aquí:
clase accelerate.DeepSpeedPlugin
< source >( hf_ds_config: Any = Nonegradient_accumulation_steps: int = Nonegradient_clipping: float = Nonezero_stage: int = Noneis_train_batch_min: bool = Trueoffload_optimizer_device: str = Noneoffload_param_device: str = Noneoffload_optimizer_nvme_path: str = Noneoffload_param_nvme_path: str = Nonezero3_init_flag: bool = Nonezero3_save_16bit_model: bool = Nonetransformer_moe_cls_names: str = None )
Parámetros
- hf_ds_config (
Any, por defectoNone) — Ruta al archivo de configuración de DeepSpeed o un diccionario o un objeto de la claseaccelerate.utils.deepspeed.HfDeepSpeedConfig. - gradient_accumulation_steps (
int, por defectoNone) — Número de pasos para acumular gradientes antes de actualizar los estados del optimizador. Si no se establece, se usará el valor deAcceleratordirectamente. - gradient_clipping (
float, por defectoNone) — Activa el recorte de gradientes con el valor indicado. - zero_stage (
int, por defectoNone) — Las opciones posibles son 0, 1, 2, 3. El valor por defecto se tomará de la variable de entorno. - is_train_batch_min (
bool, por defectoTrue) — Si se especifican tanto los dataloaders de entrenamiento como de evaluación, este parámetro determinará eltrain_batch_size. - offload_optimizer_device (
str, por defectoNone) — Las opciones posibles son none|cpu|nvme. Solo es aplicable con ZeRO Stages 2 y 3. - offload_param_device (
str, por defectoNone) — Las opciones posibles son none|cpu|nvme. Solo es aplicable con ZeRO Stage 3. - offload_optimizer_nvme_path (
str, por defectoNone) — Las opciones posibles son /nvme|/local_nvme. Solo es aplicable con ZeRO Stage 3. - offload_param_nvme_path (
str, por defectoNone) — Las opciones posibles son /nvme|/local_nvme. Solo es aplicable con ZeRO Stage 3. - zero3_init_flag (
bool, por defectoNone) — Indica si se debe guardar el modelo de 16 bits. Solo es aplicable con ZeRO Stage-3. - zero3_save_16bit_model (
bool, por defectoNone) — Indica si se debe guardar el modelo de 16 bits. Solo es aplicable con ZeRO Stage-3. - transformer_moe_cls_names (
str, por defectoNone) — Lista separada por comas de nombres de clases de capas MoE de Transformers (distingue entre mayúsculas y minúsculas). Por ejemplo,MixtralSparseMoeBlock,Qwen2MoeSparseMoeBlock,JetMoEAttention,JetMoEBlock, etc.
Este plugin se utiliza para integrar DeepSpeed.
deepspeed_config_process
< source >( prefix = ''mismatches = Noneconfig = Nonemust_match = True**kwargs )
Procesa la configuración de DeepSpeed con los valores de kwargs.
Establece el HfDeepSpeedWeakref para que utilice la configuración actual del plugin de deepspeed
clase accelerate.FullyShardedDataParallelPlugin
< source >( fsdp_version: int = Nonesharding_strategy: str | ForwardRef('torch.distributed.fsdp.ShardingStrategy') = Nonereshard_after_forward: str | ForwardRef('torch.distributed.fsdp.ShardingStrategy') | bool = Nonebackward_prefetch: str | ForwardRef('torch.distributed.fsdp.BackwardPrefetch') | None = Nonemixed_precision_policy: dict | str | ForwardRef('torch.distributed.fsdp.MixedPrecision') | ForwardRef('torch.distributed.fsdp.MixedPrecisionPolicy') | None = Noneauto_wrap_policy: typing.Callable | typing.Literal['transformer_based_wrap', 'size_based_wrap', 'no_wrap'] | None = Nonecpu_offload: bool | ForwardRef('torch.distributed.fsdp.CPUOffload') | ForwardRef('torch.distributed.fsdp.CPUOffloadPolicy') = Noneignored_modules: collections.abc.Iterable[torch.nn.Module] | str | None = Nonestate_dict_type: str | ForwardRef('torch.distributed.fsdp.StateDictType') = Nonestate_dict_config: ForwardRef('torch.distributed.fsdp.FullStateDictConfig') | ForwardRef('torch.distributed.fsdp.ShardedStateDictConfig') | None = Noneoptim_state_dict_config: ForwardRef('torch.distributed.fsdp.FullOptimStateDictConfig') | ForwardRef('torch.distributed.fsdp.ShardedOptimStateDictConfig') | None = Nonelimit_all_gathers: bool = Trueuse_orig_params: bool | None = Noneparam_init_fn: typing.Callable[[torch.nn.Module], NoneType] | None = Nonesync_module_states: bool | None = Noneforward_prefetch: bool = Noneactivation_checkpointing: bool = Noneactivation_checkpointing_offload: bool = Nonecpu_ram_efficient_loading: bool = Nonetransformer_cls_names_to_wrap: list[str] | None = Nonemin_num_params: int | None = None )
Parámetros
- fsdp_version (
int, por defecto1) — La versión de FSDP a utilizar. Por defecto es 1. Si se establece en 2, el launcher espera que la configuración esté convertida al formato FSDP2. - sharding_strategy (
Union[str, torch.distributed.fsdp.ShardingStrategy], por defecto'FULL_SHARD') — Estrategia de particionamiento a utilizar. Debe ser unastro una instancia detorch.distributed.fsdp.fully_sharded_data_parallel.ShardingStrategy. Está en desuso a favor dereshard_after_forward. - reshard_after_forward (
Union[str, torch.distributed.fsdp.ShardingStrategy, bool], por defecto'FULL_SHARD'parafsdp_version=1yTrueparafsdp_version=2) — Estrategia de sharding a utilizar. Debe ser un bool sifsdp_versionestá establecido en 2, en caso contrario, unstro una instancia detorch.distributed.fsdp.fully_sharded_data_parallel.ShardingStrategy. - backward_prefetch (
Union[str, torch.distributed.fsdp.BackwardPrefetch], por defecto'NO_PREFETCH') — Estrategia de prefetch en la fase de retropropagación a utilizar. Debe ser unastro una instancia detorch.distributed.fsdp.fully_sharded_data_parallel.BackwardPrefetch. - mixed_precision_policy (
Optional[Union[dict, str, torch.distributed.fsdp.MixedPrecision, torch.distributed.fsdp.MixedPrecisionPolicy]], por defectoNone) — Una configuración para habilitar el entrenamiento con precisión mixta mediante FullyShardedDataParallel. Si se pasa undict, debe tener las siguientes claves:param_dtype,reduce_dtypeybuffer_dtype. Puede ser una instancia detorch.distributed.fsdp.MixedPrecisionPolicysifsdp_versionestá establecido en 2. Si se pasa unstr, debe ser uno de los siguientes valores: fp8, fp16, bf16, fp32, y se utiliza para establecerparam_dtype,reduce_dtypeybuffer_dtype. - auto_wrap_policy (
Optional(Union[Callable, Literal["transformer_based_wrap", "size_based_wrap", "no_wrap"]]), defaults toNO_WRAP) -- A callable or string specifying a policy to recursively wrap layers with FSDP. If a string, it must be one oftransformer_based_wrap,size_based_wrap, orno_wrap. Seetorch.distributed.fsdp.wrap.size_based_wrap_policy` for a direction on what it should look like. - cpu_offload (
Union[bool, torch.distributed.fsdp.CPUOffload, torch.distributed.fsdp.CPUOffloadPolicy], por defectoFalse) — Si se deben descargar los parámetros a la CPU. Debe ser unboolo una instancia detorch.distributed.fsdp.fully_sharded_data_parallel.CPUOffloadotorch.distributed.fsdp.fully_sharded_data_parallel.CPUOffloadPolicysifsdp_versionestá establecido en 2. - ignored_modules (
Optional[Union[Iterable[torch.nn.Module], str]], por defectoNone) — Una lista de módulos que se ignorarán al envolver con FSDP. Al pasar una cadena de caracteres, los módulos se coincidirán por nombre usando fullmatch de regex. Sifsdp_versionestá establecido en 2, los módulos se convierten en parámetros y se utilizan. - state_dict_type (
Union[str, torch.distributed.fsdp.StateDictType], por defecto'FULL_STATE_DICT') — Tipo de state dict a utilizar. Si es una cadena, debe ser una defull_state_dict,local_state_dictosharded_state_dict. - state_dict_config (
Optional[Union[torch.distributed.fsdp.FullStateDictConfig, torch.distributed.fsdp.ShardedStateDictConfig], por defectoNone) — Configuración del state dict a utilizar. Se determina en función destate_dict_typesi no se proporciona. - optim_state_dict_config (
Optional[Union[torch.distributed.fsdp.FullOptimStateDictConfig, torch.distributed.fsdp.ShardedOptimStateDictConfig], por defectoNone) — Configuración del estado del optimizador a utilizar. Se determina en función destate_dict_typesi no se proporciona. - limit_all_gathers (
bool, por defectoTrue) — Si FSDP debe sincronizar explícitamente el hilo de CPU para evitar demasiados all-gathers en curso. Este bool solo afecta a las estrategias fragmentadas que programan all-gathers. Habilitar esto puede ayudar a reducir el número de reintentos de malloc de CUDA. - use_orig_params (
bool, por defectoFalse) — Si se deben usar los parámetros originales para el optimizador. - param_init_fn (
Optional[Callable[[torch.nn.Module], None], por defectoNone) — UnCallable[torch.nn.Module] -> Noneque especifica cómo deben inicializarse en un dispositivo real los módulos que actualmente están en el dispositivo meta. Solo es aplicable cuandosync_module_statesesTrue. Por defecto es unlambdaque llama ato_emptyen el módulo. - sync_module_states (
bool, por defectoFalse) — Si cada unidad FSDP envuelta individualmente debe difundir los parámetros del módulo desde el rank 0 para garantizar que sean los mismos en todos los ranks después de la inicialización. Por defecto esFalsea menos quecpu_ram_efficient_loadingseaTrue, en cuyo caso se habilitará forzosamente. - forward_prefetch (
bool, por defectoFalse) — Si FSDP debe preobtener explícitamente el próximo all-gather mientras se ejecuta en la pasada de adelante. Úsalo solo con grafos estáticos. - activation_checkpointing (
bool, por defectoFalse) — Una técnica para reducir el uso de memoria eliminando las activaciones de ciertas capas y recalcándolas durante una paso de retropropagación. En la práctica, esto intercambia tiempo de cálculo adicional por un menor uso de memoria. - cpu_ram_efficient_loading (
bool, por defectoNone) — Si es True, solo el primer proceso carga el checkpoint del modelo preentrenado, mientras que todos los demás procesos tienen pesos vacíos. Solo aplicable para Transformers. Al usar esto,sync_module_statesdebe serTrue. - transformer_cls_names_to_wrap (
Optional[List[str]], por defectoNone) — Una lista de nombres de clases de capas de transformer para envolver. Solo aplicable cuandoauto_wrap_policyestransformer_based_wrap. - min_num_params (
Optional[int], por defectoNone) — El número mínimo de parámetros que debe tener un módulo para ser envuelto. Solo aplicable cuandoauto_wrap_policyessize_based_wrap.
Este plugin se utiliza para habilitar el paralelismo de datos totalmente fragmentado.
Dado model, crea una auto_wrap_policy basada en la política pasada y si podemos usar transformer_cls_to_wrap
Establece la política de precisión mixta para FSDP
Establece la configuración del state dict en función del StateDictType.
Valida la política de precisión mixta, abstraída para no importar las dependencias si no son necesarias.
clase accelerate.utils.GradientAccumulationPlugin
< source >( num_steps: int = Noneadjust_scheduler: bool = Truesync_with_dataloader: bool = Truesync_each_batch: bool = False )
Parámetros
- num_steps (
int) — El número de pasos para acumular gradientes. - adjust_scheduler (
bool, opcional, valor predeterminadoTrue) — Si se deben ajustar los pasos del programador para tener en cuenta el número de pasos acumulados. Debe serTruesi el programador utilizado no se ajustó para la acumulación de gradientes. - sync_with_dataloader (
bool, opcional, valor predeterminadoTrue) — Si se debe sincronizar la configuración de los gradientos al llegar al final del dataloader. - sync_each_batch (
bool, opcional) — Si se sincroniza la configuración de los gradientes en cada lote de datos. Establecerlo enTruepuede reducir los requisitos de memoria al usar acumulación de gradientes con entrenamiento distribuido, a costa de la velocidad.
Un plugin para configurar el comportamiento de la acumulación de gradientes. Solo puede pasar uno de gradient_accumulation_plugin o gradient_accumulation_steps a Accelerator. Pasar ambos provoca un error.
clase accelerate.utils.MegatronLMPlugin
< source >( tp_degree: int = Nonepp_degree: int = Noneuse_custom_fsdp: bool = Noneoverlap_cpu_optimizer_d2h_h2d: bool = Noneno_load_optim: bool = Noneeod_mask_loss: bool = Noneno_save_optim: bool = Noneoptimizer_cpu_offload: bool = Noneuse_precision_aware_optimizer: bool = Nonedecoder_last_pipeline_num_layers: int = Nonerecompute_granularity: str = Nonerecompute_method: str = Nonerecompute_num_layers: int = Noneattention_backend: bool = Noneexpert_model_parallel_size: int = Nonecontext_parallel_size: int = Noneattention_dropout: float = Nonehidden_dropout: float = Noneattention_softmax_in_fp32: bool = Noneexpert_tensor_parallel_size: int = Nonecalculate_per_token_loss: bool = Noneuse_rotary_position_embeddings: bool = Nonenum_micro_batches: int = Nonegradient_clipping: float = Nonesequence_parallelism: bool = Nonerecompute_activations: bool = Noneuse_distributed_optimizer: bool = Nonepipeline_model_parallel_split_rank: int = Nonenum_layers_per_virtual_pipeline_stage: int = Noneis_train_batch_min: str = Truetrain_iters: int = Nonetrain_samples: int = Noneweight_decay_incr_style: str = 'constant'start_weight_decay: float = Noneend_weight_decay: float = Nonelr_decay_style: str = 'linear'lr_decay_iters: int = Nonelr_decay_samples: int = Nonelr_warmup_iters: int = Nonelr_warmup_samples: int = Nonelr_warmup_fraction: float = Nonemin_lr: float = 0consumed_samples: list = Noneno_wd_decay_cond: typing.Callable | None = Nonescale_lr_cond: typing.Callable | None = Nonelr_mult: float = 1.0megatron_dataset_flag: bool = Falseseq_length: int = Noneencoder_seq_length: int = Nonedecoder_seq_length: int = Nonetensorboard_dir: str = Noneset_all_logging_options: bool = Falseeval_iters: int = 100eval_interval: int = 1000return_logits: bool = Falsecustom_train_step_class: typing.Any | None = Nonecustom_train_step_kwargs: dict[str, typing.Any] | None = Nonecustom_model_provider_function: typing.Callable | None = Nonecustom_prepare_model_function: typing.Callable | None = Nonecustom_megatron_datasets_provider_function: typing.Callable | None = Nonecustom_get_batch_function: typing.Callable | None = Nonecustom_loss_function: typing.Callable | None = Noneother_megatron_args: dict[str, typing.Any] | None = None )
Parámetros
- tp_degree (
int, por defectoNone) — Grado de paralelismo de tensores. - pp_degree (
int, por defectoNone) — Grado de paralelismo de pipeline. - num_micro_batches (
int, por defectoNone) — Número de micro-lotes. - gradient_clipping (
float, por defectoNone) — Valor de recorte de gradientes basado en la norma L2 global (0 para desactivarlo). - sequence_parallelism (
bool, por defectoNone) — Habilita el paralelismo de secuencia. - recompute_activations (
bool, por defectoNone) — Activa la recomputación selectiva de activaciones. - use_distributed_optimizer (
bool, por defectoNone) — Habilita el optimizador distribuido. - pipeline_model_parallel_split_rank (
int, por defectoNone) — Rango donde se deben dividir el codificador y el decodificador. - num_layers_per_virtual_pipeline_stage (
int, por defectoNone) — Número de capas por etapa de pipeline virtual. - is_train_batch_min (
str, por defectoTrue) — Si se especifican tanto los dataloaders de entrenamiento como de evaluación, este parámetro determinará elmicro_batch_size. - train_iters (
int, por defectoNone) — Número total de muestras para entrenar en todas las ejecuciones de entrenamiento. Tenga en cuenta que debe proporcionar train-iters o train-samples al usarMegatronLMDummyScheduler. - train_samples (
int, por defectoNone) — Número total de muestras para entrenar en todas las ejecuciones de entrenamiento. Tenga en cuenta que debe proporcionar train-iters o train-samples al usarMegatronLMDummyScheduler. - weight_decay_incr_style (
str, por defecto'constant') — Función de incremento del decaimiento de peso. choices=[“constant”, “linear”, “cosine”]. - start_weight_decay (
float, por defectoNone) — Coeficiente inicial de decaimiento de pesos para la regularización L2. - end_weight_decay (
float, por defectoNone) — Coeficiente de decaimiento de peso al final de la ejecución para la regularización L2. - lr_decay_style (
str, por defecto'linear') — Función de decaimiento de la tasa de aprendizaje. choices=[‘constant’, ‘linear’, ‘cosine’]. - lr_decay_iters (
int, por defectoNone) — Número de iteraciones para el decaimiento de la tasa de aprendizaje. Si es None, por defecto toma el valor detrain_iters. - lr_decay_samples (
int, por defectoNone) — Número de muestras para el decaimiento de la tasa de aprendizaje. Si es None, por defecto toma el valor detrain_samples. - lr_warmup_iters (
int, por defectoNone) — Número de iteraciones para calentar linealmente la tasa de aprendizaje. - lr_warmup_samples (
int, por defectoNone) — Número de muestras sobre las que calentar linealmente la tasa de aprendizaje. - lr_warmup_fraction (
float, por defectoNone) — Fracción de lr-warmup-(iteraciones/muestras) sobre la que calentar linealmente la tasa de aprendizaje. - min_lr (
float, por defecto0) — Valor mínimo para la tasa de aprendizaje. El programador recorta los valores por debajo de este umbral. - consumed_samples (
List, por defectoNone) — Número de muestras consumidas en el mismo orden que los dataloaders de la llamada aaccelerator.prepare. - no_wd_decay_cond (
Optional, por defectoNone) — Condición para desactivar el decaimiento de pesos. - scale_lr_cond (
Optional, por defectoNone) — Condición para escalar la tasa de aprendizaje. - lr_mult (
float, por defecto1.0) — Multiplicador de la tasa de aprendizaje. - megatron_dataset_flag (
bool, por defectoFalse) — Si el formato del conjunto de datos sigue el formato Indexed/Cached/MemoryMapped de Megatron-LM. - seq_length (
int, por defectoNone) — Longitud máxima de secuencia a procesar. - encoder_seq_length (
int, por defectoNone) — Longitud máxima de secuencia a procesar para el codificador. - decoder_seq_length (
int, por defectoNone) — Longitud máxima de secuencia a procesar para el decodificador. - tensorboard_dir (
str, por defectoNone) — Ruta para guardar los registros de tensorboard. - set_all_logging_options (
bool, por defectoFalse) — Si se deben establecer todas las opciones de registro. - eval_iters (
int, por defecto100) — Número de iteraciones para ejecutar la validación/prueba de evaluación. - eval_interval (
int, por defecto1000) — Intervalo entre la ejecución de la evaluación en el conjunto de validación. - return_logits (
bool, por defectoFalse) — Si se deben devolver los logits del modelo. - custom_train_step_class (
Optional, por defectoNone) — Clase de paso de entrenamiento personalizada. - custom_train_step_kwargs (
Optional, por defectoNone) — Argumentos personalizados para el paso de entrenamiento. - custom_model_provider_function (
Optional, por defectoNone) — Función de proveedor de modelo personalizada. - custom_prepare_model_function (
Optional, por defectoNone) — Función personalizada para preparar el modelo. - custom_megatron_datasets_provider_function (
Optional, por defectoNone) — Función de proveedor de conjuntos de datos de entrenamiento, validación y prueba de megatron personalizada. - custom_get_batch_function (
Optional, por defectoNone) — Función personalizada para obtener el lote. - custom_loss_function (
Optional, por defectoNone) — Función de pérdida personalizada. - other_megatron_args (
Optional, por defectoNone) — Otros argumentos de Megatron-LM. Consulte Megatron-LM.
Plugin para Megatron-LM que habilita el paralelismo de tensor, pipeline, secuencia y datos. También habilita la recomputación selectiva de activaciones y kernels fusionados optimizados.
clase accelerate.utils.TorchDynamoPlugin
< source >( backend: DynamoBackend = Nonemode: str = Nonefullgraph: bool = Nonedynamic: bool = Noneoptions: Any = Nonedisable: bool = Falseuse_regional_compilation: bool = None )
Parámetros
- backend (
DynamoBackend, por defectoNone) — Un backend de Dynamo válido. Consulte https://pytorch.org/docs/stable/torch.compiler.html para más detalles. - mode (
str, por defectoNone) — Las opciones posibles son ‘default’, ‘reduce-overhead’ o ‘max-autotune’. - fullgraph (
bool, por defectoNone) — Si se permite dividir el modelo en varios subgrafos. - dynamic (
bool, por defectoNone) — Si se debe usar una forma dinámica para el trazado. - options (
Any, por defectoNone) — Un diccionario de opciones para pasar al backend. - disable (
bool, por defectoFalse) — Convierte torch.compile() en una operación sin efecto para pruebas - use_regional_compilation (
bool, por defectoNone) — Úsela para reducir el tiempo de compilación en frío de torch.compile() al apuntar a bloques repetidos de la misma clase y compilarlos de forma secuencial para aprovechar la caché del compilador. Por ejemplo, enGPT2LMHeadModel, el bloque/clase repetido esGPT2Block, y se puede acceder a él comomodel.transformer.h[0]. El resto del modelo (p. ej. model.lm_head) se compila por separado.
Este plugin se utiliza para compilar un modelo con PyTorch 2.0
Configuraciones
Estas son clases que se pueden configurar y pasar a la integración correspondiente
clase accelerate.utils.BnbQuantizationConfig
< source >( load_in_8bit: bool = Falsellm_int8_threshold: float = 6.0load_in_4bit: bool = Falsebnb_4bit_quant_type: str = 'fp4'bnb_4bit_use_double_quant: bool = Falsebnb_4bit_compute_dtype: str = 'fp16'torch_dtype: dtype = Noneskip_modules: list = Nonekeep_in_fp32_modules: list = None )
Parámetros
- load_in_8bit (
bool, por defectoFalse) — Habilita la cuantización de 8 bits. - llm_int8_threshold (
float, por defecto6.0) — Valor del umbral del outliner. Solo es relevante cuandoload_in_8bit=True. - load_in_4bit (
bool, por defectoFalse) — Habilita la cuantización de 4 bits. - bnb_4bit_quant_type (
str, por defectofp4) — Establece el tipo de datos de cuantización en las capasbnb.nn.Linear4Bit. Las opciones son {‘fp4’,‘np4’}. - bnb_4bit_use_double_quant (
bool, por defectoFalse) — Activa la cuantización anidada, donde las constantes de cuantización de la primera cuantización se cuantizan de nuevo. - bnb_4bit_compute_dtype (
bool, por defectofp16) — Esto establece el tipo de cálculo, que puede ser diferente al tipo de entrada. Por ejemplo, las entradas pueden ser fp32, pero el cálculo puede configurarse en bf16 para obtener mejoras de velocidad. Las opciones son {‘fp32’,‘fp16’,‘bf16’}. - torch_dtype (
torch.dtype, por defectoNone) — Esto establece el dtype de las capas restantes no cuantizadas. La bibliotecabitsandbytessugiere establecer el valor entorch.float16para modelos de 8 bits y usar el mismo dtype que el dtype de cálculo para modelos de 4 bits. - skip_modules (
List[str], por defectoNone) — Una lista explícita de los módulos que no se cuantizan. El dtype de estos módulos serátorch_dtype. - keep_in_fp32_modules (
List, por defectoNone) — Una lista explícita de los módulos que no cuantizamos. Los mantenemos entorch.float32.
Un plugin para habilitar la cuantización de 4 bits y 8 bits de BitsAndBytes
clase accelerate.DataLoaderConfiguration
< source >( split_batches: bool = Falsedispatch_batches: bool = Noneeven_batches: bool = Trueuse_seedable_sampler: bool = Falsedata_seed: int = Nonenon_blocking: bool = Falseuse_stateful_dataloader: bool = False )
Parámetros
- split_batches (
bool, por defectoFalse) — Indica si el acelerador debe dividir los lotes generados por los dataloaders entre los dispositivos. Si esTrue, el tamaño de lote real utilizado será el mismo en cualquier tipo de proceso distribuido, pero debe ser un múltiplo exacto denum_processesque estés utilizando. Si esFalse, el tamaño de lote real utilizado será el establecido en tu script multiplicado por el número de procesos. - dispatch_batches (
bool, por defectoNone) — Si se establece enTrue, el dataloader preparado por el Accelerator solo se itera en el proceso principal y luego los lotes se dividen y se difunden a cada proceso. Por defecto seráTruepara unDataLoadercuyo conjunto de datos subyacente sea unIterableDataset,Falseen caso contrario. - even_batches (
bool, por defectoTrue) — Si se establece enTrue, en los casos en que el tamaño total del lote en todos los procesos no divide exactamente al conjunto de datos, se duplicarán las muestras del inicio del conjunto de datos para que el lote pueda dividirse equitativamente entre todos los trabajadores. - use_seedable_sampler (
bool, por defectoFalse) — Indica si se debe utilizar un muestreador aleatorio totalmente sembrable (data_loader.SeedableRandomSampler). Garantiza que los resultados del entrenamiento sean totalmente reproducibles mediante una técnica de muestreo diferente. Si bien los resultados de una semilla a otra pueden variar, en promedio las diferencias son despreciables al utilizar varias semillas diferentes para comparar. También debe ejecutarse junto con set_seed() para obtener los mejores resultados. - data_seed (
int, por defectoNone) — La semilla que se utilizará para el generador subyacente al usaruse_seedable_sampler. Si esNone, el generador utilizará la semilla predeterminada actual de torch. - non_blocking (
bool, por defectoFalse) — Si se establece enTrue, el dataloader preparado por el Accelerator utilizará transferencias no bloqueantes de host a dispositivo, lo que permite una mejor superposición entre la comunicación del dataloader y la computación. Se recomienda que el dataloader preparado tengapin_memoryestablecido enTruepara que funcione correctamente. - use_stateful_dataloader (
bool, por defectoFalse) — Si se establece enTrue, el dataloader preparado por el Accelerator estará respaldado por torchdata.StatefulDataLoader. Esto requiere que esté instalada la versión 0.8.0 o superior detorchdataque admita StatefulDataLoader.
Configuración para los elementos relacionados con el dataloader al llamar a accelerator.prepare.
clase accelerate.utils.ProjectConfiguration
< source >( project_dir: str = Nonelogging_dir: str = Noneautomatic_checkpoint_naming: bool = Falsetotal_limit: int = Noneiteration: int = 0save_on_each_node: bool = False )
Parámetros
- project_dir (
str, por defectoNone) — Una ruta a un directorio para almacenar datos. - logging_dir (
str, por defectoNone) — Una ruta a un directorio para almacenar registros de registradores compatibles localmente. Si es None, por defecto esproject_dir. - automatic_checkpoint_naming (
bool, por defectoFalse) — Si los estados guardados deben nombrarse automáticamente de forma iterativa. - total_limit (
int, por defectoNone) — El número máximo de estados guardados totales que se deben conservar. - iteration (
int, por defecto0) — La iteración de guardado actual. - save_on_each_node (
bool, por defectoFalse) — En el entrenamiento distribuido multinodo, si se guardan los modelos y puntos de control en cada nodo o solo en el principal.
Configuración del objeto Accelerator según las necesidades internas del proyecto.
Establece self.project_dir y self.logging_dir en los valores apropiados.
Variables de entorno
Estas son variables de entorno que se pueden habilitar para diferentes casos de uso
ACCELERATE_DEBUG_MODE(str): Si se ejecuta accelerate en modo de depuración. Más información disponible aquí.
Manipulación de datos y operaciones
Estas incluyen operaciones de datos que imitan las mismas operaciones de torch pero que pueden usarse en procesos distribuidos.
accelerate.utils.broadcast
< source >( tensorfrom_process: int = 0 )
Difunde recursivamente el tensor en una lista/tupla/diccionario anidado de tensors a todos los dispositivos.
accelerate.utils.broadcast_object_list
< source >( object_listfrom_process: int = 0 )
Difunda una lista de objetos serializables desde un proceso a los demás.
accelerate.utils.concatenate
< source >( datadim = 0 )
Concatena recursivamente los tensores en una lista/tupla/diccionario anidado de listas de tensores con la misma forma. Si solo hay un solo lote de datos, se devuelve tal cual.
accelerate.utils.convert_to_fp32
< source >( tensor )
Convierte recursivamente los elementos de listas/tuplas/diccionarios anidados de tensores en precisión FP16/BF16 a FP32.
accelerate.utils.gather
< source >( tensor )
Recolectar recursivamente un tensor en una lista/tupla/diccionario anidado de tensors desde todos los dispositivos.
accelerate.utils.gather_object
< source >( object: Any )
Recolectar recursivamente un objeto en una lista/tupla/diccionario anidado de objetos desde todos los dispositivos.
accelerate.utils.get_grad_scaler
< source >( distributed_type: DistributedType = None**kwargs )
Un helper genérico que inicializará la implementación correcta de GradScaler en función del entorno y la devolverá.
accelerate.utils.get_mixed_precision_context_manager
< source >( native_amp: bool = Falseautocast_kwargs: AutocastKwargs = None )
Devuelve un gestor de contexto para el autocast de precisión mixta
accelerate.utils.listify
< source >( data )
Encuentra recursivamente tensores en una lista/tupla/diccionario anidado y los convierte en una lista de números.
accelerate.utils.pad_across_processes
< source >( tensordim = 0pad_index = 0pad_first = False )
Parámetros
- tensor (lista/tupla/diccionario anidado de
torch.Tensor) — Los datos que se deben recopilar. - dim (
int, opcional, valor predeterminado 0) — La dimensión sobre la que se debe rellenar. - pad_index (
int, opcional, valor predeterminado 0) — El valor con el que se rellena. - pad_first (
bool, opcional, valor predeterminadoFalse) — Si se debe rellenar al principio o al final.
Rellena recursivamente los tensores en una lista/tupla/diccionario anidado de tensores de todos los dispositivos hasta el mismo tamaño para que puedan recopilarse de forma segura.
accelerate.utils.recursively_apply
< source >( funcdata*argstest_type = <function is_torch_tensor at 0x7fe7449bfed0>error_on_other_type = False**kwargs )
Parámetros
- func (
callable) — La función que se aplicará de forma recursiva. - data (lista/tupla/diccionario anidado de objetos aceptados por
test_type) — Los datos sobre los que aplicarfunc - *args —
Argumentos posicionales que se pasarán a
funccuando se aplique sobre los datos desempaquetados. - test_type (
Callable[[Any], bool], opcional, valor predeterminadois_torch_tensor) — El predicado que decide sifuncdebe aplicarse a un objeto hoja dado. - error_on_other_type (
bool, opcional, valor predeterminadoFalse) — Indica si se debe devolver un error o no si, después de desempaquetardata, se obtiene un objeto para el cualtest_typedevuelveFalse. Si esFalse, la función dejará dichos objetos sin cambios. - **kwargs (argumentos de palabra clave adicionales, opcional) —
Argumentos de palabra clave que se pasarán a
funccuando se aplique a los datos desempaquetados.
Aplicar recursivamente una función sobre una estructura de datos que es una lista/tupla/diccionario anidado de un tipo base dado.
accelerate.utils.reduce
< source >( tensorreduction = 'mean'scale = 1.0 )
Parámetros
- tensor (lista/tupla/diccionario anidado de
torch.Tensor) — Los datos a reducir. - reduction (
str, opcional, por defecto"mean") — Un método de reducción. Puede ser “mean”, “sum”, “max” o “none” - scale (
float, opcional) — Un valor de escala predeterminado que se aplica después de la reducción, válido solo en XLA.
Reducir recursivamente los tensores en una lista/tupla/diccionario anidado de listas de tensores en todos los procesos mediante la media de una operación dada.
accelerate.utils.send_to_device
< source >( tensordevicenon_blocking = Falseskip_keys = None )
Parámetros
- tensor (lista/tupla/diccionario anidado de
torch.Tensor) — Los datos que se enviarán a un dispositivo determinado. - device (
torch.device) — El dispositivo al que se enviarán los datos. - non_blocking (
bool, opcional, valor predeterminadoFalse) — Si esTrue, la transferencia al dispositivo se realiza de forma asíncrona, lo que permite superponer el movimiento de datos con el cálculo. Solo es efectivo cuando el dispositivo lo admite (p. ej., CUDA). - skip_keys (
stroList[str], opcional) — Una clave o lista de claves en un diccionariotensorcuyos valores no deben enviarse aldeviceindicado. Las entradas con estas claves se mantienen en su dispositivo original.
Envía recursivamente los elementos de una lista/tupla/diccionario anidado de tensores a un dispositivo dado.
accelerate.utils.slice_tensors
< source >( datatensor_sliceprocess_index = Nonenum_processes = None )
Toma recursivamente una porción de una lista/tupla/diccionario anidado de tensores.
Comprobaciones del entorno
Estas funcionalidades verifican el estado del entorno de trabajo actual, incluida información sobre el propio sistema operativo, lo que puede admitir y si se han instalado dependencias específicas.
Comprueba si bf16 es compatible, ignorando opcionalmente el TPU
Comprueba si el dispositivo MPS está disponible. La versión mínima requerida es 1.12.
Comprueba si torch_npu está instalado y, en su caso, si hay una NPU en el entorno
accelerate.utils.is_torch_version
< source >( operation: strversion: str )
Compara la versión actual de PyTorch con una referencia dada mediante una operación.
Comprueba si torch_xla está disponible. Para entrenar un trabajo nativo de pytorch en un entorno con torch xla instalado, establece
USE_TORCH_XLA en false.
Comprueba si la aceleración XPU está disponible a través de PyTorch estándar (>=2.7) y, potencialmente, si hay una XPU en el entorno
Manipulación del entorno
Un gestor de contexto que añadirá cada argumento de palabra clave pasado a os.environ y los eliminará al salir.
Convertirá los valores en kwargs a cadenas de texto y pondrá todas las claves en mayúsculas.
Un administrador de contexto que limpiará temporalmente las variables de entorno.
Cuando este contexto termina, las variables de entorno anteriores se restaurarán.
accelerate.commands.config.default.write_basic_config
< source >( mixed_precision = 'no'save_location: str = '/home/runner/.cache/huggingface/accelerate/default_config.yaml' )
Parámetros
- mixed_precision (
str, opcional, valor predeterminado “no”) — Mixed Precision a utilizar. Debe ser uno de “no”, “fp16” o “bf16” - save_location (
str, opcional, por defectodefault_json_config_file) — Ubicación de guardado personalizada opcional. Debe pasarse a--config_fileal usaraccelerate launch. La ubicación por defecto está dentro de la carpeta de caché de huggingface (~/.cache/huggingface), pero se puede sobrescribir estableciendo la variable de entornoHF_HOME, seguida deaccelerate/default_config.yaml.
Crea y guarda una configuración básica de clúster para usarla en una máquina local con varias GPU. También configurará la CPU si se trata de una máquina solo de CPU.
Al configurar 🤗 Accelerate por primera vez, en lugar de ejecutar accelerate config [~utils.write_basic_config] puede usarse como alternativa para una configuración rápida.
Asigna el proceso actual a un nodo NUMA específico. Es más eficiente idealmente cuando se tienen al menos 2 cpus por nodo.
Este resultado se almacena en caché entre llamadas. Si desea invalidarlo, use accelerate.utils.environment.override_numa_afifnity.
accelerate.utils.environment.override_numa_affinity
< source >( local_process_index: intverbose: bool | None = None )
Anula la afinidad NUMA establecida para el proceso actual. Esto es muy costoso y requiere recalcular la afinidad a establecer; idealmente, debería usar utils.environment.set_numa_affinity en su lugar.
Decorador para limpiar las variables de entorno de accelerate establecidas por la clase o función decorada.
En algunas circunstancias, la llamada a ciertas clases o funciones puede provocar que se establezcan variables de entorno de accelerate y no se limpien después. Por ejemplo, al llamar a:
TrainingArguments(fp16=True, …)
Se establecerá la siguiente variable de entorno:
ACCELERATE_MIXED_PRECISION=fp16
Esto puede afectar al código posterior, ya que la variable de entorno tiene prioridad sobre TrainingArguments(fp16=False). Esto es especialmente relevante para las pruebas unitarias, donde queremos evitar que las pruebas individuales tengan efectos secundarios entre sí. Decore la función de prueba unitaria o la clase completa con este decorador para asegurarse de que, después de cada prueba, las variables de entorno se limpien. Esto funciona tanto para unittest.TestCase como para clases normales (pytest); también funciona al decorar la clase padre.
Memoria
accelerate.find_executable_batch_size
< source >( function: callable | None = Nonestarting_batch_size: int = 128reduce_batch_size_fn: callable | None = None )
Parámetros
- function (
callable, optional) — Una función para envolver - starting_batch_size (
int, opcional) — El tamaño de lote que se intentará ajustar en la memoria - reduce_batch_size_fn (
callable, opcional) — Una función para determinar el nuevo tamaño de lote tras un error de memoria insuficiente. Si no se proporciona, el tamaño de lote se multiplica por 0,9 en cada fallo. La función no toma argumentos y debe devolver el nuevo tamaño de lote (reducido) como unint.
Un decorador básico que intentará ejecutar function. Si falla debido a excepciones relacionadas con la falta de memoria o con CUDNN, el tamaño del lote se multiplica por 0.9 y se pasa a function
function debe recibir un parámetro batch_size como su primer argumento.
Modelado
Estas utilidades se relacionan con la interacción con modelos de PyTorch
Calcula el tamaño total del modelo y su capa más grande
accelerate.utils.compute_module_sizes
< source >( model: Moduledtype: str | torch.device | None = Nonespecial_dtypes: dict[str, str | torch.device] | None = Nonebuffers_only: bool = False )
Calcule el tamaño de cada submódulo de un modelo dado.
accelerate.utils.extract_model_from_parallel
< source >( modelkeep_fp32_wrapper: bool = Truekeep_torch_compile: bool = Truerecursive: bool = False ) → torch.nn.Module
Parámetros
- model (
torch.nn.Module) — El modelo a extraer. - keep_fp32_wrapper (
bool, opcional) — Si se deben eliminar los hooks de precisión mixta del modelo. - keep_torch_compile (
bool, opcional) — Si se debe desenvolver el modelo compilado. - recursive (
bool, opcional, valor predeterminadoFalse) — Si se deben extraer recursivamente todos los casos demodule.moduledemodel, así como desenrollar recursivamente las subcapas hijas, no solo los contenedores distribuidos de nivel superior.
Devuelve
torch.nn.Module
El modelo extraído.
Extraer un modelo de sus contenedores distribuidos.
accelerate.utils.get_balanced_memory
< source >( model: Modulemax_memory: dict[int | str, int | str] | None = Noneno_split_module_classes: list[str] | None = Nonedtype: str | torch.dtype | None = Nonespecial_dtypes: dict[str, str | torch.device] | None = Nonelow_zero: bool = False )
Parámetros
- model (
torch.nn.Module) — El modelo a analizar. - max_memory (
Dict, opcional) — Un diccionario de identificador de dispositivo a memoria máxima. Si no se establece, se usará la memoria máxima disponible. Ejemplo:max_memory={0: "1GB"}. - no_split_module_classes (
List[str], opcional) — Una lista de nombres de clases de capas que nunca deben dividirse entre dispositivos (por ejemplo, cualquier capa que tenga una conexión residual). - dtype (
strotorch.dtype, opcional) — Si se proporciona, los pesos se convertirán a ese tipo al cargarlos. - special_dtypes (
Dict[str, Union[str, torch.device]], opcional) — Si se proporciona, dtypes especiales a considerar para algunos pesos específicos (anulará el dtype utilizado de forma predeterminada para todos los pesos). - low_zero (
bool, opcional) — Minimiza el número de pesos en la GPU 0, lo cual es conveniente cuando se utiliza para otras operaciones (como la función generate de Transformers).
Calcule un diccionario max_memory para infer_auto_device_map() que equilibre el uso de cada GPU disponible.
Todos los cálculos se realizan analizando los tamaños y los dtypes de los parámetros del modelo. Como resultado, el modelo puede estar en el dispositivo meta (como lo estaría si se inicializara dentro del administrador de contexto
init_empty_weights).
accelerate.utils.get_max_layer_size
< source >( modules: listmodule_sizes: dictno_split_module_classes: list ) → Tuple[int, List[str]]
Parámetros
- modules (
List[Tuple[str, torch.nn.Module]]) — La lista de módulos con nombre en los que queremos determinar el tamaño máximo de capa. - module_sizes (
Dict[str, int]) — Un diccionario que asigna a cada nombre de capa su tamaño (tal como lo generacompute_module_sizes). - no_split_module_classes (
List[str]) — Una lista de nombres de clases para capas que no queremos dividir.
Devuelve
Tuple[int, List[str]]
El tamaño máximo de una capa con la lista de nombres de capas que alcanzan ese tamaño máximo.
Función de utilidad que escaneará una lista de módulos nombrados y devolverá el tamaño máximo utilizado por una capa completa. La definición de una capa es:
- un módulo sin hijos directos (solo parámetros y búferes)
- un módulo cuyo nombre de clase está en la lista
no_split_module_classes
accelerate.infer_auto_device_map
< source >( model: Modulemax_memory: dict[int | str, int | str] | None = Noneno_split_module_classes: list[str] | None = Nonedtype: str | torch.dtype | None = Nonespecial_dtypes: dict[str, str | torch.dtype] | None = Noneverbose: bool = Falseclean_result: bool = Trueoffload_buffers: bool = Falsefallback_allocation: bool = False )
Parámetros
- model (
torch.nn.Module) — El modelo a analizar. - max_memory (
Dict, opcional) — Un diccionario de identificador de dispositivo a memoria máxima. Si no se establece, se usará la memoria máxima disponible. Ejemplo:max_memory={0: "1GB"}. - no_split_module_classes (
List[str], opcional) — Una lista de nombres de clases de capas que nunca deben dividirse entre dispositivos (por ejemplo, cualquier capa que tenga una conexión residual). - dtype (
strotorch.dtype, opcional) — Si se proporciona, los pesos se convertirán a ese tipo al cargarlos. - special_dtypes (
Dict[str, Union[str, torch.device]], opcional) — Si se proporciona, dtypes especiales a considerar para algunos pesos específicos (anulará el dtype utilizado de forma predeterminada para todos los pesos). - verbose (
bool, opcional, valor predeterminadoFalse) — Indica si se deben proporcionar declaraciones de depuración mientras la función construye el device_map. - clean_result (
bool, opcional, valor predeterminadoTrue) — Limpia el device_map resultante agrupando todos los submódulos que se colocan en el mismo dispositivo. - offload_buffers (
bool, opcional, valor predeterminadoFalse) — En las capas que se descargan en la CPU o en el disco duro, si se deben descargar o no los buffers además de los parámetros. - fallback_allocation (
bool, opcional, valor predeterminadoFalse) — Si la asignación regular falla, intenta asignar un módulo que quepa dentro del límite de tamaño usando BFS.
Calcule un mapa de dispositivos para un modelo dado dando prioridad a las GPUs, luego descargue en la CPU y finalmente descargue en el disco, de modo que:
- no superamos la memoria disponible de ninguna de las GPU.
- si se necesita descargar en la CPU, siempre queda espacio en la GPU 0 para volver a colocar la capa descargada en la CPU que tiene el mayor tamaño.
- si se necesita offload a la CPU, no superamos la RAM disponible en la CPU.
- si se necesita descargar en el disco, siempre queda espacio en la CPU para volver a colocar la capa descargada en el disco que tiene el mayor tamaño.
Todos los cálculos se realizan analizando los tamaños y los dtypes de los parámetros del modelo. Como resultado, el modelo puede estar en el dispositivo meta (como lo estaría si se inicializara dentro del administrador de contexto
init_empty_weights).
accelerate.load_checkpoint_in_model
< source >( model: Modulecheckpoint: str | os.PathLikedevice_map: dict[str, int | str | torch.device] | None = Noneoffload_folder: str | os.PathLike | None = Nonedtype: str | torch.dtype | None = Noneoffload_state_dict: bool = Falseoffload_buffers: bool = Falsekeep_in_fp32_modules: list[str] | None = Noneoffload_8bit_bnb: bool = Falsestrict: bool = Falsefull_state_dict: bool = Truebroadcast_from_rank0: bool = False )
Parámetros
- model (
torch.nn.Module) — El modelo en el que queremos cargar un punto de control. - checkpoint (
stroos.PathLike) — El checkpoint de la carpeta a cargar. Puede ser:- una ruta a un archivo que contiene un diccionario de estado completo del modelo
- una ruta a un archivo
.jsonque contiene el índice de un punto de control fragmentado - una ruta a una carpeta que contiene un archivo
.index.jsonúnico y los fragmentos de un punto de control. - una ruta a una carpeta que contenga un archivo pytorch_model.bin o model.safetensors único.
- device_map (
Dict[str, Union[int, str, torch.device]], opcional) — Un mapa que especifica dónde debe ir cada submódulo. No es necesario detallarlo para cada nombre de parámetro/buffer; una vez que un nombre de módulo está incluido, todos sus submódulos se enviarán al mismo dispositivo. - offload_folder (
stroos.PathLike, opcional) — Si eldevice_mapcontiene algún valor"disk", la carpeta donde se descargarán los pesos. - dtype (
strotorch.dtype, opcional) — Si se proporciona, los pesos se convertirán a ese tipo al cargarlos. - offload_state_dict (
bool, opcional, valor predeterminadoFalse) — SiTrue, se descargará temporalmente el state dict de CPU en el disco duro para evitar quedarse sin RAM de CPU si el peso del state dict de CPU + el fragmento más grande no cabe. - offload_buffers (
bool, opcional, valor predeterminadoFalse) — Si se incluyen o no los buffers en los pesos que se descargan en el disco. - keep_in_fp32_modules(
List[str], opcional) — Una lista de los módulos que se mantienen en el tipo de datostorch.float32. - offload_8bit_bnb (
bool, opcional) — Si se habilita o no el offload de módulos de 8 bits en cpu/disco. - strict (
bool, opcional, valor predeterminadoFalse) — Si se debe aplicar estrictamente que las claves del state_dict del checkpoint coincidan con las claves del state_dict del modelo. - full_state_dict (
bool, opcional, valor predeterminadoTrue) — si se establece enTrue, se recopilarán todos los tensores del state_dict cargado. No habrá ShardedTensor ni DTensor en el state_dict cargado. - broadcast_from_rank0 (
False, opcional, valor predeterminadoFalse) — cuando la opción esTrue, se debe inicializar unProcessGroupdistribuido. rank0 debe recibir un state_dict completo y retransmitirá los tensores del state_dict uno a uno a los demás ranks. Los demás ranks recibirán los tensores y los fragmentarán (si aplica) según los fragmentos locales del modelo.
Carga un punto de control (posiblemente fragmentado) dentro de un modelo, enviando potencialmente los pesos a un dispositivo dado a medida que se cargan.
Una vez cargado en los dispositivos, aún debe llamar a dispatch_model() en su modelo para que pueda ejecutarse. Para agrupar la carga del checkpoint y el despacho en una sola llamada, use load_checkpoint_and_dispatch().
accelerate.utils.load_offloaded_weights
< source >( modelindexoffload_folder )
Carga los pesos desde la carpeta de descarga en el modelo.
accelerate.utils.load_state_dict
< source >( checkpoint_filedevice_map = None )
Parámetros
- checkpoint_file (
str) — La ruta del punto de control que se va a cargar. - device_map (
Dict[str, Union[int, str, torch.device]], opcional) — Un mapa que especifica dónde debe ir cada submódulo. No es necesario detallarlo para cada nombre de parámetro/buffer; una vez que un nombre de módulo está incluido, todos sus submódulos se enviarán al mismo dispositivo.
Carga un punto de control desde un archivo dado. Si el punto de control está en el formato safetensors y se pasa un mapa de dispositivos, los pesos se pueden cargar rápidamente directamente en la GPU.
accelerate.utils.offload_state_dict
< source >( save_dir: str | os.PathLikestate_dict: dict )
Descarga un state dict en una carpeta dada.
accelerate.utils.retie_parameters
< source >( modeltied_params )
Vuelve a atar los parámetros atados en un modelo dado si el vínculo se rompió (por ejemplo, al agregar hooks).
accelerate.utils.set_module_tensor_to_device
< source >( module: Moduletensor_name: strdevice: int | str | torch.devicevalue: torch.Tensor | None = Nonedtype: str | torch.dtype | None = Nonefp16_statistics: torch.HalfTensor | None = Nonetied_params_map: dict[int, dict[torch.device, torch.Tensor]] | None = Nonenon_blocking: bool = Falseclear_cache: bool = True )
Parámetros
- module (
torch.nn.Module) — El módulo en el que reside el tensor que queremos mover. - tensor_name (
str) — El nombre completo del parámetro/buffer. - device (
int,strotorch.device) — El dispositivo en el que se establecerá el tensor. - value (
torch.Tensor, opcional) — El valor del tensor (útil al pasar del dispositivo meta a cualquier otro dispositivo). - dtype (
torch.dtype, opcional) — Si se pasa, el valor del parámetro se convertirá a estedtype. De lo contrario,valuese convertirá al dtype del parámetro existente en el modelo. - fp16_statistics (
torch.HalfTensor, opcional) — La lista de estadísticas de fp16 para configurar en el módulo, utilizada para la serialización de modelos de 8 bits. - tied_params_map (Dict[int, Dict[torch.device, torch.Tensor]], opcional, valor predeterminado
None) — Un mapa de punteros de datos actuales a diccionarios de dispositivos a pesos vinculados ya despachados. Para un dispositivo de ejecución dado, este parámetro es útil para reutilizar el primer puntero disponible de un peso compartido en el dispositivo para todos los demás, en lugar de duplicar la memoria. - non_blocking (
bool, opcional, valor predeterminadoFalse) — Si esTrue, la transferencia de dispositivo será asíncrona con respecto al host, si es posible. - clear_cache (
bool, opcional, valor predeterminadoTrue) — Si se debe o no limpiar la caché del dispositivo después de establecer el tensor en el dispositivo.
Una función auxiliar para establecer un tensor dado (parámetro o buffer) de un módulo en un dispositivo específico (tenga en cuenta que hacer param.to(device) crea un nuevo tensor no vinculado al parámetro, por lo que necesitamos esta función).
accelerate.utils.get_module_children_bottom_up
< source >( model: Modulereturn_fqns: bool = False ) → list[torch.nn.Module]
Recorre el modelo en orden ascendente y devuelve los módulos hijos en ese orden.
Paralelo
Estas incluyen utilidades generales que deben usarse al trabajar en paralelo.
accelerate.utils.extract_model_from_parallel
< source >( modelkeep_fp32_wrapper: bool = Truekeep_torch_compile: bool = Truerecursive: bool = False ) → torch.nn.Module
Parámetros
- model (
torch.nn.Module) — El modelo a extraer. - keep_fp32_wrapper (
bool, opcional) — Si se deben eliminar los hooks de precisión mixta del modelo. - keep_torch_compile (
bool, opcional) — Si se debe desenvolver el modelo compilado. - recursive (
bool, opcional, valor predeterminadoFalse) — Si se deben extraer recursivamente todos los casos demodule.moduledemodel, así como desenrollar recursivamente las subcapas hijas, no solo los contenedores distribuidos de nivel superior.
Devuelve
torch.nn.Module
El modelo extraído.
Extraer un modelo de sus contenedores distribuidos.
accelerate.utils.save
< source >( objfsave_on_each_node: bool = Falsesafe_serialization: bool = False )
Parámetros
- obj — Los datos a guardar
- f — El archivo (o objeto similar a un archivo) que se usará para guardar los datos
- save_on_each_node (
bool, opcional, valor predeterminadoFalse) — Si se debe guardar solo en el proceso principal global - safe_serialization (
bool, opcional, valor predeterminadoFalse) — Si se debe guardarobjusandosafetensorso el método tradicional de PyTorch (que usapickle).
Guarde los datos en el disco. Utilice en lugar de torch.save().
Sustituto compatible de torch.load() que permite usar weights_only si la versión de torch es 2.4.0 o superior. En caso contrario, se ignorará el parámetro.
También se añadirá (y luego se eliminará) una excepción para los arreglos de numpy
Introduce un punto de bloqueo en el script, asegurándose de que todos los procesos hayan alcanzado este punto antes de continuar.
Asegúrese de que todos los procesos lleguen a esta instrucción, de lo contrario, uno de sus procesos se quedará colgado para siempre.
Aleatorio
Estas utilidades se relacionan con la configuración y sincronización de todos los estados aleatorios.
accelerate.utils.set_seed
< source >( seed: intdevice_specific: bool = Falsedeterministic: bool = False )
Parámetros
- seed (
int) — La semilla a establecer. - device_specific (
bool, opcional, valor predeterminadoFalse) — Si se debe diferenciar ligeramente la semilla en cada dispositivo conself.process_index. - deterministic (
bool, opcional, valor predeterminadoFalse) — Si se deben usar algoritmos deterministas cuando estén disponibles. Puede ralentizar el entrenamiento.
Función auxiliar para un comportamiento reproducible que establece la semilla en random, numpy, torch.
accelerate.utils.synchronize_rng_state
< source >( rng_type: accelerate.utils.dataclasses.RNGType | None = Nonegenerator: torch.Generator | None = None )
accelerate.synchronize_rng_states
< source >( rng_types: listgenerator: torch.Generator | None = None )
PyTorch XLA
Estas incluyen utilidades que resultan útiles al usar PyTorch con XLA.
accelerate.utils.install_xla
< source >( upgrade: bool = False )
Función auxiliar para instalar las ruedas xla adecuadas según la versión de torch en Google Colaboratory.
Carga de los pesos del modelo
Estos incluyen utilidades que resultan útiles para cargar puntos de control.
accelerate.load_checkpoint_in_model
< source >( model: Modulecheckpoint: str | os.PathLikedevice_map: dict[str, int | str | torch.device] | None = Noneoffload_folder: str | os.PathLike | None = Nonedtype: str | torch.dtype | None = Noneoffload_state_dict: bool = Falseoffload_buffers: bool = Falsekeep_in_fp32_modules: list[str] | None = Noneoffload_8bit_bnb: bool = Falsestrict: bool = Falsefull_state_dict: bool = Truebroadcast_from_rank0: bool = False )
Parámetros
- model (
torch.nn.Module) — El modelo en el que queremos cargar un punto de control. - checkpoint (
stroos.PathLike) — El checkpoint de la carpeta a cargar. Puede ser:- una ruta a un archivo que contiene un diccionario de estado completo del modelo
- una ruta a un archivo
.jsonque contiene el índice de un punto de control fragmentado - una ruta a una carpeta que contiene un archivo
.index.jsonúnico y los fragmentos de un punto de control. - una ruta a una carpeta que contenga un archivo pytorch_model.bin o model.safetensors único.
- device_map (
Dict[str, Union[int, str, torch.device]], opcional) — Un mapa que especifica dónde debe ir cada submódulo. No es necesario detallarlo para cada nombre de parámetro/buffer; una vez que un nombre de módulo está incluido, todos sus submódulos se enviarán al mismo dispositivo. - offload_folder (
stroos.PathLike, opcional) — Si eldevice_mapcontiene algún valor"disk", la carpeta donde se descargarán los pesos. - dtype (
strotorch.dtype, opcional) — Si se proporciona, los pesos se convertirán a ese tipo al cargarlos. - offload_state_dict (
bool, opcional, valor predeterminadoFalse) — SiTrue, se descargará temporalmente el state dict de CPU en el disco duro para evitar quedarse sin RAM de CPU si el peso del state dict de CPU + el fragmento más grande no cabe. - offload_buffers (
bool, opcional, valor predeterminadoFalse) — Si se incluyen o no los buffers en los pesos que se descargan en el disco. - keep_in_fp32_modules(
List[str], opcional) — Una lista de los módulos que se mantienen en el tipo de datostorch.float32. - offload_8bit_bnb (
bool, opcional) — Si se habilita o no el offload de módulos de 8 bits en cpu/disco. - strict (
bool, opcional, valor predeterminadoFalse) — Si se debe aplicar estrictamente que las claves del state_dict del checkpoint coincidan con las claves del state_dict del modelo. - full_state_dict (
bool, opcional, valor predeterminadoTrue) — si se establece enTrue, se recopilarán todos los tensores del state_dict cargado. No habrá ShardedTensor ni DTensor en el state_dict cargado. - broadcast_from_rank0 (
False, opcional, valor predeterminadoFalse) — cuando la opción esTrue, se debe inicializar unProcessGroupdistribuido. rank0 debe recibir un state_dict completo y retransmitirá los tensores del state_dict uno a uno a los demás ranks. Los demás ranks recibirán los tensores y los fragmentarán (si aplica) según los fragmentos locales del modelo.
Carga un punto de control (posiblemente fragmentado) dentro de un modelo, enviando potencialmente los pesos a un dispositivo dado a medida que se cargan.
Una vez cargado en los dispositivos, aún debe llamar a dispatch_model() en su modelo para que pueda ejecutarse. Para agrupar la carga del checkpoint y el despacho en una sola llamada, use load_checkpoint_and_dispatch().
Cuantización
Estas incluyen utilidades que resultan útiles para cuantizar el modelo.
accelerate.utils.load_and_quantize_model
< source >( model: Modulebnb_quantization_config: BnbQuantizationConfigweights_location: str | os.PathLike | None = Nonedevice_map: dict[str, int | str | torch.device] | None = Noneno_split_module_classes: list[str] | None = Nonemax_memory: dict[int | str, int | str] | None = Noneoffload_folder: str | os.PathLike | None = Noneoffload_state_dict: bool = False ) → torch.nn.Module
Parámetros
- model (
torch.nn.Module) — Modelo de entrada. El modelo puede estar ya cargado o en el dispositivo meta - bnb_quantization_config (
BnbQuantizationConfig) — Los parámetros de cuantización de bitsandbytes - weights_location (
stroos.PathLike) — La carpeta weights_location a cargar. Puede ser:- una ruta a un archivo que contiene un diccionario de estado completo del modelo
- una ruta a un archivo
.jsonque contiene el índice de un punto de control fragmentado - una ruta a una carpeta que contiene un archivo
.index.jsonúnico y los fragmentos de un punto de control. - una ruta a una carpeta que contiene un archivo pytorch_model.bin único.
- device_map (
Dict[str, Union[int, str, torch.device]], opcional) — Un mapa que especifica dónde debe ir cada submódulo. No es necesario detallarlo para cada nombre de parámetro/buffer; una vez que un nombre de módulo está incluido, todos sus submódulos se enviarán al mismo dispositivo. - no_split_module_classes (
List[str], opcional) — Una lista de nombres de clases de capas que nunca deben dividirse entre dispositivos (por ejemplo, cualquier capa que tenga una conexión residual). - max_memory (
Dict, opcional) — Un diccionario de identificador de dispositivo a memoria máxima. Si no se establece, se usará la memoria máxima disponible. - offload_folder (
stroos.PathLike, opcional) — Si eldevice_mapcontiene algún valor"disk", la carpeta donde se descargarán los pesos. - offload_state_dict (
bool, opcional, valor predeterminadoFalse) — SiTrue, se descargará temporalmente el state dict de CPU en el disco duro para evitar quedarse sin RAM de CPU si el peso del state dict de CPU + el fragmento más grande no cabe.
Devuelve
torch.nn.Module
El modelo cuantizado
Esta función cuantizará el modelo de entrada con la configuración asociada pasada en bnb_quantization_config. Si el
modelo está en el dispositivo meta, cargaremos y despacharemos los pesos según el device_map pasado. Si el
modelo ya está cargado, cuantizaremos el modelo y lo colocaremos en la GPU,