Diffusers 文档

量化

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

量化

量化技术通过使用8位整数(int8)等低精度数据类型表示权重和激活,从而降低内存和计算成本。这使得加载通常无法放入内存的更大模型成为可能,并加速了推理。

了解如何在量化指南中量化模型。

流水线量化配置

class diffusers.PipelineQuantizationConfig

< >

( quant_backend: str = None quant_kwargs: typing.Dict[str, typing.Union[str, float, int, dict]] = None components_to_quantize: typing.Optional[typing.List[str]] = None quant_mapping: typing.Dict[str, typing.Union[diffusers.quantizers.quantization_config.QuantizationConfigMixin, ForwardRef('TransformersQuantConfigMixin')]] = None )

参数

  • quant_backend (str) — 要使用的量化后端。使用此选项时,我们假设后端同时适用于 `diffusers` 和 `transformers`。
  • quant_kwargs (dict) — 用于初始化量化后端类的参数。
  • components_to_quantize (list) — 要量化的流水线组件。
  • quant_mapping (dict) — 定义用于流水线组件的量化规范的映射。使用此参数时,用户无需提供 `quant_backend`、`quant_kawargs` 和 `components_to_quantize`。

用于在from_pretrained()中动态应用量化时的配置类。

BitsAndBytesConfig

class diffusers.BitsAndBytesConfig

< >

( *args **kwargs )

GGUFQuantizationConfig

class diffusers.GGUFQuantizationConfig

< >

( *args **kwargs )

QuantoConfig

class diffusers.QuantoConfig

< >

( *args **kwargs )

TorchAoConfig

class diffusers.TorchAoConfig

< >

( *args **kwargs )

DiffusersQuantizer

class diffusers.DiffusersQuantizer

< >

( quantization_config: QuantizationConfigMixin **kwargs )

HuggingFace 量化器的抽象类。目前支持量化 HF diffusers 模型以进行推理和/或量化。此类别仅用于 diffusers.models.modeling_utils.ModelMixin.from_pretrained,目前无法轻松在此方法范围之外使用。

属性 quantization_config (`diffusers.quantizers.quantization_config.QuantizationConfigMixin`): 定义要量化的模型的量化参数的量化配置。modules_to_not_convert (`List[str]`, *可选*): 量化模型时要跳过转换的模块名称列表。required_packages (`List[str]`, *可选*): 使用量化器之前需要安装的 pip 包列表。requires_calibration (`bool`): 量化方法是否需要在使用模型之前进行校准。

调整最大内存

< >

( max_memory: typing.Dict[str, typing.Union[int, str]] )

如果量化需要额外内存,则调整 infer_auto_device_map() 的 max_memory 参数

调整目标数据类型

< >

( torch_dtype: torch.dtype )

参数

  • torch_dtype (torch.dtype, *可选*) — 用于计算 `device_map` 的 `torch_dtype`。

如果您想调整用于 `from_pretrained` 的 `target_dtype` 变量,以在 `device_map` 为 `str` 的情况下计算 `device_map`,请覆盖此方法。例如,对于 bitsandbytes,我们强制将 `target_dtype` 设置为 `torch.int8`,对于 4 位,我们传递一个自定义枚举 `accelerate.CustomDtype.int4`。

检查量化参数

< >

( model: ModelMixin param_value: torch.Tensor param_name: str state_dict: typing.Dict[str, typing.Any] **kwargs )

检查加载的状态字典组件是否为量化参数的一部分 + 一些验证;仅针对需要为量化创建新参数的量化方法定义。

检查量化参数形状

< >

( *args **kwargs )

检查量化参数是否具有预期形状。

创建量化参数

< >

( *args **kwargs )

从状态字典中获取所需组件并创建量化参数。

反量化

< >

( model )

可能会对模型进行反量化以检索原始模型,但会损失一些精度/性能。请注意,并非所有量化方案都支持此功能。

获取特殊数据类型更新

< >

( model torch_dtype: torch.dtype )

参数

  • model (~diffusers.models.modeling_utils.ModelMixin) — 要量化的模型
  • torch_dtype (torch.dtype) — 在 `from_pretrained` 方法中传递的 dtype。

返回未量化模块的数据类型 - 用于在 `device_map` 为 `str` 的情况下计算 `device_map`。此方法将使用在 `_process_model_before_weight_loading` 中修改的 `modules_to_not_convert`。`diffusers` 模型目前没有任何 `modules_to_not_convert` 属性,但这在未来可能会很快改变。

后处理模型

< >

( model: ModelMixin **kwargs )

参数

  • model (~diffusers.models.modeling_utils.ModelMixin) — 要量化的模型
  • kwargs (dict, *可选*) — 随 `_process_model_after_weight_loading` 一同传递的关键字参数。

在权重加载后对模型进行后处理。请务必覆盖抽象方法 `_process_model_after_weight_loading`。

预处理模型

< >

( model: ModelMixin **kwargs )

参数

  • model (~diffusers.models.modeling_utils.ModelMixin) — 要量化的模型
  • kwargs (dict, *可选*) — 随 `_process_model_before_weight_loading` 一同传递的关键字参数。

在权重加载之前设置模型属性和/或转换模型。此时,模型应已在元设备上初始化,因此您可以自由操作模型骨架以原地替换模块。请务必覆盖抽象方法 `_process_model_before_weight_loading`。

更新设备映射

< >

( device_map: typing.Optional[typing.Dict[str, typing.Any]] )

参数

  • device_map (Union[dict, str], *可选*) — 通过 `from_pretrained` 方法传递的 `device_map`。

如果您想用新的设备映射覆盖现有设备映射,请覆盖此方法。例如,对于 bitsandbytes,由于 `accelerate` 是硬性要求,如果未传递 `device_map`,则 `device_map` 将设置为 `"auto"`。

更新缺失键

< >

( model missing_keys: typing.List[str] prefix: str )

参数

  • missing_keys (List[str], *可选*) — 与模型状态字典相比,检查点中缺失键的列表

如果您想调整 `missing_keys`,请覆盖此方法。

更新 torch_dtype

< >

( torch_dtype: torch.dtype )

参数

  • torch_dtype (torch.dtype) — 在 `from_pretrained` 中传入的输入 dtype

某些量化方法需要明确地将模型的 dtype 设置为目标 dtype。如果您想保留此行为,则需要覆盖此方法。

验证环境

< >

( *args **kwargs )

此方法用于检查与 `from_pretrained` 中传递的参数的潜在冲突。您需要为所有将来与 diffusers 集成的量化器定义它。如果不需要明确检查,只需返回空即可。

< > 在 GitHub 上更新