Accelerate documentation
实用函数和类
实用函数和类
以下是 🤗 Accelerate 提供的各种实用函数,按使用场景分类。
常量
在 🤗 Accelerate 中用于参考的常量
以下是使用 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
以下是使用 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"
数据类
这些是 🤗 Accelerate 中广泛使用的基础 dataclass,可以作为参数传入。
独立
这些是用于检查的独立 dataclass,例如所使用的分布式系统的类型
表示计算环境的类型。
值:
- LOCAL_MACHINE — 私有/自定义集群硬件。
- AMAZON_SAGEMAKER — 将 Amazon SageMaker 作为计算环境。
表示一种分布式环境类型。
值:
- 否 — 不是分布式环境,仅为单进程。
- MULTI_CPU — 在多个 CPU 节点上进行分布式。
- MULTI_GPU — 在多个 GPU 上分布式运行。
- MULTI_MLU — 在多个 MLU 上进行分布式。
- MULTI_SDAA — 分布在多个 SDAAs 上。
- MULTI_MUSA — 在多个 MUSA 上分布式运行。
- MULTI_NPU — 在多个 NPU 上进行分布式。
- MULTI_XPU — 在多个 XPU 上进行分布式。
- MULTI_HPU — 在多个 HPU 上进行分布式。
- MULTI_NEURON — 分布在多个 Neuron 核心上。
- DEEPSPEED — 使用 DeepSpeed。
- FSDP — 使用完全分片数据并行(FSDP)。
- XLA — 使用 TorchXLA。
- MEGATRON_LM — 使用 Megatron-LM。
表示一个 dynamo 后端(参见 https://pytorch.org/docs/stable/torch.compiler.html)。
值:
- 否 — 请勿使用 torch dynamo。
- EAGER — 使用 PyTorch 运行提取的 GraphModule。这在调试 TorchDynamo 问题时非常有用。
- AOT_EAGER — 使用 AotAutograd 但不使用编译器,即仅使用 PyTorch eager 来执行 AotAutograd 提取的前向和反向图。这有助于调试,但通常不会带来性能提升。
- INDUCTOR — 通过利用代码生成的 Triton 内核,使用带有 AotAutograd 和 cudagraphs 的 TorchInductor 后端。阅读更多
- AOT_TS_NVFUSER — 使用 AotAutograd/TorchScript 的 nvFuser。阅读更多
- NVPRIMS_NVFUSER — 基于 PrimTorch 的 nvFuser。阅读更多
- CUDAGRAPHS — 结合 AotAutograd 使用 cudagraphs。阅读更多
- OFI — 使用 Torchscript 的 optimize_for_inference。仅用于推理。阅读更多
- FX2TRT — 使用 Nvidia TensorRT 进行推理优化。仅支持推理。阅读更多
- ONNXRT — 使用 ONNXRT 在 CPU/GPU 上进行推理。仅支持推理。阅读更多
- TENSORRT — 使用 ONNXRT 运行 TensorRT 以进行推理优化。阅读更多
- AOT_TORCHXLA_TRACE_ONCE — 使用 Pytorch/XLA 配合 TorchDynamo 优化,用于训练。阅读更多
- TORCHXLA_TRACE_ONCE — 使用 Pytorch/XLA 配合 TorchDynamo 优化,用于推理。阅读更多
- TVM — 使用 Apache TVM 进行推理优化。阅读更多
- HPU_BACKEND — 使用 HPU 后端进行推理优化。
- NEURON — 使用 AWS Neuron 后端来支持 Trainium/Inferentia。
表示支持的实验跟踪器类型
值:
- ALL — 环境中所有受支持的可用跟踪器
- TENSORBOARD — 将 TensorBoard 用作实验跟踪器
- WANDB — 将 wandb 用作实验跟踪器
- TRACKIO — 将 trackio 用作实验跟踪器
- COMETML — 将 comet_ml 用作实验跟踪器
- MLFLOW — 将 mlflow 用作实验跟踪器
- CLEARML — 将 clearml 用作实验跟踪器
- DVCLIVE — 将 dvclive 用作实验跟踪器
- SWANLAB — 将 swanlab 用作实验跟踪器
表示用于浮点值的精度类型
值:
- 否 — 使用全精度(FP32)
- FP16 — 使用半精度
- BF16 — 使用脑浮点精度
表示一种分布式环境类型。
值:
- 否 — 不是分布式环境,仅为单进程。
- DATA_PARALLEL — 使用 sagemaker 分布式数据并行。
- MODEL_PARALLEL — 使用 sagemaker 分布式模型并行。
关键字参数
这些是 PyTorch 生态系统中特定交互的可配置参数,由 Accelerate 在底层进行处理。
在您的 Accelerator 中使用此对象,以自定义 torch.autocast 的行为。有关每个参数的更多信息,请参阅此 上下文管理器 的文档。
类 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> )
在您的 Accelerator 中使用此对象,以自定义模型如何被 torch.nn.parallel.DistributedDataParallel 包装。有关每个参数的更多信息,请参阅此 wrapper 的文档。
类 accelerate.GradScalerKwargs
< source >( init_scale: float = 65536.0growth_factor: float = 2.0backoff_factor: float = 0.5growth_interval: int = 2000enabled: bool = True )
在您的 Accelerator 中使用此对象来自定义混合精度的行为,特别是如何创建所使用的 torch.amp.GradScaler 或 torch.cuda.amp.GradScaler。有关每个参数的更多信息,请参阅此 scaler 的文档。
类 accelerate.InitProcessGroupKwargs
< source >( backend: str | None = 'nccl'init_method: str | None = Nonetimeout: datetime.timedelta | None = None )
在您的 Accelerator 中使用此对象,以自定义分布式进程的初始化。有关每个参数的更多信息,请参阅此 方法 的文档。
注意:如果将 timeout 设置为 None,则默认值将基于 backend 的设置而定。
实现 to_kwargs() 方法的内部混入类,用于 dataclass。
返回一个字典,其中包含与该类默认值不同的属性及其值。
插件
这些是可以传递给 Accelerator 对象的插件。虽然它们在文档的其他位置有定义,但为了方便起见,这里列出了所有可用的插件:
类 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 )
参数
- hf_ds_config (
Any,默认为None) — DeepSpeed 配置文件的路径、字典或accelerate.utils.deepspeed.HfDeepSpeedConfig类的对象。 - gradient_accumulation_steps (
int,默认为None) — 在更新优化器状态之前累积梯度的步数。如果未设置,将直接使用Accelerator中的值。 - gradient_clipping (
float,默认为None) — 启用梯度裁剪,并指定裁剪值。 - zero_stage (
int,默认为None) — 可选值为 0、1、2、3。默认值将从环境变量中获取。 - is_train_batch_min (
bool,默认为True) — 如果同时指定了训练和评估数据加载器,此参数将决定train_batch_size。 - offload_optimizer_device (
str,默认为None) — 可选值为 none|cpu|nvme。仅适用于 ZeRO Stages 2 和 3。 - offload_param_device (
str,默认为None) — 可选值为 none|cpu|nvme。仅适用于 ZeRO Stage 3。 - offload_optimizer_nvme_path (
str,默认为None) — 可选值为 /nvme|/local_nvme。仅适用于 ZeRO Stage 3。 - offload_param_nvme_path (
str,默认为None) — 可选值为 /nvme|/local_nvme。仅适用于 ZeRO Stage 3。 - zero3_init_flag (
bool,默认为None) — 用于指示是否保存 16 位模型的标志。仅适用于 ZeRO Stage-3。 - zero3_save_16bit_model (
bool,默认为None) — 用于指示是否保存 16 位模型的标志。仅适用于 ZeRO Stage-3。 - transformer_moe_cls_names (
str,默认为None) — 以逗号分隔的 Transformers MoE 层类名列表(区分大小写)。例如,MixtralSparseMoeBlock、Qwen2MoeSparseMoeBlock、JetMoEAttention、JetMoEBlock等。
此插件用于集成 DeepSpeed。
deepspeed_config_process
< source >( prefix = ''mismatches = Noneconfig = Nonemust_match = True**kwargs )
使用 kwargs 中的值处理 DeepSpeed 配置。
设置 HfDeepSpeedWeakref 以使用当前的 deepspeed 插件配置
类 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 )
参数
- fsdp_version (
int,默认为1) — 要使用的 FSDP 版本。默认为 1。如果设置为 2,启动器会期望配置已转换为 FSDP2 格式。 - sharding_strategy (
Union[str, torch.distributed.fsdp.ShardingStrategy],默认为'FULL_SHARD') — 要使用的分片策略。应为str或torch.distributed.fsdp.fully_sharded_data_parallel.ShardingStrategy的实例。已弃用,建议使用reshard_after_forward。 - reshard_after_forward (
Union[str, torch.distributed.fsdp.ShardingStrategy, bool],当fsdp_version=1时默认为'FULL_SHARD',当fsdp_version=2时默认为True) — 要使用的分片策略。如果fsdp_version设置为 2,则应为 bool 类型;否则应为str或torch.distributed.fsdp.fully_sharded_data_parallel.ShardingStrategy的实例。 - backward_prefetch (
Union[str, torch.distributed.fsdp.BackwardPrefetch],默认为'NO_PREFETCH') — 要使用的反向预取策略。应为str或torch.distributed.fsdp.fully_sharded_data_parallel.BackwardPrefetch的实例。 - mixed_precision_policy (
Optional[Union[dict, str, torch.distributed.fsdp.MixedPrecision, torch.distributed.fsdp.MixedPrecisionPolicy]],默认为None) — 用于启用 FullyShardedDataParallel 混合精度训练的配置。如果传入dict,它应包含以下键:param_dtype、reduce_dtype和buffer_dtype;如果fsdp_version设置为 2,则可以是torch.distributed.fsdp.MixedPrecisionPolicy的实例。如果传入str,它应为以下值之一:fp8、fp16、bf16、fp32,用于设置param_dtype、reduce_dtype和buffer_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],默认为False) — 是否将参数卸载到 CPU。应为bool类型,或者当fsdp_version设置为 2 时,应为torch.distributed.fsdp.fully_sharded_data_parallel.CPUOffload或torch.distributed.fsdp.fully_sharded_data_parallel.CPUOffloadPolicy的实例。 - ignored_modules (
Optional[Union[Iterable[torch.nn.Module], str]],默认为None) — 使用 FSDP 进行包装时需要忽略的模块列表。如果传入字符串,则使用正则表达式 fullmatch 按名称匹配模块。如果fsdp_version设置为 2,这些模块将被转换为参数并使用。 - state_dict_type (
Union[str, torch.distributed.fsdp.StateDictType],默认为'FULL_STATE_DICT') — 要使用的 state dict 类型。如果为字符串,则必须是full_state_dict、local_state_dict或sharded_state_dict之一。 - state_dict_config (
Optional[Union[torch.distributed.fsdp.FullStateDictConfig, torch.distributed.fsdp.ShardedStateDictConfig],默认为None) — 要使用的 state dict 配置。如果未传入,则根据state_dict_type确定。 - optim_state_dict_config (
Optional[Union[torch.distributed.fsdp.FullOptimStateDictConfig, torch.distributed.fsdp.ShardedOptimStateDictConfig],默认为None) — 要使用的 Optim state dict 配置。如果未传入,则根据state_dict_type确定。 - limit_all_gathers (
bool,默认为True) — 是否让 FSDP 显式同步 CPU 线程,以防止过多的 in-flight all-gathers。此 bool 仅影响调度 all-gathers 的分片策略。启用此选项有助于减少 CUDA malloc 重试次数。 - use_orig_params (
bool,默认为False) — 是否使用原始参数作为优化器的参数。 - param_init_fn (
Optional[Callable[[torch.nn.Module], None],默认为None) — 一个Callable[torch.nn.Module] -> None,用于指定当前位于 meta 设备上的模块应如何初始化到实际设备上。仅当sync_module_states为True时适用。默认是一个lambda,它会对模块调用to_empty。 - sync_module_states (
bool,默认为False) — 是否应让每个单独包装的 FSDP 单元从 rank 0 广播模块参数,以确保初始化后所有 rank 上的参数一致。除非cpu_ram_efficient_loading为True,否则默认为False;若为True,则会强制启用。 - forward_prefetch (
bool,默认为False) — 是否让 FSDP 在前向传播执行期间显式预取下一次即将进行的 all-gather。仅适用于静态图。 - activation_checkpointing (
bool, 默认为False) — 一种通过清除特定层的激活值并在反向传播期间重新计算它们来降低内存使用量的技术。实际上,这是以额外的计算时间换取更低的内存占用。 - cpu_ram_efficient_loading (
bool,默认为None) — 如果为 True,则只有第一个进程加载预训练模型检查点,而其他所有进程的权重均为空。仅适用于 Transformers。使用此选项时,sync_module_states必须为True。 - transformer_cls_names_to_wrap (
Optional[List[str]],默认为None) — 要包装的 Transformer 层类名列表。仅当auto_wrap_policy为transformer_based_wrap时适用。 - min_num_params (
Optional[int],默认为None) — 模块被包装所需的最少参数量。仅在auto_wrap_policy为size_based_wrap时适用。
此插件用于启用完全分片数据并行。
给定 model,根据传入的策略创建 auto_wrap_policy,并判断是否可以使用 transformer_cls_to_wrap
设置 FSDP 的混合精度策略
根据 StateDictType 设置状态字典配置。
验证混合精度策略,将其抽象化,以便在不需要时避免引入相关导入。
类 accelerate.utils.GradientAccumulationPlugin
< source >( num_steps: int = Noneadjust_scheduler: bool = Truesync_with_dataloader: bool = Truesync_each_batch: bool = False )
用于配置梯度累积行为的插件。你只能向 Accelerator 传递 gradient_accumulation_plugin 或 gradient_accumulation_steps 其中之一。同时传递两者会引发错误。
类 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 )
参数
- tp_degree (
int, 默认为None) — 张量并行度。 - pp_degree (
int,默认为None) — 流水线并行度。 - num_micro_batches (
int, 默认为None) — 微批次的数量。 - gradient_clipping (
float,默认为None) — 基于全局 L2 范数的梯度裁剪值(设为 0 以禁用)。 - sequence_parallelism (
bool, 默认为None) — 启用序列并行。 - recompute_activations (
bool,默认为None) — 启用选择性激活重计算。 - use_distributed_optimizer (
bool,默认为None) — 启用分布式优化器。 - pipeline_model_parallel_split_rank (
int,默认为None) — 编码器与解码器应拆分所在的 Rank。 - num_layers_per_virtual_pipeline_stage (
int,默认为None) — 每个虚拟流水线阶段的层数。 - is_train_batch_min (
str,默认为True) — 如果同时指定了训练和评估数据加载器,此参数将决定micro_batch_size。 - train_iters (
int, 默认为None) — 所有训练运行中要训练的样本总数。请注意,使用MegatronLMDummyScheduler时,应提供 train-iters 或 train-samples 其中之一。 - train_samples (
int, 默认为None) — 所有训练运行中用于训练的样本总数。请注意,使用MegatronLMDummyScheduler时,应提供 train-iters 或 train-samples 其中之一。 - weight_decay_incr_style (
str,默认为'constant') — 权重衰减增量函数。choices=[“constant”, “linear”, “cosine”]。 - start_weight_decay (
float,默认为None) — L2 正则化的初始权重衰减系数。 - end_weight_decay (
float,默认为None) — L2 正则化中运行结束时的权重衰减系数。 - lr_decay_style (
str,默认为'linear') — 学习率衰减函数。choices=[‘constant’, ‘linear’, ‘cosine’]。 - lr_decay_iters (
int,默认为None) — 学习率衰减的迭代次数。如果为 None,则默认为train_iters。 - lr_decay_samples (
int,默认为None) — 用于学习率衰减的样本数量。如果为 None,则默认为train_samples。 - lr_warmup_iters (
int,默认为None) — 用于线性预热学习率的迭代次数。 - lr_warmup_samples (
int,默认为None) — 用于线性预热学习率的样本数量。 - lr_warmup_fraction (
float, 默认为None) — 用于线性预热学习率的 lr-warmup-(iters/samples) 比例。 - min_lr (
float,默认为0) — 学习率的最小值。调度器会将低于此阈值的值裁剪掉。 - consumed_samples (
List,默认为None) — 与传入accelerator.prepare的 dataloader 顺序一致,已消耗的样本数量。 - no_wd_decay_cond (
Optional,默认为None) — 用于禁用权重衰减的条件。 - scale_lr_cond (
Optional,默认为None) — 用于缩放学习率的条件。 - lr_mult (
float,默认为1.0) — 学习率乘数。 - megatron_dataset_flag (
bool,默认为False) — 数据集格式是否遵循 Megatron-LM Indexed/Cached/MemoryMapped 格式。 - seq_length (
int,默认为None) — 要处理的最大序列长度。 - encoder_seq_length (
int,默认为None) — 编码器处理的最大序列长度。 - decoder_seq_length (
int,默认为None) — 解码器要处理的最大序列长度。 - tensorboard_dir (
str, 默认为None) — 保存 tensorboard 日志的路径。 - set_all_logging_options (
bool,默认为False) — 是否设置所有日志选项。 - eval_iters (
int,默认为100) — 用于运行验证/测试评估的迭代次数。 - eval_interval (
int,默认为1000) — 在验证集上运行评估的间隔。 - return_logits (
bool,默认为False) — 是否返回模型的 logits。 - custom_train_step_class (
Optional,默认为None) — 自定义训练步骤类。 - custom_train_step_kwargs (
Optional,默认为None) — 自定义训练步骤的关键字参数。 - custom_model_provider_function (
Optional,默认为None) — 自定义模型提供函数。 - custom_prepare_model_function (
Optional,默认为None) — 自定义的模型准备函数。 - custom_megatron_datasets_provider_function (
Optional,默认为None) — 自定义的 megatron train_valid_test 数据集提供函数。 - custom_get_batch_function (
Optional,默认为None) — 自定义的获取批次函数。 - custom_loss_function (
Optional,默认为None) — 自定义损失函数。 - other_megatron_args (
Optional,默认为None) — 其他 Megatron-LM 参数。请参阅 Megatron-LM。
用于 Megatron-LM 的插件,支持张量、流水线、序列和数据并行。同时支持选择性激活重计算和优化的融合内核。
类 accelerate.utils.TorchDynamoPlugin
< source >( backend: DynamoBackend = Nonemode: str = Nonefullgraph: bool = Nonedynamic: bool = Noneoptions: Any = Nonedisable: bool = Falseuse_regional_compilation: bool = None )
参数
- backend (
DynamoBackend,默认为None) — 一个有效的 Dynamo 后端。有关更多详细信息,请参阅 https://pytorch.org/docs/stable/torch.compiler.html。 - mode (
str,默认为None) — 可选值为 ‘default’、‘reduce-overhead’ 或 ‘max-autotune’。 - fullgraph (
bool,默认为None) — 是否允许将模型拆分为多个子图。 - dynamic (
bool,默认为None) — 是否使用动态形状进行追踪。 - options (
Any,默认为None) — 传递给后端的选项字典。 - disable (
bool,默认为False) — 在测试时将 torch.compile() 变为空操作 - use_regional_compilation (
bool,默认为None) — 用于通过针对同一类的重复块并按顺序编译它们以命中编译器缓存,从而减少 torch.compile() 的冷启动编译时间。例如,在GPT2LMHeadModel中,重复的块/类是GPT2Block,可以通过model.transformer.h[0]访问。模型的其余部分(例如 model.lm_head)将单独编译。
此插件用于使用 PyTorch 2.0 编译模型
配置
这些是可以进行配置并传递给相应集成的类
class 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 )
参数
- load_in_8bit (
bool,默认为False) — 启用 8 位量化。 - llm_int8_threshold (
float,默认为6.0) — 外轮廓阈值。仅在load_in_8bit=True时有效。 - load_in_4bit (
bool,默认为False) — 启用 4bit 量化。 - bnb_4bit_quant_type (
str, 默认为fp4) — 在bnb.nn.Linear4Bit层中设置量化数据类型。可选值为 {‘fp4’,‘np4’}。 - bnb_4bit_use_double_quant (
bool,默认为False) — 启用嵌套量化,即对第一次量化得到的量化常数再次进行量化。 - bnb_4bit_compute_dtype (
bool, 默认为fp16) — 此参数设置计算类型,该类型可能与输入时的类型不同。例如,输入可能是 fp32,但为了加速,计算可以设置为 bf16。可选值为 {‘fp32’,‘fp16’,‘bf16’}。 - torch_dtype (
torch.dtype,默认为None) — 此参数用于设置其余未量化层的 dtype。bitsandbytes库建议对于 8 位模型,将该值设置为torch.float16;对于 4 位模型,则使用与计算 dtype 相同的 dtype。 - skip_modules (
List[str],默认为None) — 明确列出我们不予量化的模块。这些模块的数据类型将为torch_dtype。 - keep_in_fp32_modules (
List,默认为None) — 明确列出我们不予量化的模块。这些模块将保持为torch.float32。
用于启用 BitsAndBytes 4 位和 8 位量化的插件
类 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 )
参数
- split_batches (
bool,默认为False) — 是否让 accelerator 将 dataloader 生成的批次拆分到各个设备上。如果为True,在任何类型的分布式进程中使用的实际批次大小都相同,但它必须是num_processes的整数倍。如果为False,实际使用的批次大小将是脚本中设置的值乘以进程数。 - dispatch_batches (
bool,默认为None) — 如果设置为True,则由 Accelerator 准备的 dataloader 仅在主进程上进行迭代,随后将批次拆分并广播到每个进程。对于底层数据集为IterableDataset的DataLoader,默认值为True,否则为False。 - even_batches (
bool,默认为True) — 如果设置为True,当所有进程的总批大小无法整除数据集时,会复制数据集开头的样本,以便将批次在所有工作进程之间平均分配。 - use_seedable_sampler (
bool,默认为False) — 是否使用完全可播种的随机采样器(data_loader.SeedableRandomSampler)。通过采用不同的采样技术,确保训练结果完全可复现。虽然不同种子之间的结果可能存在差异,但在使用多个不同种子进行比较时,平均而言这些差异可以忽略不计。为了获得最佳效果,还应与 set_seed() 一起使用。 - data_seed (
int, 默认为None) — 在使用use_seedable_sampler时,底层生成器所使用的种子。如果为None,生成器将使用 torch 的当前默认种子。 - non_blocking (
bool, 默认为False) — 如果设置为True,由 Accelerator 准备的 dataloader 将使用非阻塞的主机到设备传输,从而更好地实现 dataloader 通信与计算之间的重叠。建议将准备好的 dataloader 的pin_memory设置为True以确保其正常工作。 - use_stateful_dataloader (
bool,默认为False) — 如果设置为True,则由 Accelerator 准备的 dataloader 将基于 torchdata.StatefulDataLoader。 这需要安装支持 StatefulDataLoader 的torchdata0.8.0 或更高版本。
调用 accelerator.prepare 时,用于配置数据加载器相关项的设置。
类 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 )
参数
- project_dir (
str,默认为None) — 用于存储数据的目录路径。 - logging_dir (
str,默认为None) — 用于存储本地兼容日志记录器日志的目录路径。如果为 None,则默认为project_dir。 - automatic_checkpoint_naming (
bool,默认为False) — 是否自动为保存的状态迭代命名。 - total_limit (
int,默认为None) — 要保留的已保存状态总数上限。 - iteration (
int,默认为0) — 当前保存的迭代次数。 - save_on_each_node (
bool,默认为False) — 在进行多节点分布式训练时,是否在每个节点上保存模型和检查点,还是仅在主要节点上保存。
根据内部项目需求配置 Accelerator 对象。
将 self.project_dir 和 self.logging_dir 设置为相应的值。
环境变量
这些是可根据不同使用场景启用的环境变量
ACCELERATE_DEBUG_MODE(str):是否以调试模式运行 accelerate。更多信息请参见此处。
数据操作与运算
这些包括模拟相同 torch 操作的数据操作,但可用于分布式进程。
accelerate.utils.broadcast
< source >( tensorfrom_process: int = 0 )
在嵌套的张量列表/元组/字典中,递归地将张量广播到所有设备。
accelerate.utils.broadcast_object_list
< source >( object_listfrom_process: int = 0 )
将一个可 pickle 的对象列表从一个进程广播到其他进程。
accelerate.utils.concatenate
< source >( datadim = 0 )
递归地拼接嵌套列表/元组/字典中形状相同的张量列表中的张量。 如果只有一个数据批次,则按原样返回。
accelerate.utils.convert_to_fp32
< source >( tensor )
递归地将嵌套列表/元组/字典中 FP16/BF16 精度的张量元素转换为 FP32。
递归地从所有设备上的嵌套列表/元组/字典形式的张量中收集张量。
accelerate.utils.gather_object
< source >( object: Any )
递归地从所有设备上的嵌套列表/元组/字典对象中收集对象。
accelerate.utils.get_grad_scaler
< source >( distributed_type: DistributedType = None**kwargs )
一个通用辅助函数,会根据环境初始化正确的 GradScaler 实现并返回它。
accelerate.utils.get_mixed_precision_context_manager
< source >( native_amp: bool = Falseautocast_kwargs: AutocastKwargs = None )
返回用于自动转换混合精度的上下文管理器
递归地在嵌套的列表/元组/字典中查找张量,并将其转换为数字列表。
accelerate.utils.pad_across_processes
< source >( tensordim = 0pad_index = 0pad_first = False )
递归地对来自所有设备的嵌套列表/元组/字典中的张量进行填充,使其具有相同的大小,以便安全地收集。
accelerate.utils.recursively_apply
< source >( funcdata*argstest_type = <function is_torch_tensor at 0x7f8c167ca8d0>error_on_other_type = False**kwargs )
参数
- func (
callable) — 要递归应用的函数。 - data(嵌套列表/元组/字典,包含
test_type接受的对象)— 用于应用func的数据 - *args —
在应用于解包后的数据时,将传递给
func的位置参数。 - test_type (
Callable[[Any], bool],可选,默认为is_torch_tensor) — 用于判断是否应对给定的叶对象应用func的谓词。 - error_on_other_type (
bool,可选,默认为False) — 在解包data后,如果得到的对象使test_type返回False,是否返回错误。如果为False,该函数将保持此类对象不变。 - **kwargs(额外的关键字参数,可选) —
在应用于解包后的数据时,将传递给
func的关键字参数。
递归地对给定基础类型的嵌套列表/元组/字典数据结构应用函数。
accelerate.utils.reduce
< source >( tensorreduction = 'mean'scale = 1.0 )
通过给定操作的均值,在所有进程上递归地归约嵌套列表/元组/字典中的张量列表中的张量。
accelerate.utils.send_to_device
< source >( tensordevicenon_blocking = Falseskip_keys = None )
递归地将嵌套列表/元组/字典中的张量元素发送到指定设备。
accelerate.utils.slice_tensors
< source >( datatensor_sliceprocess_index = Nonenum_processes = None )
递归地对嵌套列表/元组/字典中的张量进行切片。
环境检查
这些功能用于检查当前工作环境的状态,包括操作系统本身的信息、其支持的功能,以及特定依赖项是否已安装。
检查是否支持 bf16,可选择忽略 TPU
检查 MPS 设备是否可用。所需的最低版本为 1.12。
accelerate.utils.is_torch_version
< source >( operation: strversion: str )
使用某个操作将当前的 PyTorch 版本与给定的参考版本进行比较。
检查 torch_xla 是否可用。要在已安装 torch xla 的环境中训练原生 pytorch 任务,请将 USE_TORCH_XLA 设置为 false。
检查是否可通过原生 PyTorch(>=2.7)使用 XPU 加速,以及环境中是否存在 XPU
环境操作
一个上下文管理器,会将传入的每个关键字参数添加到 os.environ 中,并在退出时将其移除。
会将 kwargs 中的值转换为字符串,并将所有键转换为大写。
一个上下文管理器,用于临时清除环境变量。
当此上下文退出时,之前的环境变量将恢复。
accelerate.commands.config.default.write_basic_config
< source >( mixed_precision = 'no'save_location: str = '/home/runner/.cache/huggingface/accelerate/default_config.yaml' )
创建并保存一个基础集群配置,用于在本地机器上运行,该机器可能配备多个 GPU。如果该机器仅包含 CPU,则也会设置 CPU。
首次配置 🤗 Accelerate 时,除了运行 accelerate config,还可以使用 [~utils.write_basic_config] 作为快速配置的替代方案。
将当前进程分配给特定的 NUMA 节点。理想情况下,每个节点至少拥有 2 个 CPU 时效率最高。
此结果在调用之间会被缓存。如果您想覆盖它,请使用 accelerate.utils.environment.override_numa_afifnity。
accelerate.utils.environment.override_numa_affinity
< source >( local_process_index: intverbose: bool | None = None )
覆盖当前进程设置的任何 NUMA 亲和性。此操作开销极大,需要重新计算要设置的亲和性,理想情况下应改用 utils.environment.set_numa_affinity。
用于清理由被装饰的类或函数设置的 accelerate 环境变量的装饰器。
在某些情况下,调用某些类或函数可能会导致设置 accelerate 环境变量,且之后未被清理。例如,当调用:
TrainingArguments(fp16=True, …)
将设置以下环境变量:
ACCELERATE_MIXED_PRECISION=fp16
这可能会影响后续代码,因为该环境变量会覆盖 TrainingArguments(fp16=False)。这在单元测试中尤为相关,因为我们希望避免各个测试之间产生相互影响。使用此装饰器修饰单元测试函数或整个类,以确保每个测试结束后,环境变量都会被清理。该装饰器同时适用于 unittest.TestCase 和普通类(pytest);当用于修饰父类时同样有效。
内存
accelerate.find_executable_batch_size
< source >( function: callable | None = Nonestarting_batch_size: int = 128reduce_batch_size_fn: callable | None = None )
一个基础装饰器,会尝试执行 function。如果因与内存不足或 CUDNN 相关的异常而失败,则将批大小乘以 0.9,并传递给 function
function 必须将 batch_size 参数作为其第一个参数。
建模
这些实用程序与使用 PyTorch 模型进行交互有关
计算模型及其最大层的总大小
accelerate.utils.compute_module_sizes
< source >( model: Moduledtype: str | torch.device | None = Nonespecial_dtypes: dict[str, str | torch.device] | None = Nonebuffers_only: bool = False )
计算给定模型中每个子模块的大小。
accelerate.utils.extract_model_from_parallel
< source >( modelkeep_fp32_wrapper: bool = Truekeep_torch_compile: bool = Truerecursive: bool = False ) → torch.nn.Module
从其分布式容器中提取模型。
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 )
参数
- model (
torch.nn.Module) — 要分析的模型。 - max_memory (
Dict, 可选) — 一个从设备标识符到最大内存的字典。如果未设置,则默认为可用的最大内存。 示例:max_memory={0: "1GB"}。 - no_split_module_classes (
List[str], 可选) — 不应跨设备拆分的层类名列表(例如任何具有残差连接的层)。 - dtype (
str或torch.dtype,可选) — 如果提供,加载时权重将被转换为该类型。 - special_dtypes (
Dict[str, Union[str, torch.device]], 可选) — 如果提供,则指定某些特定权重需要考虑的特殊数据类型(将覆盖用于所有权重的默认 dtype)。 - low_zero (
bool, 可选) — 最小化 GPU 0 上的权重数量,当该 GPU 用于其他操作(例如 Transformers 的 generate 函数)时,这一特性非常实用。
计算一个 max_memory 字典,供 infer_auto_device_map() 使用,以平衡每个可用 GPU 的使用情况。
所有计算都是通过分析模型参数的大小和数据类型来完成的。因此,模型可以位于 meta 设备上(就像在
init_empty_weights上下文管理器中初始化时那样)。
accelerate.utils.get_max_layer_size
< source >( modules: listmodule_sizes: dictno_split_module_classes: list ) → Tuple[int, List[str]]
一个实用函数,用于扫描命名模块列表并返回单个完整层所使用的最大大小。层的定义为:
- 没有直接子模块的模块(仅包含参数和缓冲区)
- 类名位于列表
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 )
参数
- model (
torch.nn.Module) — 要分析的模型。 - max_memory (
Dict, 可选) — 一个从设备标识符到最大内存的字典。如果未设置,则默认为可用的最大内存。 示例:max_memory={0: "1GB"}。 - no_split_module_classes (
List[str], 可选) — 不应跨设备拆分的层类名列表(例如任何具有残差连接的层)。 - dtype (
str或torch.dtype,可选) — 如果提供,加载时权重将被转换为该类型。 - special_dtypes (
Dict[str, Union[str, torch.device]], 可选) — 如果提供,则指定某些特定权重需要考虑的特殊数据类型(将覆盖用于所有权重的默认 dtype)。 - verbose (
bool,可选,默认为False) — 在函数构建 device_map 时,是否提供调试语句。 - clean_result (
bool,可选,默认为True) — 通过将所有位于同一设备上的子模块归为一组,来清理生成的 device_map。 - offload_buffers (
bool,可选,默认为False) — 对于卸载到 CPU 或硬盘上的层,是否同时卸载缓冲区以及参数。 - fallback_allocation (
bool,可选,默认为False) — 当常规分配失败时,尝试使用 BFS 分配一个符合大小限制的模块。
为给定模型计算设备映射,优先分配给 GPU,然后卸载到 CPU,最后卸载到磁盘,
- 我们不会超出任何 GPU 的可用内存。
- 如果需要将层卸载到 CPU,那么 GPU 0 上始终会预留足够的空间,以便将 CPU 上占用空间最大的层重新加载回 GPU。
- 如果需要将数据卸载到 CPU,我们不会超出 CPU 上可用的 RAM。
- 如果需要将层卸载到磁盘,CPU 上始终会保留足够的空间,以便将已卸载到磁盘的层中体积最大的那一层重新加载回 CPU。
所有计算都是通过分析模型参数的大小和数据类型来完成的。因此,模型可以位于 meta 设备上(就像在
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 )
参数
- model (
torch.nn.Module) — 要加载检查点的模型。 - checkpoint (
str或os.PathLike) — 要加载的文件夹检查点。它可以是:- 指向包含完整模型状态字典的文件的路径
- 指向包含分片检查点索引的
.json文件的路径 - 指向一个文件夹的路径,该文件夹包含一个唯一的
.index.json文件和检查点的分片。 - 指向包含唯一的 pytorch_model.bin 或 model.safetensors 文件的文件夹的路径。
- device_map (
Dict[str, Union[int, str, torch.device]], 可选) — 一个映射,用于指定每个子模块应放置的位置。它无需细化到每个参数/缓冲区名称,只要某个模块名称包含在内,其所有子模块都会被发送到同一设备。 - offload_folder (
str或os.PathLike,可选) — 如果device_map包含任何值为"disk"的项,则指定用于卸载权重的文件夹。 - dtype (
str或torch.dtype,可选) — 如果提供,加载时权重将被转换为该类型。 - offload_state_dict (
bool,可选,默认为False) — 如果为True,则会将 CPU 状态字典临时卸载到硬盘上,以避免当 CPU 状态字典的权重加上最大分片无法容纳时耗尽 CPU 内存。 - offload_buffers (
bool,可选,默认为False) — 是否将缓冲区包含在卸载到磁盘的权重中。 - keep_in_fp32_modules(
List[str], 可选) — 一个模块列表,这些模块将保持为torch.float32数据类型。 - offload_8bit_bnb (
bool, 可选) — 是否启用将 8 位模块卸载到 cpu/disk。 - strict (
bool,可选,默认为False) — 是否严格强制检查点 state_dict 中的键与模型的 state_dict 的键相匹配。 - full_state_dict (
bool,可选,默认为True) — 如果设置为True,则加载的 state_dict 中的所有张量都会被收集。加载的 state_dict 中不会包含 ShardedTensor 和 DTensor。 - broadcast_from_rank0 (
False,可选,默认为False) — 当该选项为True时,必须初始化一个分布式ProcessGroup。rank0 应接收完整的 state_dict,并将 state_dict 中的张量逐个广播到其他 rank。其他 rank 将接收这些张量,并根据模型中的本地分片进行分片(如适用)。
在模型中加载(可能分片的)检查点,并在加载时将权重发送到指定设备。
Once loaded across devices, you still need to call dispatch_model() on your model to make it able to run. To group the checkpoint loading and dispatch in one single call, use load_checkpoint_and_dispatch().
accelerate.utils.load_offloaded_weights
< source >( modelindexoffload_folder )
从 offload 文件夹加载权重到模型中。
accelerate.utils.load_state_dict
< source >( checkpoint_filedevice_map = None )
从指定文件加载检查点。如果检查点采用 safetensors 格式并传入了设备映射,则权重可以直接快速加载到 GPU 上。
accelerate.utils.offload_state_dict
< source >( save_dir: str | os.PathLikestate_dict: dict )
在指定文件夹中卸载状态字典。
accelerate.utils.retie_parameters
< source >( modeltied_params )
如果链接已断开(例如在添加钩子时),则重新绑定给定模型中的绑定参数。
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 )
参数
- module (
torch.nn.Module) — 我们要移动的张量所在的模块。 - tensor_name (
str) — 参数/缓冲区的完整名称。 - device (
int、str或torch.device) — 用于设置张量的设备。 - value (
torch.Tensor, 可选) — 张量的值(在从 meta 设备迁移到其他设备时很有用)。 - dtype (
torch.dtype,可选) — 如果传入该值,参数的值将被转换为该dtype。否则,value将被转换为模型中现有参数的 dtype。 - fp16_statistics (
torch.HalfTensor, 可选) — 用于 8 位模型序列化的模块 fp16 统计信息列表。 - tied_params_map (Dict[int, Dict[torch.device, torch.Tensor]], 可选,默认为
None) — 一个映射,将当前数据指针映射到设备到已分发绑定权重的字典。对于给定的执行设备,此参数可用于在设备上复用共享权重的第一个可用指针,供其他所有权重使用,从而避免内存重复。 - non_blocking (
bool,可选,默认为False) — 如果为True,则设备传输在可能的情况下将相对于主机异步执行。 - clear_cache (
bool,可选,默认为True) — 是否将在张量设置到设备后清除设备缓存。
一个辅助函数,用于将模块的给定张量(参数或缓冲区)设置到特定设备上(请注意,执行 param.to(device) 会创建一个未与参数关联的新张量,因此我们需要此函数)。
accelerate.utils.get_module_children_bottom_up
< source >( model: Modulereturn_fqns: bool = False ) → list[torch.nn.Module]
按自底向上的顺序遍历模型,并按该顺序返回子模块。
并行
这些包括在并行工作时应使用的一般实用工具。
accelerate.utils.extract_model_from_parallel
< source >( modelkeep_fp32_wrapper: bool = Truekeep_torch_compile: bool = Truerecursive: bool = False ) → torch.nn.Module
从其分布式容器中提取模型。
accelerate.utils.save
< source >( objfsave_on_each_node: bool = Falsesafe_serialization: bool = False )
将数据保存到磁盘。使用它来替代 torch.save()。
accelerate.utils.load
< source >( fmap_location = None**kwargs )
torch.load() 的兼容替代方案,当 torch 版本为 2.4.0 或更高时,允许使用 weights_only。否则将忽略该关键字参数。
还将添加(随后移除)针对 numpy 数组的异常
在脚本中引入一个阻塞点,确保所有进程都到达此点后再继续执行。
请确保所有进程都会执行到此指令,否则其中一个进程将永久挂起。
随机
这些实用工具与设置和同步所有随机状态相关。
accelerate.utils.set_seed
< source >( seed: intdevice_specific: bool = Falsedeterministic: bool = False )
用于在 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
其中包括在使用 PyTorch 与 XLA 时的一些实用工具。
accelerate.utils.install_xla
< source >( upgrade: bool = False )
一个辅助函数,用于在 Google Colaboratory 中根据 torch 版本安装相应的 xla 轮子。
加载模型权重
其中包括一些用于加载检查点的实用工具。
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 )
参数
- model (
torch.nn.Module) — 要加载检查点的模型。 - checkpoint (
str或os.PathLike) — 要加载的文件夹检查点。它可以是:- 指向包含完整模型状态字典的文件的路径
- 指向包含分片检查点索引的
.json文件的路径 - 指向一个文件夹的路径,该文件夹包含一个唯一的
.index.json文件和检查点的分片。 - 指向包含唯一的 pytorch_model.bin 或 model.safetensors 文件的文件夹的路径。
- device_map (
Dict[str, Union[int, str, torch.device]], 可选) — 一个映射,用于指定每个子模块应放置的位置。它无需细化到每个参数/缓冲区名称,只要某个模块名称包含在内,其所有子模块都会被发送到同一设备。 - offload_folder (
str或os.PathLike,可选) — 如果device_map包含任何值为"disk"的项,则指定用于卸载权重的文件夹。 - dtype (
str或torch.dtype,可选) — 如果提供,加载时权重将被转换为该类型。 - offload_state_dict (
bool,可选,默认为False) — 如果为True,则会将 CPU 状态字典临时卸载到硬盘上,以避免当 CPU 状态字典的权重加上最大分片无法容纳时耗尽 CPU 内存。 - offload_buffers (
bool,可选,默认为False) — 是否将缓冲区包含在卸载到磁盘的权重中。 - keep_in_fp32_modules(
List[str], 可选) — 一个模块列表,这些模块将保持为torch.float32数据类型。 - offload_8bit_bnb (
bool, 可选) — 是否启用将 8 位模块卸载到 cpu/disk。 - strict (
bool,可选,默认为False) — 是否严格强制检查点 state_dict 中的键与模型的 state_dict 的键相匹配。 - full_state_dict (
bool,可选,默认为True) — 如果设置为True,则加载的 state_dict 中的所有张量都会被收集。加载的 state_dict 中不会包含 ShardedTensor 和 DTensor。 - broadcast_from_rank0 (
False,可选,默认为False) — 当该选项为True时,必须初始化一个分布式ProcessGroup。rank0 应接收完整的 state_dict,并将 state_dict 中的张量逐个广播到其他 rank。其他 rank 将接收这些张量,并根据模型中的本地分片进行分片(如适用)。
在模型中加载(可能分片的)检查点,并在加载时将权重发送到指定设备。
Once loaded across devices, you still need to call dispatch_model() on your model to make it able to run. To group the checkpoint loading and dispatch in one single call, use load_checkpoint_and_dispatch().
量化
其中包括用于量化模型的实用工具。
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
参数
- model (
torch.nn.Module) — 输入模型。该模型可以已经加载,也可以位于 meta 设备上 - bnb_quantization_config (
BnbQuantizationConfig) — bitsandbytes 量化参数 - weights_location (
str或os.PathLike) — 要加载的 weights_location 文件夹。它可以是:- 指向包含完整模型状态字典的文件的路径
- 指向包含分片检查点索引的
.json文件的路径 - 指向一个文件夹的路径,该文件夹包含一个唯一的
.index.json文件和检查点的分片。 - 指向包含唯一 pytorch_model.bin 文件的文件夹的路径。
- device_map (
Dict[str, Union[int, str, torch.device]], 可选) — 一个映射,用于指定每个子模块应放置的位置。它无需细化到每个参数/缓冲区名称,只要某个模块名称包含在内,其所有子模块都会被发送到同一设备。 - no_split_module_classes (
List[str], 可选) — 不应跨设备拆分的层类名列表(例如任何具有残差连接的层)。 - max_memory (
Dict, 可选) — 一个从设备标识符到最大内存的字典。如果未设置,则默认为可用的最大内存。 - offload_folder (
str或os.PathLike,可选) — 如果device_map包含任何值为"disk"的项,则指定用于卸载权重的文件夹。 - offload_state_dict (
bool,可选,默认为False) — 如果为True,则会将 CPU 状态字典临时卸载到硬盘上,以避免当 CPU 状态字典的权重加上最大分片无法容纳时耗尽 CPU 内存。
返回值
torch.nn.Module
量化后的模型
此函数将使用通过 bnb_quantization_config 传入的关联配置对输入模型进行量化。如果模型位于 meta 设备上,我们将根据传入的 device_map 加载并分发权重。如果模型已经加载,我们将量化该模型并将模型放到 GPU 上,