Transformers 文档

量化

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

量化

量化技术通过使用较低精度的数据类型(如 8 位整数 int8)来表示权重和激活值,从而降低内存和计算成本。这使得你可以加载通常无法放入内存的更大模型,并加快推理速度。Transformers 支持 AWQ 和 GPTQ 量化算法,并且支持使用 bitsandbytes 进行 8 位和 4 位量化。

Transformers 中不支持的量化技术可以通过 HfQuantizer 类添加。

量化指南中学习如何量化模型。

QuantoConfig

class transformers.QuantoConfig

< >

( weights = 'int8' activations = None modules_to_not_convert: typing.Optional[list] = None **kwargs )

参数

  • weights (str, 可选, 默认为 "int8") — 量化后权重的目标数据类型。支持的值为(“float8”,“int8”,“int4”,“int2”)
  • activations (str, 可选) — 量化后激活值的目标数据类型。支持的值为 (None,“int8”,“float8”)
  • modules_to_not_convert (list, 可选, 默认为 None) — 不进行量化的模块列表,这对于量化那些明确要求某些模块保持原始精度的模型很有用(例如 Whisper 编码器、Llava 编码器、Mixtral 门控层)。

这是一个封装类,包含了所有在使用 quanto 加载的模型中可以调整的属性和功能。

post_init

< >

( )

检查参数是否正确的安全检查器

AqlmConfig

class transformers.AqlmConfig

< >

( in_group_size: int = 8 out_group_size: int = 1 num_codebooks: int = 1 nbits_per_codebook: int = 16 linear_weights_not_to_quantize: typing.Optional[list[str]] = None **kwargs )

参数

  • in_group_size (int, 可选, 默认为 8) — 沿输入维度的分组大小。
  • out_group_size (int, 可选, 默认为 1) — 沿输出维度的分组大小。建议始终使用 1。
  • num_codebooks (int, 可选, 默认为 1) — 加性量化(Additive Quantization)过程中的码本数量。
  • nbits_per_codebook (int, 可选, 默认为 16) — 编码单个码本向量的位数。码本大小为 2**nbits_per_codebook。
  • linear_weights_not_to_quantize (Optional[list[str]], 可选) — 不应被量化的 nn.Linear 权重参数的完整路径列表。
  • kwargs (dict[str, Any], 可选) — 用于初始化配置对象的附加参数。

这是一个关于 aqlm 参数的封装类。

post_init

< >

( )

检查参数是否正确的安全检查器 - 同时会将一些 NoneType 参数替换为其默认值。

VptqConfig

class transformers.VptqConfig

< >

( enable_proxy_error: bool = False config_for_layers: dict = {} shared_layer_config: dict = {} modules_to_not_convert: typing.Optional[list] = None **kwargs )

参数

  • enable_proxy_error (bool, 可选, 默认为 False) — 计算每层的代理误差
  • config_for_layers (Dict, 可选, 默认为 {}) — 每层的量化参数
  • shared_layer_config (Dict, 可选, 默认为 {}) — 层之间共享的量化参数
  • modules_to_not_convert (list, 可选, 默认为 None) — 不进行量化的模块列表,这对于量化那些明确要求某些模块保持原始精度的模型很有用(例如 Whisper 编码器、Llava 编码器、Mixtral 门控层)。
  • kwargs (dict[str, Any], 可选) — 用于初始化配置对象的附加参数。

这是一个关于 vptq 参数的封装类。

post_init

< >

( )

检查参数是否正确的安全检查器

AwqConfig

class transformers.AwqConfig

< >

( bits: int = 4 group_size: int = 128 zero_point: bool = True version: AWQLinearVersion = <AWQLinearVersion.GEMM: 'gemm'> backend: AwqBackendPackingMethod = <AwqBackendPackingMethod.AUTOAWQ: 'autoawq'> do_fuse: typing.Optional[bool] = None fuse_max_seq_len: typing.Optional[int] = None modules_to_fuse: typing.Optional[dict] = None modules_to_not_convert: typing.Optional[list] = None exllama_config: typing.Optional[dict[str, int]] = None **kwargs )

参数

  • bits (int, 可选, 默认为 4) — 量化到的位数。
  • group_size (int, 可选, 默认为 128) — 用于量化的分组大小。推荐值为 128,-1 表示使用逐列量化。
  • zero_point (bool, 可选, 默认为 True) — 是否使用零点量化。
  • version (AWQLinearVersion, 可选, 默认为 AWQLinearVersion.GEMM) — 使用的量化算法版本。GEMM 对于大批量大小(例如 >= 8)更好,否则 GEMV 更好(例如 < 8)。GEMM 模型与 Exllama 内核兼容。
  • backend (AwqBackendPackingMethod, 可选, 默认为 AwqBackendPackingMethod.AUTOAWQ) — 量化后端。一些模型可能使用 llm-awq 后端进行量化。这对于使用 llm-awq 库量化自己模型的用户很有用。
  • do_fuse (bool, 可选, 默认为 False) — 是否将注意力和 mlp 层融合在一起以加快推理速度
  • fuse_max_seq_len (int, 可选) — 使用融合时生成的最长序列长度。
  • modules_to_fuse (dict, 可选, 默认为 None) — 使用用户指定的融合方案覆盖原生支持的融合方案。
  • modules_to_not_convert (list, 可选, 默认为 None) — 不进行量化的模块列表,这对于量化那些明确要求某些模块保持原始精度的模型很有用(例如 Whisper 编码器、Llava 编码器、Mixtral 门控层)。请注意,您不能直接使用 transformers 进行量化,请参阅 AutoAWQ 文档以量化 HF 模型。
  • exllama_config (dict[str, Any], 可选) — 您可以通过 version 键指定 exllama 内核的版本,通过 max_input_len 键指定最大序列长度,以及通过 max_batch_size 键指定最大批次大小。如果未设置,则默认为 {"version": 2, "max_input_len": 2048, "max_batch_size": 8}

这是一个封装类,包含了所有在使用 auto-awq 库的 awq 量化(依赖 auto_awq 后端)加载的模型中可以调整的属性和功能。

post_init

< >

( )

检查参数是否正确的安全检查器

EetqConfig

class transformers.EetqConfig

< >

( weights: str = 'int8' modules_to_not_convert: typing.Optional[list] = None **kwargs )

参数

  • weights (str, 可选, 默认为 "int8") — 权重的目标数据类型。仅支持 “int8”。
  • modules_to_not_convert (list, 可选, 默认为 None) — 不进行量化的模块列表,这对于量化那些明确要求某些模块保持原始精度的模型很有用。

这是一个封装类,包含了所有在使用 eetq 加载的模型中可以调整的属性和功能。

post_init

< >

( )

检查参数是否正确的安全检查器

GPTQConfig

class transformers.GPTQConfig

< >

( bits: int tokenizer: typing.Any = None dataset: typing.Union[list[str], str, NoneType] = None group_size: int = 128 damp_percent: float = 0.1 desc_act: bool = False sym: bool = True true_sequential: bool = True checkpoint_format: str = 'gptq' meta: typing.Optional[dict[str, typing.Any]] = None backend: typing.Optional[str] = None use_cuda_fp16: bool = False model_seqlen: typing.Optional[int] = None block_name_to_quantize: typing.Optional[str] = None module_name_preceding_first_block: typing.Optional[list[str]] = None batch_size: int = 1 pad_token_id: typing.Optional[int] = None use_exllama: typing.Optional[bool] = None max_input_length: typing.Optional[int] = None exllama_config: typing.Optional[dict[str, typing.Any]] = None cache_block_outputs: bool = True modules_in_block_to_quantize: typing.Optional[list[list[str]]] = None **kwargs )

参数

  • bits (int) — 量化的位数,支持的数字为 (2, 3, 4, 8)。
  • tokenizer (strPreTrainedTokenizerBase, optional) — 用于处理数据集的 tokenizer。您可以传递以下任一类型:
    • 一个自定义的 tokenizer 对象。
    • 一个字符串,即托管在 huggingface.co 模型仓库中的预定义 tokenizer 的模型 ID
    • 一个包含 tokenizer 所需词汇文件的目录路径,例如使用 save_pretrained() 方法保存的目录,例如 ./my_model_directory/
  • dataset (Union[list[str]], optional) — 用于量化的数据集。您可以提供自己的字符串列表形式的数据集,或者直接使用 GPTQ 论文中使用的原始数据集 [‘wikitext2’,‘c4’,‘c4-new’]。
  • group_size (int, optional, defaults to 128) — 用于量化的分组大小。推荐值为 128,-1 表示使用逐列量化。
  • damp_percent (float, optional, defaults to 0.1) — 用于阻尼的平均海森矩阵对角线百分比。推荐值为 0.1。
  • desc_act (bool, optional, defaults to False) — 是否按激活值大小降序量化列。将其设置为 False 可以显著加快推理速度,但困惑度可能会略有下降。也称为 act-order。
  • sym (bool, optional, defaults to True) — 是否使用对称量化。
  • true_sequential (bool, optional, defaults to True) — 是否在单个 Transformer 块内也执行顺序量化。我们不一次性量化整个块,而是执行逐层量化。因此,每一层都使用通过先前量化层的输入进行量化。
  • checkpoint_format (str, optional, defaults to "gptq") — GPTQ 权重格式。gptq(v1) 同时被 gptqmodel 和 auto-gptq 支持。gptq_v2 仅 gptqmodel 支持。
  • meta (dict[str, any], optional) — 不直接影响量化或量化推理的属性(如 tooling:version)存储在 meta 中。例如 meta.quantizer: [“optimum:version”, “gptqmodel:version”]
  • backend (str, optional) — 控制使用哪个 gptq 内核。对于 gptqmodel,有效值为 autoauto_trainable 等。对于 auto-gptq,有效值仅为 None 和 auto_trainable。参考 gptqmodel 后端: https://github.com/ModelCloud/GPTQModel/blob/main/gptqmodel/utils/backend.py
  • use_cuda_fp16 (bool, optional, defaults to False) — 是否为 fp16 模型使用优化的 CUDA 内核。需要模型为 fp16 格式。仅 auto-gptq 支持。
  • model_seqlen (int, optional) — 模型可以接受的最大序列长度。
  • block_name_to_quantize (str, optional) — 要量化的 transformers 块名称。如果为 None,将使用通用模式(例如 model.layers)推断块名称。
  • module_name_preceding_first_block (list[str], optional) — 在第一个 Transformer 块之前的层。
  • batch_size (int, optional, defaults to 1) — 处理数据集时使用的批大小。
  • pad_token_id (int, optional) — 填充标记的 ID。当 batch_size > 1 时,准备数据集需要此参数。
  • use_exllama (bool, optional) — 是否使用 exllama 后端。如果未设置,默认为 True。仅在 bits = 4 时有效。
  • max_input_length (int, optional) — 最大输入长度。需要此参数来初始化一个依赖于最大预期输入长度的缓冲区。此参数特定于使用 act-order 的 exllama 后端。
  • exllama_config (dict[str, Any], optional) — exllama 配置。您可以通过 version 键指定 exllama 内核的版本。如果未设置,默认为 {"version": 1}
  • cache_block_outputs (bool, optional, defaults to True) — 是否缓存块输出,以作为后续块的输入重用。
  • modules_in_block_to_quantize (list[list[str]], optional) — 在指定块中要量化的模块名称列表的列表。此参数可用于排除某些线性模块不被量化。要量化的块可以通过设置 block_name_to_quantize 来指定。我们将按顺序量化每个列表。如果未设置,将量化所有线性层。例如:modules_in_block_to_quantize =[["self_attn.k_proj", "self_attn.v_proj", "self_attn.q_proj"], ["self_attn.o_proj"]]。在此示例中,我们将首先同时量化 q、k、v 层,因为它们是独立的。然后,在 q、k、v 层被量化后,我们将量化 self_attn.o_proj 层。这样,我们将获得更好的结果,因为它反映了模型量化后 self_attn.o_proj 将获得的真实输入。

这是一个包装类,包含了在使用 `optimum` API 加载模型时,所有可以用于 gptq 量化(依赖于 auto_gptq 后端)的属性和功能。

from_dict_optimum

< >

( config_dict )

从 optimum gptq 配置字典获取兼容的类

post_init

< >

( )

检查参数是否正确的安全检查器

to_dict_optimum

< >

( )

获取与 optimum gptq 配置兼容的字典

BitsAndBytesConfig

class transformers.BitsAndBytesConfig

< >

( load_in_8bit = False load_in_4bit = False llm_int8_threshold = 6.0 llm_int8_skip_modules = None llm_int8_enable_fp32_cpu_offload = False llm_int8_has_fp16_weight = False bnb_4bit_compute_dtype = None bnb_4bit_quant_type = 'fp4' bnb_4bit_use_double_quant = False bnb_4bit_quant_storage = None **kwargs )

参数

  • load_in_8bit (bool, optional, defaults to False) — 此标志用于通过 LLM.int8() 启用 8 位量化。
  • load_in_4bit (bool, optional, defaults to False) — 此标志用于通过将 Linear 层替换为 bitsandbytes 中的 FP4/NF4 层来启用 4 位量化。
  • llm_int8_threshold (float, optional, defaults to 6.0) — 这对应于论文 `LLM.int8() : 8-bit Matrix Multiplication for Transformers at Scale` 中描述的用于离群点检测的离群点阈值:https://huggingface.co/papers/2208.07339。任何高于此阈值的隐藏状态值都将被视为离群点,对这些值的操作将以 fp16 进行。值通常呈正态分布,即大多数值在 [-3.5, 3.5] 范围内,但对于大型模型,存在一些分布非常不同的系统性离群点。这些离群点通常在 [-60, -6] 或 [6, 60] 区间内。Int8 量化对于幅度约为 5 的值效果很好,但超过这个范围,性能会显著下降。一个好的默认阈值是 6,但对于更不稳定的模型(小模型、微调),可能需要更低的阈值。
  • llm_int8_skip_modules (list[str], optional) — 一个明确的模块列表,我们不希望将其转换为 8 位。这对于像 Jukebox 这样在不同位置有多个头的模型很有用,这些头不一定在最后的位置。例如,对于 CausalLM 模型,最后的 lm_head 会保持其原始的 dtype
  • llm_int8_enable_fp32_cpu_offload (bool, optional, defaults to False) — 此标志用于高级用例和了解此功能的用户。如果你想将模型分成不同的部分,一部分在 GPU 上以 int8 运行,另一部分在 CPU 上以 fp32 运行,你可以使用此标志。这对于卸载大型模型如 google/flan-t5-xxl 很有用。请注意,int8 操作不会在 CPU 上运行。
  • llm_int8_has_fp16_weight (bool, optional, defaults to False) — 此标志使用 16 位主权重运行 LLM.int8()。这对于微调很有用,因为权重在反向传播时不必来回转换。
  • bnb_4bit_compute_dtype (torch.dtype 或 str, optional, defaults to torch.float32) — 这设置了计算类型,可能与输入类型不同。例如,输入可能是 fp32,但计算可以设置为 bf16 以加速。
  • bnb_4bit_quant_type (str, optional, defaults to "fp4") — 这设置了 bnb.nn.Linear4Bit 层中的量化数据类型。选项是 FP4 和 NF4 数据类型,由 fp4nf4 指定。
  • bnb_4bit_use_double_quant (bool, optional, defaults to False) — 此标志用于嵌套量化,即第一次量化的量化常数再次被量化。
  • bnb_4bit_quant_storage (torch.dtype 或 str, optional, defaults to torch.uint8) — 这设置了用于打包量化后 4 位参数的存储类型。
  • kwargs (dict[str, Any], optional) — 用于初始化配置对象的附加参数。

这是一个包装类,包含了在使用 bitsandbytes 加载模型时,所有可以使用的属性和功能。

这将替换 load_in_8bitload_in_4bit,因此这两个选项是互斥的。

目前仅支持 LLM.int8()FP4NF4 量化。如果 bitsandbytes 中增加了更多方法,则会向此类添加更多参数。

is_quantizable

< >

( )

如果模型可以量化,则返回 True,否则返回 False

post_init

< >

( )

检查参数是否正确的安全检查器 - 同时会将一些 NoneType 参数替换为其默认值。

quantization_method

< >

( )

此方法返回模型使用的量化方法。如果模型不可量化,则返回 None

to_diff_dict

< >

( ) dict[str, Any]

返回

dict[str, Any]

所有构成此配置实例的属性的字典,

从配置中删除所有与默认配置属性对应的属性,以提高可读性,并序列化为 Python 字典。

HfQuantizer

class transformers.quantizers.HfQuantizer

< >

( quantization_config: QuantizationConfigMixin **kwargs )

HuggingFace 量化器的抽象类。目前支持对 HF transformers 模型进行推理和/或量化。此类仅用于 transformers.PreTrainedModel.from_pretrained,目前尚不能轻易在该方法范围之外使用。

属性 quantization_config (transformers.utils.quantization_config.QuantizationConfigMixin):定义要量化的模型的量化参数的配置。 modules_to_not_convert (list[str], optional):量化模型时不转换的模块名称列表。 required_packages (list[str], optional):在使用量化器之前需要安装的 pip 包列表。 requires_calibration (bool):量化方法是否需要在模型使用前对其进行校准。 requires_parameters_quantization (bool):量化方法是否需要创建新的参数。例如,对于 bitsandbytes,需要创建新的 xxxParameter 才能正确量化模型。

adjust_max_memory

< >

( max_memory: dict )

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

adjust_target_dtype

< >

( torch_dtype: torch.dtype )

参数

  • torch_dtype (torch.dtype, optional) — 用于计算 device_map 的 torch_dtype。

如果你想调整 from_pretrained 中用于计算 device_map 的 target_dtype 变量(当 device_map 是 str 时),请重写此方法。例如,对于 bitsandbytes,我们强制将 target_dtype 设置为 torch.int8,对于 4 位量化,我们传递一个自定义枚举 accelerate.CustomDtype.int4

check_quantized_param

< >

( model: PreTrainedModel param_value: torch.Tensor param_name: str state_dict: dict **kwargs )

检查加载的 state_dict 组件是否是量化参数的一部分,并进行一些验证;仅在 requires_parameters_quantization == True 的量化方法(需要为量化创建新参数)中定义。

create_quantized_param

< >

( *args **kwargs )

从 state_dict 中获取所需组件并创建量化参数;仅当 requires_parameters_quantization == True 时适用。

dequantize

< >

( model )

可能会将模型反量化以恢复原始模型,但会带来一些准确性/性能上的损失。请注意,并非所有量化方案都支持此操作。

get_cuda_warm_up_factor

< >

( )

用于 caching_allocator_warmup 的因子,以获取预分配的字节数来预热 CUDA。因子为 2 表示我们分配空模型中的所有字节(因为我们在 fp16 中分配),因子为 4 表示我们分配空模型中权重占用内存的一半,依此类推……

get_special_dtypes_update

< >

( model torch_dtype: torch.dtype )

参数

  • model (~transformers.PreTrainedModel) — 要量化的模型
  • torch_dtype (torch.dtype) — 在 from_pretrained 方法中传递的 dtype。

返回未量化模块的 dtypes - 用于在将 str 作为 device_map 传递时计算 device_map。该方法将使用在 _process_model_before_weight_loading 中修改的 modules_to_not_convert

postprocess_model

< >

( model: PreTrainedModel **kwargs )

参数

  • model (~transformers.PreTrainedModel) — 要量化的模型
  • kwargs (dict, optional) — 传递给 _process_model_after_weight_loading 的关键字参数。

在权重加载后对模型进行后处理。请确保重写抽象方法 _process_model_after_weight_loading

preprocess_model

< >

( model: PreTrainedModel **kwargs )

参数

  • model (~transformers.PreTrainedModel) — 要量化的模型
  • kwargs (dict, optional) — 传递给 _process_model_before_weight_loading 的关键字参数。

在权重加载前设置模型属性和/或转换模型。此时模型应在元设备上初始化,以便您可以自由地操作模型的主体结构,从而原地替换模块。请确保重写抽象方法 _process_model_before_weight_loading

update_device_map

< >

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

参数

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

如果您想用新的设备映射覆盖现有的设备映射,请重写此方法。例如,对于 bitsandbytes,由于 accelerate 是一个硬性要求,如果没有传递 device_map,则 device_map 会被设置为 `“auto”`

update_expected_keys

< >

( model expected_keys: list loaded_keys: list )

参数

  • expected_keys (list[str], optional) — 初始化模型中预期键的列表。
  • loaded_keys (list[str], optional) — 检查点中已加载键的列表。

如果您想调整 update_expected_keys,请重写此方法。

update_missing_keys

< >

( model missing_keys: list prefix: str )

参数

  • missing_keys (list[str], optional) — 检查点中与模型 state dict 相比缺失的键的列表

如果您想调整 missing_keys,请重写此方法。

update_missing_keys_after_loading

< >

( model missing_keys: list prefix: str )

参数

  • missing_keys (list[str], optional) — 检查点中与模型 state dict 相比缺失的键的列表

如果您想在加载模型参数后但在模型后处理前调整 missing_keys,请重写此方法。

update_torch_dtype

< >

( torch_dtype: torch.dtype )

参数

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

某些量化方法需要显式地将模型的 dtype 设置为目标 dtype。如果您想确保保留该行为,则需要重写此方法

update_tp_plan

< >

( config )

更新缩放的张量并行(tp)计划

update_unexpected_keys

< >

( model unexpected_keys: list prefix: str )

参数

  • unexpected_keys (list[str], optional) — 检查点中与模型 state dict 相比非预期的键的列表

如果您想调整 unexpected_keys,请重写此方法。

validate_environment

< >

( *args **kwargs )

此方法用于检查与 from_pretrained 中传递的参数可能存在的冲突。您需要为所有未来与 transformers 集成的量化器定义此方法。如果不需要显式检查,只需返回即可。

HiggsConfig

class transformers.HiggsConfig

< >

( bits: int = 4 p: int = 2 modules_to_not_convert: typing.Optional[list[str]] = None hadamard_size: int = 512 group_size: int = 256 tune_metadata: typing.Optional[dict[str, typing.Any]] = None **kwargs )

参数

  • bits (int, optional, defaults to 4) — 用于量化的位数。可以是 2、3 或 4。默认为 4。
  • p (int, optional, defaults to 2) — 量化网格维度。支持 1 和 2。实际上 2 总是更好。默认为 2。
  • modules_to_not_convert (list, optional, default to [“lm_head”]) — 不应被量化的线性层列表。
  • hadamard_size (int, optional, defaults to 512) — HIGGS 方法的哈达玛大小。默认为 512。矩阵的输入维度会被填充到此值。将其减少到 512 以下会降低量化质量。
  • group_size (int, optional, defaults to 256) — HIGGS 方法的组大小。可以是 64、128 或 256。减小它对性能影响甚微。默认为 256。必须是 hadamard_size 的除数。
  • tune_metadata (‘dict’, optional, defaults to {}) — 用于保存内核调优结果的模块级元数据(gemm 块形状、GPU 元数据等)。默认为空字典。在调优期间自动设置。

HiggsConfig 是一个使用 HIGGS 方法进行量化的配置类。

post_init

< >

( )

检查参数是否正确的安全检查器 - 同时会将一些 NoneType 参数替换为其默认值。

HqqConfig

class transformers.HqqConfig

< >

( nbits: int = 4 group_size: int = 64 view_as_float: bool = False axis: typing.Optional[int] = None dynamic_config: typing.Optional[dict] = None skip_modules: list = ['lm_head'] **kwargs )

参数

  • nbits (int, optional, defaults to 4) — 比特数。支持的值为 (8, 4, 3, 2, 1)。
  • group_size (int, optional, defaults to 64) — 组大小值。支持任何可以被 weight.shape[axis] 整除的值。
  • view_as_float (bool, optional, defaults to False) — 如果设置为 True,则将量化权重视为浮点数(用于分布式训练)。
  • axis (Optional[int], optional) — 执行分组的轴。支持的值为 0 或 1。
  • dynamic_config (dict, optional) — 动态配置参数。键是层的名称标签,值是量化配置。如果设置,每个由其 id 指定的层将使用其专用的量化配置。
  • skip_modules (list[str], optional, defaults to ['lm_head']) — 要跳过的 nn.Linear 层列表。
  • kwargs (dict[str, Any], optional) — 用于初始化配置对象的附加参数。

这是对 hqq 的 BaseQuantizeConfig 的包装。

from_dict

< >

( config: dict )

重写 from_dict,在 quantizers/auto.py 中的 AutoQuantizationConfig.from_dict 中使用

post_init

< >

( )

检查参数是否正确的安全检查器 - 同时会将一些 NoneType 参数替换为其默认值。

to_diff_dict

< >

( ) dict[str, Any]

返回

dict[str, Any]

所有构成此配置实例的属性的字典,

从配置中删除所有与默认配置属性对应的属性,以提高可读性,并序列化为 Python 字典。

FbgemmFp8Config

class transformers.FbgemmFp8Config

< >

( activation_scale_ub: float = 1200.0 modules_to_not_convert: typing.Optional[list] = None **kwargs )

参数

  • activation_scale_ub (float, optional, defaults to 1200.0) — 激活缩放上限。用于量化输入激活。
  • modules_to_not_convert (list, optional, default to None) — 不进行量化的模块列表,对于明确要求某些模块保持原始精度的模型量化很有用。

这是一个包装类,包含了你可以对使用 fbgemm fp8 量化加载的模型进行操作的所有可能属性和功能。

CompressedTensorsConfig

class transformers.CompressedTensorsConfig

< >

( config_groups: typing.Optional[dict[str, typing.Union[ForwardRef('QuantizationScheme'), list[str]]]] = None format: str = 'dense' quantization_status: QuantizationStatus = 'initialized' kv_cache_scheme: typing.Optional[ForwardRef('QuantizationArgs')] = None global_compression_ratio: typing.Optional[float] = None ignore: typing.Optional[list[str]] = None sparsity_config: typing.Optional[dict[str, typing.Any]] = None quant_method: str = 'compressed-tensors' run_compressed: bool = True **kwargs )

参数

  • config_groups (typing.dict[str, typing.Union[ForwardRef('QuantizationScheme'), typing.list[str]]], optional) — 将组名映射到量化方案定义的字典
  • format (str, optional, defaults to "dense") — 模型表示的格式。如果不是 dense,将 run_compressed 设置为 True 以压缩格式执行模型
  • quantization_status (QuantizationStatus, optional, defaults to "initialized") — 模型在量化生命周期中的状态,例如 ‘initialized’(已初始化)、‘calibration’(校准中)、‘frozen’(已冻结)
  • kv_cache_scheme (typing.Union[QuantizationArgs, NoneType], optional) — 指定 kv 缓存的量化。如果为 None,则不对 kv 缓存进行量化。
  • global_compression_ratio (typing.Union[float, NoneType], optional) — 模型压缩的 0-1 浮点百分比
  • ignore (typing.Union[typing.list[str], NoneType], optional) — 不量化的层名称或类型,支持以 ‘re:’ 为前缀的正则表达式
  • sparsity_config (typing.dict[str, typing.Any], optional) — 稀疏性压缩的配置
  • quant_method (str, optional, defaults to "compressed-tensors") — 不应覆盖,应为 compressed-tensors
  • run_compressed (bool, optional, defaults to True) — 如果为 True,则更改子模块(通常是线性层)以模拟压缩模型的执行,否则使用默认子模块

这是一个处理 compressed-tensors 量化配置选项的包装类。它是 compressed_tensors.QuantizationConfig 的一个包装器

from_dict

< >

( config_dict return_unused_kwargs = False **kwargs ) QuantizationConfigMixin

参数

  • config_dict (dict[str, Any]) — 将用于实例化配置对象的字典。
  • return_unused_kwargs (bool,optional, defaults to False) — 是否返回一个未使用的关键字参数列表。用于 PreTrainedModel 中的 from_pretrained 方法。
  • kwargs (dict[str, Any]) — 用于初始化配置对象的其他参数。

返回

QuantizationConfigMixin

从这些参数实例化的配置对象。

从一个 Python 参数字典实例化一个 CompressedTensorsConfig。可选择性地从嵌套的 quantization_config 中解包任何参数

to_dict

< >

( )

要添加到 config.json 的量化配置

将此实例序列化为 Python 字典。返回:dict[str, Any]:构成此配置实例的所有属性的字典。

to_diff_dict

< >

( ) dict[str, Any]

返回

dict[str, Any]

所有构成此配置实例的属性的字典,

从配置中删除所有与默认配置属性对应的属性,以提高可读性,并序列化为 Python 字典。

TorchAoConfig

class transformers.TorchAoConfig

< >

( quant_type: typing.Union[str, ForwardRef('AOBaseConfig')] modules_to_not_convert: typing.Optional[list] = None include_input_output_embeddings: bool = False untie_embedding_weights: bool = False **kwargs )

from_dict

< >

( config_dict return_unused_kwargs = False **kwargs )

从字典创建配置。

get_apply_tensor_subclass

< >

( )

根据配置创建适当的量化方法。

post_init

< >

( )

验证配置并设置默认值。

to_dict

< >

( )

将配置转换为字典。

BitNetQuantConfig

class transformers.BitNetQuantConfig

< >

( modules_to_not_convert: typing.Optional[list] = None linear_class: typing.Optional[str] = 'bitlinear' quantization_mode: typing.Optional[str] = 'offline' use_rms_norm: typing.Optional[bool] = False rms_norm_eps: typing.Optional[float] = 1e-06 **kwargs )

参数

  • modules_to_not_convert (Optional[List], optional) — 可选地,提供一个不应量化的 nn.Linear 权重参数的完整路径列表。默认为 None。
  • linear_class (str, optional, defaults to "bitlinear") — 使用的线性类的类型。可以是 bitlinearautobitlinear
  • quantization_mode (str, optional, defaults to "offline") — 使用的量化模式。可以是 onlineoffline。在 online 模式下,权重 quantization 参数在每次前向传播期间动态计算(例如,基于当前的权重值)。这可以适应训练期间的权重变化(量化感知训练 - QAT)。在 offline 模式下,量化参数在推理 *之前* 预先计算。然后这些参数被固定并加载到量化模型中。与在线量化相比,这通常会带来更低的运行时开销。
  • use_rms_norm (bool, optional, defaults to False) — 是否在量化前对激活值应用 RMSNorm。这与原始 BitNet 论文在量化/打包前对激活值进行归一化的方法相匹配。
  • rms_norm_eps (float, optional, defaults to 1e-06) — RMSNorm 层中用于数值稳定性的 epsilon 值。
  • kwargs (dict[str, Any], optional) — 可能由特定量化后端或未来版本使用的其他关键字参数。

用于应用 BitNet 量化的配置类。

post_init

< >

( )

检查参数是否正确的安全检查器

SpQRConfig

class transformers.SpQRConfig

< >

( bits: int = 3 beta1: int = 16 beta2: int = 16 shapes: typing.Optional[dict[str, int]] = None modules_to_not_convert: typing.Optional[list[str]] = None **kwargs )

参数

  • bits (int, optional, defaults to 3) — 指定权重和一阶零点及缩放的比特数。目前仅支持 bits = 3。
  • beta1 (int, optional, defaults to 16) — SpQR 瓦片宽度。目前仅支持 beta1 = 16。
  • beta2 (int, optional, defaults to 16) — SpQR 瓦片高度。目前仅支持 beta2 = 16。
  • shapes (Optional, optional) — 一个包含每个对象形状的字典。我们需要这个是因为仅从 bits, beta1, beta2 无法推断出参数的确切大小。
  • modules_to_not_convert (Optional[list[str]], optional) — 可选地,提供一个不应量化的 `nn.Linear` 权重参数的完整路径列表。默认为 None。
  • kwargs (dict[str, Any], optional) — 用于初始化配置对象的其他参数。

这是一个关于 spqr 参数的包装类。有关更多详细信息,请参阅原始出版物。

post_init

< >

( )

检查参数是否正确的安全检查器 - 同时会将一些 NoneType 参数替换为其默认值。

FineGrainedFP8Config

class transformers.FineGrainedFP8Config

< >

( activation_scheme: str = 'dynamic' weight_block_size: tuple = (128, 128) modules_to_not_convert: typing.Optional[list] = None **kwargs )

参数

  • activation_scheme (str, optional, defaults to "dynamic") — 用于激活的方案,目前默认且唯一支持的方案是 “dynamic”。
  • weight_block_size (typing.tuple[int, int], optional, defaults to (128, 128)) — 用于量化的权重块大小,默认为 (128, 128)。
  • modules_to_not_convert (list, optional) — 在量化过程中不应转换的模块名称列表。

FineGrainedFP8Config 是一个用于细粒度 FP8 量化的配置类,主要用于 deepseek 模型。

post_init

< >

( )

检查参数是否正确的安全检查器

QuarkConfig

class transformers.QuarkConfig

< >

( **kwargs )

AutoRoundConfig

class transformers.AutoRoundConfig

< >

( bits: int = 4 group_size: int = 128 sym: bool = True backend: str = 'auto' **kwargs )

参数

  • bits (int, optional, defaults to 4) — 量化的比特数,支持的数字为 (2, 3, 4, 8)。
  • group_size (int, optional, defaults to 128) — 组大小值
  • sym (bool, optional, 默认为 True) — 是否进行对称量化
  • backend (str, optional, 默认为 "auto") — 要使用的内核,例如 ipex、marlin、exllamav2、triton 等。请参阅 https://github.com/intel/auto-round?tab=readme-ov-file#specify-backend

这是一个包装类,包含了所有可以用于已加载 AutoRound 量化模型的可能属性和功能。

post_init

< >

( )

用于检查参数是否正确的安全检查器。

< > 在 GitHub 上更新