Diffusers 文档
量化
并获得增强的文档体验
开始使用
量化
量化技术通过使用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 )
用于在from_pretrained()中动态应用量化时的配置类。
BitsAndBytesConfig
GGUFQuantizationConfig
QuantoConfig
TorchAoConfig
DiffusersQuantizer
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`): 量化方法是否需要在使用模型之前进行校准。
如果量化需要额外内存,则调整 infer_auto_device_map() 的 max_memory 参数
调整目标数据类型
< 来源 >( torch_dtype: 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 )
检查加载的状态字典组件是否为量化参数的一部分 + 一些验证;仅针对需要为量化创建新参数的量化方法定义。
检查量化参数是否具有预期形状。
从状态字典中获取所需组件并创建量化参数。
可能会对模型进行反量化以检索原始模型,但会损失一些精度/性能。请注意,并非所有量化方案都支持此功能。
获取特殊数据类型更新
< 来源 >( model torch_dtype: torch.dtype )
返回未量化模块的数据类型 - 用于在 `device_map` 为 `str` 的情况下计算 `device_map`。此方法将使用在 `_process_model_before_weight_loading` 中修改的 `modules_to_not_convert`。`diffusers` 模型目前没有任何 `modules_to_not_convert` 属性,但这在未来可能会很快改变。
后处理模型
< 来源 >( model: ModelMixin **kwargs )
在权重加载后对模型进行后处理。请务必覆盖抽象方法 `_process_model_after_weight_loading`。
预处理模型
< 来源 >( model: ModelMixin **kwargs )
在权重加载之前设置模型属性和/或转换模型。此时,模型应已在元设备上初始化,因此您可以自由操作模型骨架以原地替换模块。请务必覆盖抽象方法 `_process_model_before_weight_loading`。
更新设备映射
< 来源 >( device_map: typing.Optional[typing.Dict[str, typing.Any]] )
如果您想用新的设备映射覆盖现有设备映射,请覆盖此方法。例如,对于 bitsandbytes,由于 `accelerate` 是硬性要求,如果未传递 `device_map`,则 `device_map` 将设置为 `"auto"`。
更新缺失键
< 来源 >( model missing_keys: typing.List[str] prefix: str )
如果您想调整 `missing_keys`,请覆盖此方法。
更新 torch_dtype
< 来源 >( torch_dtype: torch.dtype )
某些量化方法需要明确地将模型的 dtype 设置为目标 dtype。如果您想保留此行为,则需要覆盖此方法。
此方法用于检查与 `from_pretrained` 中传递的参数的潜在冲突。您需要为所有将来与 diffusers 集成的量化器定义它。如果不需要明确检查,只需返回空即可。