Accelerate documentation
Fonctions et classes utilitaires
Fonctions et classes utilitaires
Voici une variété de fonctions utilitaires fournies par 🤗 Accelerate, classées par cas d’usage.
Constantes
Constantes utilisées dans l’ensemble de 🤗 Accelerate à titre de référence
Les éléments suivants sont des constantes utilisées lors de l'utilisation de 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
Les éléments suivants sont des constantes utilisées lors de l'utilisation de 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"
Classes de données
Ce sont des dataclasses de base utilisées tout au long de 🤗 Accelerate et elles peuvent être passées en tant que paramètres.
Autonome
Ce sont des dataclasses autonomes utilisées pour les vérifications, telles que le type de système distribué utilisé
Représente un type d'environnement de calcul.
Valeurs :
- LOCAL_MACHINE — matériel de cluster privé/personnalisé.
- AMAZON_SAGEMAKER — Amazon SageMaker en tant qu’environnement de calcul.
Représente un type d'environnement distribué.
Valeurs :
- NON — Pas un environnement distribué, juste un processus unique.
- MULTI_CPU — Réparti sur plusieurs nœuds CPU.
- MULTI_GPU — Réparti sur plusieurs GPU.
- MULTI_MLU — Réparti sur plusieurs MLU.
- MULTI_SDAA — Réparti sur plusieurs SDAAs.
- MULTI_MUSA — Distribué sur plusieurs MUSAs.
- MULTI_NPU — Réparti sur plusieurs NPU.
- MULTI_XPU — Réparti sur plusieurs XPU.
- MULTI_HPU — Réparti sur plusieurs HPU.
- MULTI_NEURON — Réparti sur plusieurs cœurs Neuron.
- DEEPSPEED — Utilisation de DeepSpeed.
- FSDP — Utilisation de Fully Sharded Data Parallelism (FSDP).
- XLA — Utilisation de TorchXLA.
- MEGATRON_LM — Utilisation de Megatron-LM.
Représente un backend dynamo (voir https://pytorch.org/docs/stable/torch.compiler.html).
Valeurs :
- NON — N'utilisez pas torch dynamo.
- EAGER — Utilise PyTorch pour exécuter le GraphModule extrait. C'est très utile pour déboguer les problèmes de TorchDynamo.
- AOT_EAGER — Utilise AotAutograd sans compilateur, c’est-à-dire en s’appuyant uniquement sur l’exécution eager de PyTorch pour les graphes avant et arrière extraits par AotAutograd. Cette option est utile pour le débogage et il est peu probable qu’elle apporte des gains de vitesse.
- INDUCTOR — Utilise le backend TorchInductor avec AotAutograd et cudagraphs en s’appuyant sur des noyaux Triton générés par codegen. En savoir plus
- AOT_TS_NVFUSER — nvFuser avec AotAutograd/TorchScript. En savoir plus
- NVPRIMS_NVFUSER — nvFuser avec PrimTorch. En savoir plus
- CUDAGRAPHS — cudagraphs avec AotAutograd. En savoir plus
- OFI — Utilise Torchscript optimize_for_inference. Inférence uniquement. En savoir plus
- FX2TRT — Utilise Nvidia TensorRT pour l’optimisation de l’inférence. Inférence uniquement. En savoir plus
- ONNXRT — Utilise ONNXRT pour l'inférence sur CPU/GPU. Inférence uniquement. En savoir plus
- TENSORRT — Utilise ONNXRT pour exécuter TensorRT afin d’optimiser l’inférence. En savoir plus
- AOT_TORCHXLA_TRACE_ONCE — Utilise Pytorch/XLA avec l’optimisation TorchDynamo, pour l’entraînement. En savoir plus
- TORCHXLA_TRACE_ONCE — Utilise Pytorch/XLA avec l’optimisation TorchDynamo, pour l’inférence. En savoir plus
- TVM — Utilise Apache TVM pour les optimisations d'inférence. En savoir plus
- HPU_BACKEND — Utilise le backend HPU pour les optimisations d’inférence.
- NEURON — Utilise le backend AWS Neuron pour Trainium/Inferentia.
Représente un type de traceur d'expériences pris en charge
Valeurs :
- TOUT — tous les traceurs disponibles dans l'environnement et pris en charge
- TENSORBOARD — TensorBoard en tant que traceur d'expériences
- WANDB — wandb en tant que traceur d'expérimentations
- TRACKIO — trackio en tant que traceur d'expériences
- COMETML — comet_ml en tant que traceur d'expériences
- MLFLOW — mlflow en tant que traceur d'expériences
- CLEARML — clearml en tant que traceur d'expériences
- DVCLIVE — dvclive en tant que traceur d'expériences
- SWANLAB — swanlab en tant que traceur d'expériences
Représente un type de précision utilisé sur les valeurs à virgule flottante
Valeurs :
- NON — utilisation de la pleine précision (FP32)
- FP16 — utilisation de la demi-précision
- BF16 — utilisation de la précision brain floating point
Représente un type d'environnement distribué.
Valeurs :
- NON — Pas un environnement distribué, juste un processus unique.
- DATA_PARALLEL — utilisation de la parallélisation distribuée des données de sagemaker.
- MODEL_PARALLEL — utilisation de la parallélisation distribuée des modèles de sagemaker.
Kwargs
Ce sont des arguments configurables pour des interactions spécifiques au sein de l’écosystème PyTorch, que Accelerate gère en interne.
classe accelerate.AutocastKwargs
< source >( enabled: bool = Truecache_enabled: bool | None = None )
Utilisez cet objet dans votre Accelerator pour personnaliser le comportement de torch.autocast. Veuillez consulter la
documentation de ce context manager pour plus
d’informations sur chaque argument.
classe 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> )
Utilisez cet objet dans votre Accelerator pour personnaliser la manière dont votre modèle est encapsulé dans un torch.nn.parallel.DistributedDataParallel. Veuillez consulter la documentation de ce wrapper pour plus d’informations sur chaque argument.
classe accelerate.GradScalerKwargs
< source >( init_scale: float = 65536.0growth_factor: float = 2.0backoff_factor: float = 0.5growth_interval: int = 2000enabled: bool = True )
Utilisez cet objet dans votre Accelerator pour personnaliser le comportement de la précision mixte, en particulier la manière dont le torch.amp.GradScaler ou le torch.cuda.amp.GradScaler utilisé est créé. Veuillez consulter la documentation de ce scaler pour plus d’informations sur chaque argument.
classe accelerate.InitProcessGroupKwargs
< source >( backend: str | None = 'nccl'init_method: str | None = Nonetimeout: datetime.timedelta | None = None )
Utilisez cet objet dans votre Accelerator pour personnaliser l’initialisation des processus distribués. Veuillez consulter la documentation de cette méthode pour plus d’informations sur chaque argument.
Note : Si timeout est défini sur None, la valeur par défaut sera basée sur la configuration de backend.
Mixin interne qui implémente une méthode to_kwargs() pour un dataclass.
Retourne un dictionnaire contenant les attributs dont les valeurs diffèrent des valeurs par défaut de cette classe.
Plugins
Ce sont des plugins qui peuvent être passés à l'objet Accelerator. Bien qu'ils soient définis ailleurs dans la documentation, pour votre confort, tous sont disponibles à consulter ici :
classe 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 )
Paramètres
- hf_ds_config (
Any, par défautNone) — Chemin vers le fichier de configuration DeepSpeed, dictionnaire ou objet de la classeaccelerate.utils.deepspeed.HfDeepSpeedConfig. - gradient_accumulation_steps (
int, par défautNone) — Nombre d'étapes pour accumuler les gradients avant de mettre à jour les états de l'optimiseur. Si non défini, utilise directement la valeur de l'Accelerator. - gradient_clipping (
float, par défautNone) — Active la limitation des gradients avec la valeur indiquée. - zero_stage (
int, par défautNone) — Les options possibles sont 0, 1, 2, 3. La valeur par défaut est prise de la variable d’environnement. - is_train_batch_min (
bool, par défautTrue) — Si les deux chargeurs de données d'entraînement et d'évaluation sont spécifiés, ce paramètre détermine latrain_batch_size. - offload_optimizer_device (
str, par défautNone) — Les options possibles sont none|cpu|nvme. Applicable uniquement avec les étapes ZeRO 2 et 3. - offload_param_device (
str, par défautNone) — Les options possibles sont none|cpu|nvme. Applicable uniquement avec ZeRO Stage 3. - offload_optimizer_nvme_path (
str, par défautNone) — Les options possibles sont /nvme|/local_nvme. Applicable uniquement avec ZeRO Stage 3. - offload_param_nvme_path (
str, par défautNone) — Les options possibles sont /nvme|/local_nvme. Applicable uniquement avec ZeRO Stage 3. - zero3_init_flag (
bool, par défautNone) — Indique s'il faut enregistrer le modèle en 16 bits. Applicable uniquement avec ZeRO Stage-3. - zero3_save_16bit_model (
bool, par défautNone) — Indique s'il faut enregistrer le modèle en 16 bits. Applicable uniquement avec ZeRO Stage-3. - transformer_moe_cls_names (
str, par défautNone) — Liste de noms de classes de couches MoE de Transformers, séparés par des virgules (sensible à la casse). Par exemple,MixtralSparseMoeBlock,Qwen2MoeSparseMoeBlock,JetMoEAttention,JetMoEBlock, etc.
Ce plugin est utilisé pour intégrer DeepSpeed.
deepspeed_config_process
< source >( prefix = ''mismatches = Noneconfig = Nonemust_match = True**kwargs )
Traitez la configuration DeepSpeed avec les valeurs issues des kwargs.
Définit le HfDeepSpeedWeakref pour utiliser la configuration actuelle du plugin deepspeed
classe 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 )
Paramètres
- fsdp_version (
int, par défaut1) — La version de FSDP à utiliser. Par défaut, 1. Si défini à 2, le lanceur s’attend à ce que la configuration soit convertie au format FSDP2. - sharding_strategy (
Union[str, torch.distributed.fsdp.ShardingStrategy], par défaut'FULL_SHARD') — Stratégie de sharding à utiliser. Doit être soit unestr, soit une instance detorch.distributed.fsdp.fully_sharded_data_parallel.ShardingStrategy. Est déprécié au profit dereshard_after_forward. - reshard_after_forward (
Union[str, torch.distributed.fsdp.ShardingStrategy, bool], par défaut'FULL_SHARD'pourfsdp_version=1etTruepourfsdp_version=2) — Stratégie de sharding à utiliser. Doit être un bool sifsdp_versionest défini à 2, sinon unestrou une instance detorch.distributed.fsdp.fully_sharded_data_parallel.ShardingStrategy. - backward_prefetch (
Union[str, torch.distributed.fsdp.BackwardPrefetch], par défaut'NO_PREFETCH') — Stratégie de préchargement en arrière à utiliser. Doit être soit unestr, soit une instance detorch.distributed.fsdp.fully_sharded_data_parallel.BackwardPrefetch. - mixed_precision_policy (
Optional[Union[dict, str, torch.distributed.fsdp.MixedPrecision, torch.distributed.fsdp.MixedPrecisionPolicy]], par défautNone) — Une configuration pour activer l’entraînement en précision mixte avec FullyShardedDataParallel. Si vous passez undict, il doit contenir les clés suivantes :param_dtype,reduce_dtypeetbuffer_dtype. Il peut également être une instance detorch.distributed.fsdp.MixedPrecisionPolicysifsdp_versionest défini sur 2. Si vous passez unstr, il doit être l’une des valeurs suivantes : fp8, fp16, bf16, fp32, et sert à définirparam_dtype,reduce_dtypeetbuffer_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], par défautFalse) — Indique s'il faut décharger les paramètres sur le CPU. Doit être soit unbool, soit une instance detorch.distributed.fsdp.fully_sharded_data_parallel.CPUOffloadou detorch.distributed.fsdp.fully_sharded_data_parallel.CPUOffloadPolicysifsdp_versionest défini à 2. - ignored_modules (
Optional[Union[Iterable[torch.nn.Module], str]], par défautNone) — Une liste de modules à ignorer lors de l’encapsulation avec FSDP. En passant une chaîne de caractères, les modules sont appariés par nom à l’aide d’une correspondance complète par expression régulière. Sifsdp_versionest défini sur 2, les modules sont convertis en paramètres et utilisés. - state_dict_type (
Union[str, torch.distributed.fsdp.StateDictType], par défaut'FULL_STATE_DICT') — Type de state dict à utiliser. S'il s'agit d'une chaîne de caractères, elle doit être l'une des valeurs suivantes :full_state_dict,local_state_dictousharded_state_dict. - state_dict_config (
Optional[Union[torch.distributed.fsdp.FullStateDictConfig, torch.distributed.fsdp.ShardedStateDictConfig], par défautNone) — Configuration du state dict à utiliser. Elle est déterminée en fonction destate_dict_typesi elle n’est pas fournie. - optim_state_dict_config (
Optional[Union[torch.distributed.fsdp.FullOptimStateDictConfig, torch.distributed.fsdp.ShardedOptimStateDictConfig], par défautNone) — Configuration du dictionnaire d'état de l'optimiseur à utiliser. Elle est déterminée en fonction destate_dict_typesi elle n'est pas fournie. - limit_all_gathers (
bool, par défautTrue) — Indique si FSDP doit synchroniser explicitement le thread CPU afin d'éviter un nombre excessif d'opérations all-gather en cours. Ce booléen n'affecte que les stratégies shardées qui planifient les all-gathers. L'activation de cette option peut aider à réduire le nombre de tentatives de malloc CUDA. - use_orig_params (
bool, par défautFalse) — Indique s'il faut utiliser les paramètres d'origine pour l'optimiseur. - param_init_fn (
Optional[Callable[[torch.nn.Module], None], par défautNone) — UnCallable[torch.nn.Module] -> Nonequi spécifie comment initialiser sur un appareil réel les modules actuellement sur l'appareil méta. Applicable uniquement lorsquesync_module_statesestTrue. Par défaut, c'est unlambdaqui appelleto_emptysur le module. - sync_module_states (
bool, par défautFalse) — Indique si chaque unité FSDP enveloppée individuellement doit diffuser les paramètres du module depuis le rang 0 pour garantir qu'ils sont identiques sur tous les rangs après l'initialisation. La valeur par défaut estFalse, sauf sicpu_ram_efficient_loadingestTrue, auquel cas elle est activée de force. - forward_prefetch (
bool, par défautFalse) — Indique si FSDP doit précharger explicitement le prochain all-gather pendant l’exécution de la passe avant. À n’utiliser qu’avec des graphiques statiques. - activation_checkpointing (
bool, par défautFalse) — Une technique permettant de réduire l'utilisation de la mémoire en effaçant les activations de certaines couches et en les recalculant lors d'une passée arrière. Concrètement, cela échange un temps de calcul supplémentaire contre une réduction de l'utilisation de la mémoire. - cpu_ram_efficient_loading (
bool, par défautNone) — Si True, seul le premier processus charge le checkpoint du modèle préentraîné, tandis que tous les autres processus ont des poids vides. Applicable uniquement pour Transformers. Lors de l'utilisation de cette option,sync_module_statesdoit êtreTrue. - transformer_cls_names_to_wrap (
Optional[List[str]], par défautNone) — Une liste de noms de classes de couches de transformeurs à encapsuler. Applicable uniquement lorsqueauto_wrap_policyesttransformer_based_wrap. - min_num_params (
Optional[int], par défautNone) — Le nombre minimal de paramètres qu'un module doit posséder pour être encapsulé. Applicable uniquement lorsqueauto_wrap_policyestsize_based_wrap.
Ce plugin est utilisé pour activer le parallélisme de données entièrement fragmentées.
À partir de model, crée une auto_wrap_policy basée sur la politique transmise et sur la possibilité d'utiliser transformer_cls_to_wrap
Définit la politique de précision mixte pour FSDP
Définissez la configuration du dictionnaire d'état en fonction du StateDictType.
Valide la politique de précision mixte, abstraite afin d'éviter d'importer les dépendances si elles ne sont pas nécessaires.
classe accelerate.utils.GradientAccumulationPlugin
< source >( num_steps: int = Noneadjust_scheduler: bool = Truesync_with_dataloader: bool = Truesync_each_batch: bool = False )
Paramètres
- num_steps (
int) — Le nombre d'étapes pour lesquelles accumuler les gradients. - adjust_scheduler (
bool, facultatif, par défautTrue) — Indique s'il faut ajuster les étapes du planificateur pour tenir compte du nombre d'étapes accumulées. Doit êtreTruesi le planificateur utilisé n'a pas été ajusté pour l'accumulation de gradients. - sync_with_dataloader (
bool, facultatif, par défautTrue) — Indique s'il faut synchroniser la configuration des gradients à la fin du dataloader. - sync_each_batch (
bool, facultatif) — Indique s'il faut synchroniser la configuration des gradients à chaque lot de données. La valeurTruepeut réduire les besoins en mémoire lors de l'utilisation de l'accumulation de gradients avec l'entraînement distribué, au détriment de la vitesse.
Un plugin pour configurer le comportement de l'accumulation de gradients. Vous ne pouvez passer qu'un seul de gradient_accumulation_plugin ou gradient_accumulation_steps à Accelerator. Passer les deux provoque une erreur.
classe 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 )
Paramètres
- tp_degree (
int, par défautNone) — Degré du parallélisme de tenseurs. - pp_degree (
int, par défautNone) — Degré du parallélisme par pipeline. - num_micro_batches (
int, par défautNone) — Nombre de micro-lots. - gradient_clipping (
float, par défautNone) — Valeur de la limitation du gradient basée sur la norme L2 globale (0 pour désactiver). - sequence_parallelism (
bool, par défautNone) — Active le parallélisme de séquence. - recompute_activations (
bool, par défautNone) — Active la recomputation sélective des activations. - use_distributed_optimizer (
bool, par défautNone) — Active l’optimiseur distribué. - pipeline_model_parallel_split_rank (
int, par défautNone) — Rang où l'encodeur et le décodeur doivent être séparés. - num_layers_per_virtual_pipeline_stage (
int, par défautNone) — Nombre de couches par étape de pipeline virtuel. - is_train_batch_min (
str, par défautTrue) — Si les deux chargeurs de données tran & eval sont spécifiés, cela déterminera lamicro_batch_size. - train_iters (
int, par défautNone) — Nombre total d’échantillons à entraîner sur l’ensemble des exécutions d’entraînement. Notez que soit train-iters, soit train-samples doit être fourni lors de l’utilisation deMegatronLMDummyScheduler. - train_samples (
int, par défautNone) — Nombre total d'échantillons à entraîner sur l'ensemble des exécutions d'entraînement. Notez que soit train-iters, soit train-samples doit être fourni lors de l'utilisation deMegatronLMDummyScheduler. - weight_decay_incr_style (
str, par défaut'constant') — Fonction d'incrément du weight decay. choices=[“constant”, “linear”, “cosine”]. - start_weight_decay (
float, par défautNone) — Coefficient de décroissance du poids initial pour la régularisation L2. - end_weight_decay (
float, par défautNone) — Coefficient de décroissance du poids en fin d'exécution pour la régularisation L2. - lr_decay_style (
str, par défaut'linear') — Fonction de décroissance du taux d'apprentissage. choices=[‘constant’, ‘linear’, ‘cosine’]. - lr_decay_iters (
int, par défautNone) — Nombre d'itérations pour le décroissement du taux d'apprentissage. Si None, la valeur par défaut esttrain_iters. - lr_decay_samples (
int, par défautNone) — Nombre d'échantillons pour le décroissement du taux d'apprentissage. Si None, la valeur par défaut esttrain_samples. - lr_warmup_iters (
int, par défautNone) — Nombre d'itérations sur lesquelles effectuer un réchauffement linéaire du taux d'apprentissage. - lr_warmup_samples (
int, par défautNone) — Nombre d'échantillons sur lesquels effectuer un réchauffement linéaire du taux d'apprentissage. - lr_warmup_fraction (
float, par défautNone) — Fraction des itérations/échantillons de lr-warmup sur laquelle le taux d'apprentissage est réchauffé linéairement. - min_lr (
float, par défaut0) — Valeur minimale du taux d'apprentissage. Le planificateur plafonne les valeurs en dessous de ce seuil. - consumed_samples (
List, par défautNone) — Nombre d'échantillons consommés dans le même ordre que les dataloaders de l'appel àaccelerator.prepare. - no_wd_decay_cond (
Optional, par défautNone) — Condition pour désactiver le déclin du poids. - scale_lr_cond (
Optional, par défautNone) — Condition pour mettre à l'échelle le taux d'apprentissage. - lr_mult (
float, par défaut1.0) — Multiplicateur du taux d'apprentissage. - megatron_dataset_flag (
bool, par défautFalse) — Indique si le format du jeu de données suit le format Indexed/Cached/MemoryMapped de Megatron-LM. - seq_length (
int, par défautNone) — Longueur maximale de séquence à traiter. - encoder_seq_length (
int, par défautNone) — Longueur maximale de séquence à traiter pour l'encodeur. - decoder_seq_length (
int, par défautNone) — Longueur maximale de séquence à traiter pour le décodeur. - tensorboard_dir (
str, par défautNone) — Chemin pour enregistrer les journaux tensorboard. - set_all_logging_options (
bool, par défautFalse) — Indique s'il faut définir toutes les options de journalisation. - eval_iters (
int, par défaut100) — Nombre d'itérations à exécuter pour l'évaluation de validation/test. - eval_interval (
int, par défaut1000) — Intervalle entre les exécutions de l'évaluation sur le jeu de validation. - return_logits (
bool, par défautFalse) — Indique s'il faut retourner les logits du modèle. - custom_train_step_class (
Optional, par défautNone) — Classe d'étape d'entraînement personnalisée. - custom_train_step_kwargs (
Optional, par défautNone) — Arguments personnalisés pour l'étape d'entraînement. - custom_model_provider_function (
Optional, par défautNone) — Fonction personnalisée de fournisseur de modèle. - custom_prepare_model_function (
Optional, par défautNone) — Fonction de préparation du modèle personnalisée. - custom_megatron_datasets_provider_function (
Optional, par défautNone) — Fonction personnalisée de fournisseur de jeux de données d'entraînement, de validation et de test pour Megatron. - custom_get_batch_function (
Optional, par défautNone) — Fonction de récupération de lot personnalisée. - custom_loss_function (
Optional, par défautNone) — Fonction de perte personnalisée. - other_megatron_args (
Optional, par défautNone) — Autres arguments de Megatron-LM. Veuillez consulter Megatron-LM.
Plugin pour Megatron-LM permettant le parallélisme de tenseurs, de pipeline, de séquences et de données. Permet également la récalculation sélective des activations et les noyaux fusionnés optimisés.
classe accelerate.utils.TorchDynamoPlugin
< source >( backend: DynamoBackend = Nonemode: str = Nonefullgraph: bool = Nonedynamic: bool = Noneoptions: Any = Nonedisable: bool = Falseuse_regional_compilation: bool = None )
Paramètres
- backend (
DynamoBackend, par défautNone) — Un backend Dynamo valide. Voir https://pytorch.org/docs/stable/torch.compiler.html pour plus de détails. - mode (
str, par défautNone) — Les options possibles sont ‘default’, ‘reduce-overhead’ ou ‘max-autotune’. - fullgraph (
bool, par défautNone) — Indique s'il est acceptable de diviser le modèle en plusieurs sous-graphes. - dynamic (
bool, par défautNone) — Indique s'il faut utiliser une forme dynamique pour le traçage. - options (
Any, par défautNone) — Un dictionnaire d'options à passer au backend. - disable (
bool, par défautFalse) — Rend torch.compile() inopérant pour les tests - use_regional_compilation (
bool, par défautNone) — Utilisez ce paramètre pour réduire le temps de compilation à froid de torch.compile() en ciblant les blocs répétés de la même classe et en les compilant séquentiellement afin de tirer parti du cache du compilateur. Par exemple, dansGPT2LMHeadModel, le bloc/classe répété estGPT2Block, accessible viamodel.transformer.h[0]. Le reste du modèle (par exemple model.lm_head) est compilé séparément.
Ce plugin est utilisé pour compiler un modèle avec PyTorch 2.0
Configurations
Ce sont des classes qui peuvent être configurées et transmises à l'intégration appropriée
classe 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 )
Paramètres
- load_in_8bit (
bool, par défautFalse) — Active la quantification 8 bits. - llm_int8_threshold (
float, par défaut6.0) — Valeur du seuil de l’outliner. Ne concerne que le cas oùload_in_8bit=True. - load_in_4bit (
bool, par défautFalse) — Active la quantification en 4 bits. - bnb_4bit_quant_type (
str, par défautfp4) — Définit le type de données de quantification dans les couchesbnb.nn.Linear4Bit. Les options sont {‘fp4’,‘np4’}. - bnb_4bit_use_double_quant (
bool, par défautFalse) — Active la quantification imbriquée, où les constantes de quantification issues de la première quantification sont à nouveau quantifiées. - bnb_4bit_compute_dtype (
bool, par défautfp16) — Ce paramètre définit le type de calcul, qui peut différer du type d’entrée. Par exemple, les entrées peuvent être en fp32, mais le calcul peut être défini en bf16 pour gagner en vitesse. Les options sont {‘fp32’,‘fp16’,‘bf16’}. - torch_dtype (
torch.dtype, par défautNone) — Définit le dtype des couches restantes non quantifiées. La bibliothèquebitsandbytesrecommande de définir la valeur surtorch.float16pour un modèle 8 bits et d’utiliser le même dtype que le dtype de calcul pour un modèle 4 bits. - skip_modules (
List[str], par défautNone) — Une liste explicite des modules que nous ne quantifions pas. Le dtype de ces modules seratorch_dtype. - keep_in_fp32_modules (
List, par défautNone) — Une liste explicite des modules que nous ne quantifions pas. Nous les conservons entorch.float32.
Un plugin pour activer la quantification 4 bits et 8 bits de BitsAndBytes
classe 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 )
Paramètres
- split_batches (
bool, par défautFalse) — Indique si l'accélérateur doit diviser les lots produits par les chargeurs de données entre les appareils. SiTrue, la taille de lot effective utilisée sera identique pour tout type de processus distribués, mais elle doit être un multiple entier denum_processesutilisé. SiFalse, la taille de lot effective utilisée sera celle définie dans votre script, multipliée par le nombre de processus. - dispatch_batches (
bool, par défautNone) — Si défini surTrue, le dataloader préparé par l’Accelerator n’est parcouru que sur le processus principal, puis les lots sont divisés et diffusés à chaque processus. La valeur par défaut estTruepour unDataLoaderdont le jeu de données sous-jacent est unIterableDataset, etFalsedans le cas contraire. - even_batches (
bool, par défautTrue) — Si défini surTrue, lorsque la taille totale du lot sur l’ensemble des processus ne divise pas exactement le jeu de données, les échantillons situés au début du jeu de données sont dupliqués afin que le lot puisse être réparti également entre tous les travailleurs. - use_seedable_sampler (
bool, par défautFalse) — Indique s'il faut utiliser un échantillonneur aléatoire entièrement reproductible (data_loader.SeedableRandomSampler). Garantit que les résultats d'entraînement sont entièrement reproductibles en utilisant une technique d'échantillonnage différente. Bien que les résultats puissent varier d'une graine à l'autre, les différences sont négligeables en moyenne lorsqu'on compare plusieurs graines différentes. Il convient également de l'utiliser avec set_seed() pour obtenir les meilleurs résultats. - data_seed (
int, par défautNone) — La graine à utiliser pour le générateur sous-jacent lors de l'utilisation deuse_seedable_sampler. SiNone, le générateur utilisera la graine par défaut actuelle de torch. - non_blocking (
bool, par défautFalse) — Si défini surTrue, le dataloader préparé par l’Accelerator utilisera des transferts hôte-vers-appareil non bloquants, permettant un meilleur chevauchement entre la communication du dataloader et le calcul. Il est recommandé que le dataloader préparé aitpin_memorydéfini surTruepour fonctionner correctement. - use_stateful_dataloader (
bool, par défautFalse) — Si défini surTrue, le dataloader préparé par l’Accelerator sera basé sur torchdata.StatefulDataLoader. Cela nécessite l’installation detorchdataversion 0.8.0 ou supérieure, qui prend en charge StatefulDataLoader.
Configuration des éléments liés au dataloader lors de l'appel de accelerator.prepare.
classe 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 )
Paramètres
- project_dir (
str, par défautNone) — Un chemin vers un répertoire pour stocker les données. - logging_dir (
str, par défautNone) — Un chemin vers un dossier pour stocker les journaux des enregistreurs compatibles localement. Si None, la valeur par défaut estproject_dir. - automatic_checkpoint_naming (
bool, par défautFalse) — Indique si les états enregistrés doivent être nommés automatiquement de manière itérative. - total_limit (
int, par défautNone) — Le nombre maximal d'états sauvegardés à conserver au total. - iteration (
int, par défaut0) — L'itération de sauvegarde actuelle. - save_on_each_node (
bool, par défautFalse) — Lors d’une formation distribuée multi-nœuds, indique s’il faut enregistrer les modèles et les points de contrôle sur chaque nœud, ou uniquement sur le nœud principal.
Configuration de l'objet Accelerator en fonction des besoins internes du projet.
Définit self.project_dir et self.logging_dir avec les valeurs appropriées.
Variables d'environnement
Ce sont des variables d'environnement qui peuvent être activées pour différents cas d'utilisation
ACCELERATE_DEBUG_MODE(str) : Indique s'il faut exécuter accelerate en mode de débogage. Plus d'informations disponibles ici.
Manipulation et opérations sur les données
Celles-ci incluent des opérations sur les données qui imitent les mêmes opérations torch mais qui peuvent être utilisées sur des processus distribués.
accelerate.utils.broadcast
< source >( tensorfrom_process: int = 0 )
Diffuser récursivement un tenseur dans une liste/tuple/dictionnaire imbriquée de tenseurs vers tous les appareils.
accelerate.utils.broadcast_object_list
< source >( object_listfrom_process: int = 0 )
Diffuser une liste d'objets sérialisables d'un processus vers les autres.
accelerate.utils.concatenate
< source >( datadim = 0 )
Concatène récursivement les tenseurs d'une liste/tuple/dictionnaire imbriqué de listes de tenseurs de même forme. S'il n'y a qu'un seul lot de données, il est renvoyé tel quel.
accelerate.utils.convert_to_fp32
< source >( tensor )
Convertit récursivement les éléments d'une liste/tuple/dictionnaire imbriqués de tenseurs en précision FP16/BF16 vers FP32.
accelerate.utils.gather
< source >( tensor )
Récupérer récursivement un tenseur dans une liste/tuple/dictionnaire imbriqué de tenseurs à partir de tous les appareils.
accelerate.utils.gather_object
< source >( object: Any )
Récupérer récursivement un objet dans une liste/tuple/dictionnaire imbriqué d'objets à partir de tous les appareils.
accelerate.utils.get_grad_scaler
< source >( distributed_type: DistributedType = None**kwargs )
Un utilitaire générique qui initialise la bonne implémentation de GradScaler en fonction de l’environnement et la renvoie.
accelerate.utils.get_mixed_precision_context_manager
< source >( native_amp: bool = Falseautocast_kwargs: AutocastKwargs = None )
Retourne un gestionnaire de contexte pour le mélange de précision automatique
accelerate.utils.listify
< source >( data )
Recherche récursivement les tenseurs dans une liste/tuple/dictionnaire imbriqué et les convertit en une liste de nombres.
accelerate.utils.pad_across_processes
< source >( tensordim = 0pad_index = 0pad_first = False )
Paramètres
- tensor (liste/tuple/dictionnaire imbriqué de
torch.Tensor) — Les données à collecter. - dim (
int, facultatif, valeur par défaut 0) — La dimension sur laquelle effectuer le bourrage. - pad_index (
int, facultatif, valeur par défaut 0) — La valeur utilisée pour le bourrage. - pad_first (
bool, facultatif, par défautFalse) — Indique s'il faut ajouter des jetons de bourrage au début ou à la fin.
Rembourrer récursivement les tenseurs d'une liste/tuple/dictionnaire imbriqué de tenseurs provenant de tous les appareils à la même taille afin qu'ils puissent être regroupés en toute sécurité.
accelerate.utils.recursively_apply
< source >( funcdata*argstest_type = <function is_torch_tensor at 0x7fe7449bfed0>error_on_other_type = False**kwargs )
Paramètres
- func (
callable) — La fonction à appliquer récursivement. - data (liste/tuple/dictionnaire imbriqué d'objets acceptés par
test_type) — Les données sur lesquelles appliquerfunc - *args —
Arguments positionnels qui seront transmis à
funclors de son application sur les données dépaquetées. - test_type (
Callable[[Any], bool], facultatif, par défautis_torch_tensor) — Le prédicat qui détermine sifuncdoit être appliqué à un objet feuille donné. - error_on_other_type (
bool, facultatif, par défautFalse) — Indique s'il faut renvoyer une erreur ou non si, après le dépaquetage dedata, on obtient un objet pour lequeltest_typerenvoieFalse. Si la valeur estFalse, la fonction laisse ces objets inchangés. - **kwargs (arguments de mots-clés supplémentaires, facultatif) —
Arguments de mots-clés qui seront transmis à
funclors de son application sur les données dépaquetées.
Appliquer récursivement une fonction sur une structure de données qui est une liste/tuple/dictionnaire imbriqué d'un type de base donné.
accelerate.utils.reduce
< source >( tensorreduction = 'mean'scale = 1.0 )
Paramètres
- tensor (liste/tuple/dictionnaire imbriqué de
torch.Tensor) — Les données à réduire. - reduction (
str, facultatif, par défaut"mean") — Méthode de réduction. Peut être « mean », « sum », « max » ou « none ». - scale (
float, facultatif) — Valeur de mise à l'échelle par défaut à appliquer après la réduction, uniquement valide sur XLA.
Réduire récursivement les tenseurs dans une liste/tuple/dictionnaire imbriqué de listes de tenseurs sur tous les processus par la moyenne d'une opération donnée.
accelerate.utils.send_to_device
< source >( tensordevicenon_blocking = Falseskip_keys = None )
Paramètres
- tensor (liste/tuple/dictionnaire imbriqué de
torch.Tensor) — Les données à envoyer vers un appareil donné. - device (
torch.device) — L'appareil vers lequel envoyer les données. - non_blocking (
bool, facultatif, par défautFalse) — SiTrue, le transfert vers l'appareil est effectué de manière asynchrone, ce qui permet de superposer le déplacement des données et le calcul. N'est efficace que si l'appareil le prend en charge (par ex. CUDA). - skip_keys (
strouList[str], facultatif) — Une clé ou une liste de clés d'un dictionnairetensordont les valeurs ne doivent pas être envoyées vers ledeviceindiqué. Les entrées portant ces clés restent sur leur appareil d'origine.
Envoie récursivement les éléments d'une liste/tuple/dictionnaire imbriqué de tenseurs vers un appareil donné.
accelerate.utils.slice_tensors
< source >( datatensor_sliceprocess_index = Nonenum_processes = None )
Prend récursivement une tranche dans une liste/tuple/dictionnaire imbriqué de tenseurs.
Vérifications de l'environnement
Ces fonctionnalités vérifient l'état de l'environnement de travail actuel, y compris des informations sur le système d'exploitation lui-même, ce qu'il peut prendre en charge et si des dépendances particulières sont installées.
Vérifie si bf16 est pris en charge, en ignorant éventuellement le TPU
Vérifie si un appareil MPS est disponible. La version minimale requise est 1.12.
Vérifie si torch_npu est installé et, le cas échéant, si une NPU est présente dans l'environnement
accelerate.utils.is_torch_version
< source >( operation: strversion: str )
Compare la version actuelle de PyTorch à une référence donnée à l'aide d'une opération.
Vérifiez si torch_xla est disponible. Pour entraîner un job pytorch natif dans un environnement où torch xla est installé, définissez
USE_TORCH_XLA sur false.
Vérifie si l'accélération XPU est disponible via PyTorch standard (>=2.7) et éventuellement si un XPU est présent dans l'environnement
Manipulation de l'environnement
Un gestionnaire de contexte qui ajoute chaque argument par mot-clé passé à os.environ et les supprime à la sortie.
Convertira les valeurs de kwargs en chaînes de caractères et mettra toutes les clés en majuscules.
Un gestionnaire de contexte qui effacera temporairement les variables d’environnement.
Lors de la sortie de ce contexte, les variables d’environnement précédentes seront rétablies.
accelerate.commands.config.default.write_basic_config
< source >( mixed_precision = 'no'save_location: str = '/home/runner/.cache/huggingface/accelerate/default_config.yaml' )
Paramètres
- mixed_precision (
str, facultatif, par défaut “no”) — Mixed Precision à utiliser. Doit être l’un des éléments suivants : “no”, “fp16” ou “bf16” - save_location (
str, facultatif, par défautdefault_json_config_file) — Emplacement de sauvegarde personnalisé facultatif. Doit être transmis à--config_filelors de l’utilisation deaccelerate launch. L’emplacement par défaut se trouve dans le dossier de cache huggingface (~/.cache/huggingface) mais peut être modifié en définissant la variable d’environnementHF_HOME, suivie deaccelerate/default_config.yaml.
Crée et enregistre une configuration de cluster de base à utiliser sur une machine locale, potentiellement équipée de plusieurs GPU. Configure également le CPU s'il s'agit d'une machine ne disposant que de CPU.
Lors de la première configuration de 🤗 Accelerate, plutôt que d'exécuter accelerate config, [~utils.write_basic_config] peut être utilisé comme alternative pour une configuration rapide.
Affecte le processus actuel à un nœud NUMA spécifique. Idéalement, c'est le plus efficace lorsqu'il y a au moins 2 CPU par nœud.
Ce résultat est mis en cache entre les appels. Si vous souhaitez le remplacer, veuillez utiliser accelerate.utils.environment.override_numa_afifnity.
accelerate.utils.environment.override_numa_affinity
< source >( local_process_index: intverbose: bool | None = None )
Écrase toute affinité NUMA définie pour le processus actuel. Cette opération est très coûteuse et nécessite de recalculer l'affinité à définir ; il est préférable d'utiliser utils.environment.set_numa_affinity à la place.
Décorateur permettant de nettoyer les variables d’environnement d’accelerate définies par la classe ou la fonction décorée.
Dans certaines circonstances, l’appel de certaines classes ou fonctions peut entraîner la configuration de variables d’environnement accelerate qui ne sont pas nettoyées par la suite. À titre d’exemple, lors de l’appel de :
TrainingArguments(fp16=True, …)
La variable d’environnement suivante sera définie :
ACCELERATE_MIXED_PRECISION=fp16
Cela peut affecter le code ultérieur, car la variable d’environnement prend le pas sur TrainingArguments(fp16=False). C’est particulièrement pertinent pour les tests unitaires, où nous souhaitons éviter que les tests individuels n’aient des effets de bord les uns sur les autres. Décorez la fonction de test unitaire ou la classe entière avec ce décorateur pour vous assurer qu’après chaque test, les variables d’environnement sont nettoyées. Cela fonctionne à la fois avec unittest.TestCase et les classes normales (pytest) ; cela fonctionne également lorsque vous décorez la classe parente.
Mémoire
accelerate.find_executable_batch_size
< source >( function: callable | None = Nonestarting_batch_size: int = 128reduce_batch_size_fn: callable | None = None )
Paramètres
- function (
callable, facultatif) — Une fonction à encapsuler - starting_batch_size (
int, facultatif) — Taille de lot à essayer de faire tenir en mémoire - reduce_batch_size_fn (
callable, facultatif) — Une fonction pour déterminer la nouvelle taille de lot après une erreur de mémoire insuffisante. Si elle n'est pas fournie, la taille de lot est multipliée par 0,9 à chaque échec. La fonction ne prend aucun argument et doit renvoyer la nouvelle taille de lot (réduite) en tant qu'int.
Un décorateur de base qui tente d’exécuter function. En cas d’échec dû à des exceptions liées à la mémoire insuffisante ou à CUDNN, la taille du lot est multipliée par 0,9 puis transmise à function
function doit prendre un paramètre batch_size comme premier argument.
Modélisation
Ces utilitaires concernent l'interaction avec les modèles PyTorch
Calcule la taille totale du modèle et de sa plus grande couche
accelerate.utils.compute_module_sizes
< source >( model: Moduledtype: str | torch.device | None = Nonespecial_dtypes: dict[str, str | torch.device] | None = Nonebuffers_only: bool = False )
Calculer la taille de chaque sous-module d'un modèle donné.
accelerate.utils.extract_model_from_parallel
< source >( modelkeep_fp32_wrapper: bool = Truekeep_torch_compile: bool = Truerecursive: bool = False ) → torch.nn.Module
Paramètres
- model (
torch.nn.Module) — Le modèle à extraire. - keep_fp32_wrapper (
bool, facultatif) — Indique s'il faut supprimer les hooks de précision mixte du modèle. - keep_torch_compile (
bool, facultatif) — Indique s'il faut déballer le modèle compilé. - recursive (
bool, facultatif, par défautFalse) — Indique s'il faut extraire récursivement tous les cas demodule.moduledemodelainsi que dérouler récursivement les sous-couches enfants, et non uniquement les conteneurs distribués de premier niveau.
Retourne
torch.nn.Module
Le modèle extrait.
Extraire un modèle de ses conteneurs distribués.
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 )
Paramètres
- model (
torch.nn.Module) — Le modèle à analyser. - max_memory (
Dict, optional) — A dictionary device identifier to maximum memory. Will default to the maximum memory available if unset. Example:max_memory={0: "1GB"}. - no_split_module_classes (
List[str], facultatif) — Une liste de noms de classes de couches qui ne doivent jamais être réparties sur plusieurs appareils (par exemple, toute couche disposant d'une connexion résiduelle). - dtype (
stroutorch.dtype, facultatif) — Si fourni, les poids seront convertis en ce type lors du chargement. - special_dtypes (
Dict[str, Union[str, torch.device]], facultatif) — Si fourni, dtypes spéciaux à prendre en compte pour certains poids spécifiques (remplace le dtype utilisé par défaut pour tous les poids). - low_zero (
bool, facultatif) — Minimise le nombre de poids sur le GPU 0, ce qui est pratique lorsqu’il est utilisé pour d’autres opérations (comme la fonction generate de Transformers).
Calculer un dictionnaire max_memory pour infer_auto_device_map() afin d'équilibrer l'utilisation de chaque GPU disponible.
Tous les calculs sont effectués en analysant les tailles et les dtypes des paramètres du modèle. En conséquence, le modèle peut se trouver sur le meta device (comme ce serait le cas s'il était initialisé dans le gestionnaire de contexte
init_empty_weights).
accelerate.utils.get_max_layer_size
< source >( modules: listmodule_sizes: dictno_split_module_classes: list ) → Tuple[int, List[str]]
Paramètres
- modules (
List[Tuple[str, torch.nn.Module]]) — La liste des modules nommés pour lesquels nous souhaitons déterminer la taille maximale des couches. - module_sizes (
Dict[str, int]) — Un dictionnaire associant chaque nom de couche à sa taille (tel que généré parcompute_module_sizes). - no_split_module_classes (
List[str]) — Une liste de noms de classes pour les couches que nous ne voulons pas diviser.
Retourne
Tuple[int, List[str]]
La taille maximale d'une couche, accompagnée de la liste des noms de couches atteignant cette taille maximale.
Fonction utilitaire qui parcourt une liste de modules nommés et renvoie la taille maximale utilisée par une couche complète. La définition d'une couche est la suivante :
- un module sans enfants directs (uniquement des paramètres et des tampons)
- un module dont le nom de classe figure dans la liste
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 )
Paramètres
- model (
torch.nn.Module) — Le modèle à analyser. - max_memory (
Dict, optional) — A dictionary device identifier to maximum memory. Will default to the maximum memory available if unset. Example:max_memory={0: "1GB"}. - no_split_module_classes (
List[str], facultatif) — Une liste de noms de classes de couches qui ne doivent jamais être réparties sur plusieurs appareils (par exemple, toute couche disposant d'une connexion résiduelle). - dtype (
stroutorch.dtype, facultatif) — Si fourni, les poids seront convertis en ce type lors du chargement. - special_dtypes (
Dict[str, Union[str, torch.device]], facultatif) — Si fourni, dtypes spéciaux à prendre en compte pour certains poids spécifiques (remplace le dtype utilisé par défaut pour tous les poids). - verbose (
bool, facultatif, par défautFalse) — Indique s'il faut fournir des déclarations de débogage lorsque la fonction construit le device_map. - clean_result (
bool, facultatif, par défautTrue) — Nettoyer le device_map résultant en regroupant tous les sous-modules qui sont placés sur le même appareil. - offload_buffers (
bool, facultatif, par défautFalse) — Dans les couches déchargées sur le CPU ou le disque dur, indique s'il faut également décharger les buffers en plus des paramètres. - fallback_allocation (
bool, facultatif, valeur par défautFalse) — Lorsque l'allocation régulière échoue, tente d'allouer un module qui respecte la limite de taille en utilisant un parcours en largeur (BFS).
Calculer une carte de périphériques pour un modèle donné en accordant la priorité aux GPU, puis en déchargeant sur le CPU et enfin sur le disque, de sorte que :
- nous ne dépassons pas la mémoire disponible sur aucun des GPU.
- si un offload vers le CPU est nécessaire, il reste toujours de la place sur le GPU 0 pour remettre la couche offloadée sur le CPU qui a la plus grande taille.
- si un offload vers le CPU est nécessaire, nous ne dépassons pas la RAM disponible sur le CPU.
- si l'offload sur le disque est nécessaire, il reste toujours de la place sur le CPU pour remettre la couche offloadée sur disque qui a la plus grande taille.
Tous les calculs sont effectués en analysant les tailles et les dtypes des paramètres du modèle. En conséquence, le modèle peut se trouver sur le meta device (comme ce serait le cas s'il était initialisé dans le gestionnaire de contexte
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 )
Paramètres
- model (
torch.nn.Module) — Le modèle dans lequel nous souhaitons charger un point de contrôle. - checkpoint (
strouos.PathLike) — Le dossier de checkpoint à charger. Il peut s'agir de :- un chemin vers un fichier contenant un état de modèle complet
- un chemin vers un fichier
.jsoncontenant l'index d'un point de contrôle fragmenté - un chemin vers un dossier contenant un fichier
.index.jsonunique et les fragments d'un point de contrôle. - un chemin vers un dossier contenant un fichier pytorch_model.bin ou model.safetensors unique.
- device_map (
Dict[str, Union[int, str, torch.device]], facultatif) — Une carte qui spécifie l’emplacement de chaque sous-module. Elle n’a pas besoin d’être affinée au niveau de chaque nom de paramètre/buffer : dès qu’un nom de module est inclus, tous ses sous-modules seront envoyés sur le même appareil. - offload_folder (
strouos.PathLike, facultatif) — Si ladevice_mapcontient la valeur"disk", le dossier où les poids seront déchargés. - dtype (
stroutorch.dtype, facultatif) — Si fourni, les poids seront convertis en ce type lors du chargement. - offload_state_dict (
bool, facultatif, valeur par défautFalse) — SiTrue, déplace temporairement le dictionnaire d’état CPU sur le disque dur pour éviter un épuisement de la RAM CPU si le poids du dictionnaire d’état CPU + le plus grand fragment ne tient pas. - offload_buffers (
bool, facultatif, par défautFalse) — Indique s'il faut inclure les tampons (buffers) dans les poids déchargés sur le disque. - keep_in_fp32_modules(
List[str], facultatif) — Une liste des modules que nous conservons en type de donnéestorch.float32. - offload_8bit_bnb (
bool, facultatif) — Indique s'il faut activer ou non le déchargement des modules 8 bits sur le CPU/le disque. - strict (
bool, facultatif, par défautFalse) — Indique s'il faut imposer strictement que les clés du state_dict du checkpoint correspondent aux clés du state_dict du modèle. - full_state_dict (
bool, facultatif, valeur par défautTrue) — si cette valeur est définie surTrue, tous les tenseurs du state_dict chargé seront regroupés. Aucun ShardedTensor ni DTensor ne sera présent dans le state_dict chargé. - broadcast_from_rank0 (
False, facultatif, valeur par défautFalse) — lorsque l’option estTrue, un groupe de processus distribuéProcessGroupdoit être initialisé. Le rank0 doit recevoir un state_dict complet et diffusera les tenseurs du state_dict un par un aux autres ranks. Les autres ranks recevront les tenseurs et les fractionneront (le cas échéant) en fonction des shards locaux du modèle.
Charge un point de contrôle (éventuellement fragmenté) à l'intérieur d'un modèle, en envoyant éventuellement les poids vers un appareil donné au fur et à mesure de leur chargement.
Une fois chargé sur les différents appareils, vous devez toujours appeler dispatch_model() sur votre modèle pour le rendre exécutable. Pour regrouper le chargement du point de contrôle et la distribution en un seul appel, utilisez load_checkpoint_and_dispatch().
accelerate.utils.load_offloaded_weights
< source >( modelindexoffload_folder )
Charge les poids depuis le dossier de déchargement dans le modèle.
accelerate.utils.load_state_dict
< source >( checkpoint_filedevice_map = None )
Paramètres
- checkpoint_file (
str) — Le chemin du point de contrôle à charger. - device_map (
Dict[str, Union[int, str, torch.device]], facultatif) — Une carte qui spécifie l’emplacement de chaque sous-module. Elle n’a pas besoin d’être affinée au niveau de chaque nom de paramètre/buffer : dès qu’un nom de module est inclus, tous ses sous-modules seront envoyés sur le même appareil.
Charge un point de contrôle à partir d'un fichier donné. Si le point de contrôle est au format safetensors et qu'une carte de périphériques est transmise, les poids peuvent être chargés rapidement directement sur le GPU.
accelerate.utils.offload_state_dict
< source >( save_dir: str | os.PathLikestate_dict: dict )
Décharger un état de dictionnaire dans un dossier donné.
accelerate.utils.retie_parameters
< source >( modeltied_params )
Retie les paramètres liés dans un modèle donné si le lien a été rompu (par exemple lors de l’ajout de 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 )
Paramètres
- module (
torch.nn.Module) — Le module dans lequel se trouve le tenseur que nous souhaitons déplacer. - tensor_name (
str) — Le nom complet du paramètre/buffer. - device (
int,stroutorch.device) — L'appareil sur lequel définir le tenseur. - value (
torch.Tensor, facultatif) — La valeur du tenseur (utile lors du passage de l’appareil meta à tout autre appareil). - dtype (
torch.dtype, facultatif) — Si une valeur est transmise, la valeur du paramètre sera convertie en cedtype. Sinon,valuesera convertie en le dtype du paramètre existant dans le modèle. - fp16_statistics (
torch.HalfTensor, facultatif) — La liste des statistiques fp16 à définir sur le module, utilisée pour la sérialisation de modèles 8 bits. - tied_params_map (Dict[int, Dict[torch.device, torch.Tensor]], facultatif, par défaut
None) — Une correspondance entre les pointeurs de données actuels et des dictionnaires d’appareils vers les poids liés déjà distribués. Pour un appareil d’exécution donné, ce paramètre est utile pour réutiliser le premier pointeur disponible d’un poids partagé sur l’appareil pour tous les autres, au lieu de dupliquer la mémoire. - non_blocking (
bool, facultatif, par défautFalse) — SiTrue, le transfert vers le périphérique sera asynchrone par rapport à l'hôte, si possible. - clear_cache (
bool, facultatif, par défautTrue) — Indique s'il faut ou non vider le cache de l'appareil après avoir placé le tenseur sur l'appareil.
Une fonction utilitaire pour placer un tenseur donné (paramètre ou buffer) d'un module sur un appareil spécifique (notez que faire param.to(device) crée un nouveau tenseur non lié au paramètre, d'où la nécessité de cette fonction).
accelerate.utils.get_module_children_bottom_up
< source >( model: Modulereturn_fqns: bool = False ) → list[torch.nn.Module]
Parcourez le modèle dans l'ordre de bas en haut et retournez les modules enfants dans cet ordre.
Parallèle
Celles-ci incluent des utilitaires généraux qui doivent être utilisés lors du travail en parallèle.
accelerate.utils.extract_model_from_parallel
< source >( modelkeep_fp32_wrapper: bool = Truekeep_torch_compile: bool = Truerecursive: bool = False ) → torch.nn.Module
Paramètres
- model (
torch.nn.Module) — Le modèle à extraire. - keep_fp32_wrapper (
bool, facultatif) — Indique s'il faut supprimer les hooks de précision mixte du modèle. - keep_torch_compile (
bool, facultatif) — Indique s'il faut déballer le modèle compilé. - recursive (
bool, facultatif, par défautFalse) — Indique s'il faut extraire récursivement tous les cas demodule.moduledemodelainsi que dérouler récursivement les sous-couches enfants, et non uniquement les conteneurs distribués de premier niveau.
Retourne
torch.nn.Module
Le modèle extrait.
Extraire un modèle de ses conteneurs distribués.
accelerate.utils.save
< source >( objfsave_on_each_node: bool = Falsesafe_serialization: bool = False )
Paramètres
- obj — Les données à enregistrer
- f — Le fichier (ou objet semblable à un fichier) à utiliser pour enregistrer les données
- save_on_each_node (
bool, facultatif, valeur par défautFalse) — Indique s'il faut enregistrer uniquement sur le processus principal global - safe_serialization (
bool, facultatif, valeur par défautFalse) — Indique s'il faut enregistrerobjen utilisantsafetensorsou la méthode traditionnelle de PyTorch (qui utilisepickle).
Enregistrez les données sur le disque. Utilisez à la place de torch.save().
Remplacement compatible en tant que tel de torch.load() qui permet d'utiliser weights_only si la version de torch est 2.4.0 ou supérieure. Sinon, l'argument est ignoré.
Ajoutera également (puis retirera) une exception pour les tableaux numpy
Introduit un point de synchronisation dans le script, garantissant que tous les processus ont atteint ce point avant de continuer.
Assurez-vous que tous les processus atteindront cette instruction, sinon l'un de vos processus restera bloqué indéfiniment.
Aléatoire
Ces utilitaires concernent la configuration et la synchronisation de tous les états aléatoires.
accelerate.utils.set_seed
< source >( seed: intdevice_specific: bool = Falsedeterministic: bool = False )
Paramètres
- seed (
int) — La graine à définir. - device_specific (
bool, facultatif, par défautFalse) — Indique s'il faut faire varier légèrement la graine sur chaque appareil à l'aide deself.process_index. - deterministic (
bool, facultatif, par défautFalse) — Indique s'il faut utiliser des algorithmes déterministes lorsque ceux-ci sont disponibles. Peut ralentir l'entraînement.
Fonction utilitaire pour un comportement reproductible afin de définir la graine dans 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
Ces utilitaires sont utiles lors de l'utilisation de PyTorch avec XLA.
accelerate.utils.install_xla
< source >( upgrade: bool = False )
Fonction utilitaire pour installer les roues xla appropriées en fonction de la version de torch dans Google Colaboratory.
Chargement des poids du modèle
Celles-ci incluent des utilitaires utiles pour charger des points de contrôle.
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 )
Paramètres
- model (
torch.nn.Module) — Le modèle dans lequel nous souhaitons charger un point de contrôle. - checkpoint (
strouos.PathLike) — Le dossier de checkpoint à charger. Il peut s'agir de :- un chemin vers un fichier contenant un état de modèle complet
- un chemin vers un fichier
.jsoncontenant l'index d'un point de contrôle fragmenté - un chemin vers un dossier contenant un fichier
.index.jsonunique et les fragments d'un point de contrôle. - un chemin vers un dossier contenant un fichier pytorch_model.bin ou model.safetensors unique.
- device_map (
Dict[str, Union[int, str, torch.device]], facultatif) — Une carte qui spécifie l’emplacement de chaque sous-module. Elle n’a pas besoin d’être affinée au niveau de chaque nom de paramètre/buffer : dès qu’un nom de module est inclus, tous ses sous-modules seront envoyés sur le même appareil. - offload_folder (
strouos.PathLike, facultatif) — Si ladevice_mapcontient la valeur"disk", le dossier où les poids seront déchargés. - dtype (
stroutorch.dtype, facultatif) — Si fourni, les poids seront convertis en ce type lors du chargement. - offload_state_dict (
bool, facultatif, valeur par défautFalse) — SiTrue, déplace temporairement le dictionnaire d’état CPU sur le disque dur pour éviter un épuisement de la RAM CPU si le poids du dictionnaire d’état CPU + le plus grand fragment ne tient pas. - offload_buffers (
bool, facultatif, par défautFalse) — Indique s'il faut inclure les tampons (buffers) dans les poids déchargés sur le disque. - keep_in_fp32_modules(
List[str], facultatif) — Une liste des modules que nous conservons en type de donnéestorch.float32. - offload_8bit_bnb (
bool, facultatif) — Indique s'il faut activer ou non le déchargement des modules 8 bits sur le CPU/le disque. - strict (
bool, facultatif, par défautFalse) — Indique s'il faut imposer strictement que les clés du state_dict du checkpoint correspondent aux clés du state_dict du modèle. - full_state_dict (
bool, facultatif, valeur par défautTrue) — si cette valeur est définie surTrue, tous les tenseurs du state_dict chargé seront regroupés. Aucun ShardedTensor ni DTensor ne sera présent dans le state_dict chargé. - broadcast_from_rank0 (
False, facultatif, valeur par défautFalse) — lorsque l’option estTrue, un groupe de processus distribuéProcessGroupdoit être initialisé. Le rank0 doit recevoir un state_dict complet et diffusera les tenseurs du state_dict un par un aux autres ranks. Les autres ranks recevront les tenseurs et les fractionneront (le cas échéant) en fonction des shards locaux du modèle.
Charge un point de contrôle (éventuellement fragmenté) à l'intérieur d'un modèle, en envoyant éventuellement les poids vers un appareil donné au fur et à mesure de leur chargement.
Une fois chargé sur les différents appareils, vous devez toujours appeler dispatch_model() sur votre modèle pour le rendre exécutable. Pour regrouper le chargement du point de contrôle et la distribution en un seul appel, utilisez load_checkpoint_and_dispatch().
Quantification
Celles-ci incluent des utilitaires utiles pour quantiser un modèle.
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
Paramètres
- model (
torch.nn.Module) — Modèle d’entrée. Le modèle peut être déjà chargé ou sur le méta-appareil - bnb_quantization_config (
BnbQuantizationConfig) — Les paramètres de quantification bitsandbytes - weights_location (
strouos.PathLike) — Le dossier weights_location à charger. Il peut s'agir de :- un chemin vers un fichier contenant un état de modèle complet
- un chemin vers un fichier
.jsoncontenant l'index d'un point de contrôle fragmenté - un chemin vers un dossier contenant un fichier
.index.jsonunique et les fragments d'un point de contrôle. - un chemin vers un dossier contenant un fichier pytorch_model.bin unique.
- device_map (
Dict[str, Union[int, str, torch.device]], facultatif) — Une carte qui spécifie l’emplacement de chaque sous-module. Elle n’a pas besoin d’être affinée au niveau de chaque nom de paramètre/buffer : dès qu’un nom de module est inclus, tous ses sous-modules seront envoyés sur le même appareil. - no_split_module_classes (
List[str], facultatif) — Une liste de noms de classes de couches qui ne doivent jamais être réparties sur plusieurs appareils (par exemple, toute couche disposant d'une connexion résiduelle). - max_memory (
Dict, facultatif) — Un dictionnaire associant un identifiant de périphérique à la mémoire maximale. Par défaut, la valeur est la mémoire maximale disponible si non définie. - offload_folder (
strouos.PathLike, facultatif) — Si ladevice_mapcontient la valeur"disk", le dossier où les poids seront déchargés. - offload_state_dict (
bool, facultatif, valeur par défautFalse) — SiTrue, déplace temporairement le dictionnaire d’état CPU sur le disque dur pour éviter un épuisement de la RAM CPU si le poids du dictionnaire d’état CPU + le plus grand fragment ne tient pas.
Retourne
torch.nn.Module
Le modèle quantifié
Cette fonction quantise le modèle d'entrée avec la configuration associée transmise dans bnb_quantization_config. Si le
modèle est sur le périphérique meta, nous chargerons et répartirons les poids selon la device_map transmise. Si le
modèle est déjà chargé, nous quantiserons le modèle et le placerons sur le GPU,