量化
量化技术通过使用较低精度的数据类型(如 8 位整数 int8)来表示权重和激活值,从而降低内存和计算成本。这使得能够加载通常无法装入内存的更大模型,并加快推理速度。Transformers 支持 AWQ 和 GPTQ 量化算法,并支持通过 bitsandbytes 进行 8 位和 4 位量化。
HfQuantizer 类可用于添加 Transformers 中尚未支持的量化技术。
了解如何在量化指南中对模型进行量化。
QuantoConfig
class transformers.QuantoConfig
< source >( weights = 'int8'activations = Nonemodules_to_not_convert: list | None = None**kwargs )
这是一个封装类,涵盖了使用 quanto 加载的模型中所有可操作的属性和功能。
用于检查参数是否正确
AqlmConfig
class transformers.AqlmConfig
< source >( in_group_size: int = 8out_group_size: int = 1num_codebooks: int = 1nbits_per_codebook: int = 16linear_weights_not_to_quantize: list[str] | None = 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 参数的包装类。
用于检查参数是否正确的安全检查器——同时会将某些 NoneType 参数替换为其默认值。
VptqConfig
class transformers.VptqConfig
< source >( enable_proxy_error: bool = Falseconfig_for_layers: dict = {}shared_layer_config: dict = {}modules_to_not_convert: list | None = None**kwargs )
参数
- enable_proxy_error(
bool,可选,默认为False)— 计算每一层的代理误差 - config_for_layers (
Dict,可选,默认为{}) — 每一层的量化参数 - shared_layer_config (
Dict,可选,默认为{}) — 各层之间共享的量化参数 - modules_to_not_convert (
list,可选,默认为None) — 不进行量化的模块列表。对于明确要求某些模块保留原始精度(例如 Whisper encoder、Llava encoder、Mixtral gate layers)的模型进行量化时,此参数非常有用。 - kwargs (
dict[str, Any],可选) — 用于初始化配置对象的额外参数。
这是一个关于 vptq 参数的包装类。
用于检查参数是否正确
AwqConfig
class transformers.AwqConfig
< source >( bits: int = 4group_size: int = 128zero_point: bool = Truebackend: AwqBackend = <AwqBackend.AUTO: 'auto'>modules_to_not_convert: list | None = None**kwargs )
参数
- bits (
int,可选,默认为 4) — 量化所用的位数。 - group_size (
int, 可选,默认为 128) — 用于量化的组大小。推荐值为 128,-1 表示使用按列量化。 - zero_point (
bool,可选,默认为True) — 是否使用零点量化。 - backend (
AwqBackend,可选,默认为AwqBackend.AUTO) — 量化后端。 - modules_to_not_convert (
list,可选,默认为None) — 不进行量化的模块列表。对于明确要求某些模块保留原始精度的模型(例如 Whisper encoder、Llava encoder、Mixtral gate layers),此参数非常有用。请注意,无法直接使用 transformers 进行量化,有关量化 HF 模型的说明,请参阅AutoAWQ文档。
这是一个封装类,涵盖了使用 auto-awq 库的 awq 量化(依赖 auto_awq 后端)加载的模型中所有可操作的属性和功能。
EetqConfig
class transformers.EetqConfig
< source >( weights: str = 'int8'modules_to_not_convert: list | None = None**kwargs )
这是一个封装类,涵盖了使用 eetq 加载的模型中所有可操作的属性和功能。
用于检查参数是否正确
GPTQConfig
class transformers.GPTQConfig
< source >( bits: inttokenizer: Any = Nonedataset: list[str] | str | None = Nonegroup_size: int = 128damp_percent: float = 0.1desc_act: bool = Falseact_group_aware: bool = Truesym: bool = Truetrue_sequential: bool = Trueformat: str = 'gptq'meta: dict[str, typing.Any] | None = Nonebackend: str | None = Nonemodel_seqlen: int | None = Noneblock_name_to_quantize: str | None = Nonemodule_name_preceding_first_block: list[str] | None = Nonebatch_size: int = 1pad_token_id: int | None = Nonemax_input_length: int | None = Nonecache_block_outputs: bool = Truemodules_in_block_to_quantize: list[list[str]] | None = None**kwargs )
参数
- bits (
int) — 要量化的位数,支持的数值为 (2, 3, 4, 8)。 - tokenizer (
str或PreTrainedTokenizerBase, 可选) — 用于处理数据集的 tokenizer。您可以传入以下任一内容:- 自定义的 tokenizer 对象。
- 一个字符串,即托管在 huggingface.co 上某个模型仓库中的预定义分词器的 model id。
- 指向包含分词器所需词汇文件的目录的路径,例如使用 save_pretrained() 方法保存的路径,如
./my_model_directory/。
- dataset (
Union[list[str]], 可选) — 用于量化的数据集。您可以提供自己的数据集(字符串列表),或者直接使用 GPTQ 论文中使用的原始数据集 [‘wikitext2’,‘c4’,‘c4-new’] - group_size (
int, 可选,默认为 128) — 用于量化的组大小。推荐值为 128,-1 表示使用按列量化。 - damp_percent (
float,可选,默认值为 0.1) — 用于阻尼的平均 Hessian 对角线百分比。推荐值为 0.1。 - desc_act (
bool,可选,默认为False) — 是否按激活值大小降序对列进行量化。将其设置为 False 可以显著加快推理速度,但困惑度可能会略微变差。也称为 act-order。 - act_group_aware (
bool,可选,默认为True) — 在量化过程中使用 GAR(group aware activation order,组感知激活顺序)。对量化质量有可测量的积极影响。仅在desc_act = False时适用。当desc_act = True时,该值将被强制设为False。 - sym (
bool,可选,默认为True) — 是否使用对称量化。 - true_sequential (
bool,可选,默认为True) — 是否即使在单个 Transformer 块内部也执行顺序量化。我们不会一次性量化整个块,而是执行逐层量化。因此,每一层都会使用经过先前已量化层处理的输入进行量化。 - format (
str,可选,默认为"gptq") — GPTQ 权重格式。gptq(v1)受 gptqmodel 支持。gptq_v2仅适用于 gptqmodel。 - meta (
dict[str, any],可选) — 诸如 tooling:version 等不直接参与量化或量化推理的属性,均存储在 meta 中。 例如meta.quantizer: [“optimum:version”, “gptqmodel:version”] - backend (
str, 可选) — 控制使用哪个内核。gptqmodel 的有效值为auto、auto_trainable等。参考 gptqmodel 后端: https://github.com/ModelCloud/GPTQModel/blob/main/gptqmodel/utils/backend.py - model_seqlen (
int,可选) — 模型可接受的最大序列长度。 - block_name_to_quantize (
str, 可选) — 要量化的 transformers 块名称。如果为 None,我们将使用常见模式(例如 model.layers)来推断块名称。 - module_name_preceding_first_block (
list[str],可选) — 位于第一个 Transformer 块之前的层。 - batch_size (
int,可选,默认为 1) — 处理数据集时使用的批大小 - pad_token_id (
int, 可选) — 填充 token 的 id。当batch_size> 1 时,准备数据集需要此参数。 - max_input_length (
int, 可选) — 最大输入长度。初始化依赖于预期最大输入长度的缓冲区时需要此参数。该参数仅适用于使用 act-order 的 exllama 后端。 - cache_block_outputs (
bool,可选,默认为True) — 是否缓存 block 的输出,以便将其作为后续 block 的输入进行复用。 - modules_in_block_to_quantize (
list[list[str]], 可选) — 指定块中需要量化的模块名称的列表。此参数可用于将某些线性模块排除在量化之外。 可以通过设置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 加载的、基于 gptqmodel 后端进行 GPTQ 量化的模型的所有可用属性和功能。
使用 optimum 的 gptq 配置字典获取兼容的类
用于检查参数是否正确
获取适用于 optimum gptq 配置的兼容字典
BitsAndBytesConfig
class transformers.BitsAndBytesConfig
< source >( load_in_8bit = Falseload_in_4bit = Falsellm_int8_threshold = 6.0llm_int8_skip_modules = Nonellm_int8_enable_fp32_cpu_offload = Falsellm_int8_has_fp16_weight = Falsebnb_4bit_compute_dtype = Nonebnb_4bit_quant_type = 'fp4'bnb_4bit_use_double_quant = Falsebnb_4bit_quant_storage = None**kwargs )
参数
- load_in_8bit (
bool,可选,默认为False) — 此标志用于启用基于 LLM.int8() 的 8 位量化。 - load_in_4bit (
bool,可选,默认为False) — 此标志用于启用 4 位量化,通过用bitsandbytes中的 FP4/NF4 层替换 Linear 层来实现。 - llm_int8_threshold (
float,可选,默认值为 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],可选) — 一个显式列表,指定我们不想转换为 8 位的模块。这对于像 Jukebox 这样在多个不同位置拥有多个头、且不一定位于最后位置的模型非常有用。例如,对于CausalLM模型,最后一个lm_head将保留其原始的dtype。 - llm_int8_enable_fp32_cpu_offload (
bool,可选,默认为False) — 此标志用于高级使用场景,且用户需了解该功能。如果您希望将模型拆分为不同部分,并在 GPU 上以 int8 运行部分组件、在 CPU 上以 fp32 运行其他组件,则可以使用此标志。这对于卸载google/flan-t5-xxl等大型模型非常有用。请注意,int8 操作不会在 CPU 上运行。 - llm_int8_has_fp16_weight (
bool,可选,默认为False) — 此标志使 LLM.int8() 以 16 位主权重运行。这对于微调非常有用,因为权重无需在反向传播过程中反复转换。 - bnb_4bit_compute_dtype (
torch.dtype或 str,可选,默认为torch.float32) — 此参数用于设置计算类型,该类型可能与输入类型不同。例如,输入可以是 fp32,但为了提升速度,可以将计算类型设置为 bf16。 - bnb_4bit_quant_type (
str, 可选, 默认值为"fp4") — 此参数用于设置 bnb.nn.Linear4Bit 层中的量化数据类型。可选值为 FP4 和 NF4 数据类型,分别通过fp4或nf4指定。 - bnb_4bit_use_double_quant (
bool,可选,默认为False) — 此标志用于嵌套量化,即对第一次量化得到的量化常数再次进行量化。 - bnb_4bit_quant_storage(
torch.dtype或 str,可选,默认为torch.uint8)— 用于设置打包量化 4 位参数的存储类型。 - kwargs (
dict[str, Any],可选) — 用于初始化配置对象的额外参数。
这是一个封装类,涵盖了使用 bitsandbytes 加载的模型中所有可用的属性和功能。
目前仅支持 LLM.int8()、FP4 和 NF4 量化。如果 bitsandbytes 中添加了更多方法,则此类的参数也会相应增加。
如果模型可量化,则返回 True,否则返回 False。
用于检查参数是否正确的安全检查器——同时会将某些 NoneType 参数替换为其默认值。
此方法返回用于该模型的量化方法。如果模型不可量化,则返回 None。
移除 config 中对应于默认配置属性的所有属性,以提高可读性,并将其序列化为 Python 字典。
HfQuantizer
class transformers.quantizers.HfQuantizer
< source >( quantization_config: QuantizationConfigMixin**kwargs )
HuggingFace 量化器的抽象类。目前支持对 HF transformers 模型进行推理和/或量化。 该类目前仅用于 transformers.PreTrainedModel.from_pretrained,尚无法轻松地在该方法的作用域之外使用。
Attributes
quantization_config (transformers.utils.quantization_config.QuantizationConfigMixin):
用于定义您想要量化的模型的量化参数的量化配置。
requires_calibration (bool):
该量化方法是否要求在使用模型之前对其进行校准。
如果量化需要额外的内存,请调整 infer_auto_device_map() 的 max_memory 参数
可能会反量化模型以恢复原始模型,但会损失一定的精度/性能。 请注意,并非所有量化方案都支持此操作。
加载序列化张量的 Op 类,例如 {"deserialize": Mxfp4Deserialize, "dequantize": Mxfp4Dequantize}。
反序列化用于构建单个模块的参数,因此仅在通用转换器上运行。反量化
同样在模型转换器的 Op 之前运行,例如在按专家合并之前。
这发生在张量实例化时,即张量从磁盘发送到设备时。dtype 用于将预量化的检查点张量 param 转换为目标数据类型。
如果该参数未被量化(即浮点类型),则使用来自已初始化的 nn.Module 的输入 dtype。
如果量化方法具有 Deserializer 或 Dequantizer(加载函数),则返回 None,由它们进行处理。
获取状态字典和元数据。在需要因量化而对状态字典进行少量修改时非常有用
返回对模型转换器未匹配到的任何参数所执行的加载操作
检查给定的参数是否需要量化。
postprocess_model
< source >( model: PreTrainedModel**kwargs )
在加载权重后对模型进行后处理。
请确保重写抽象方法 _process_model_after_weight_loading。
preprocess_model
< source >( model: PreTrainedModeldtype = None**kwargs )
在加载权重之前设置模型属性和/或转换模型。此时,模型应已在 meta 设备上初始化,因此您可以自由操作模型的骨架,以便就地替换模块。请确保重写抽象方法 _process_model_before_weight_loading。
从模型中移除量化配置。
在模型构建之前查看请求的 attn_implementation,以便量化器可以为其设置默认值。
update_device_map
< source >( device_map: dict[str, typing.Any] | None )
如果需要覆盖现有的设备映射,请重写此方法以传入新的设备映射。例如,对于 bitsandbytes,由于 accelerate 是硬性依赖,如果未传入 device_map,则 device_map 会被设置为 `“auto”“
update_dtype
< source >( dtype: torch.dtype )
某些量化方法要求显式将模型的 dtype 设置为目标 dtype。如果您希望确保保留该行为,则需要重写此方法
就地更新 model.tp_plan 或 model.ep_plan(由配置和所有子配置合并而成的完整计划),以纳入量化器的自定义键,例如 ‘inv_scale’
使模型的转换器(来自转换映射)加载序列化后的名称。模型的参数决定了具体的合并方式,例如将 experts.*.gate_proj.weight 合并到 experts.gate_up_proj:
experts.gate_up_proj_scale_inv是一个参数:合并操作会将experts.*.gate_proj.weight_scale_inv合并到其中- 否则,转换器还会收集
experts.*.gate_proj.weight_scale_inv,反量化操作会先执行
此方法用于检查通过 from_pretrained 传入的参数是否存在潜在冲突。对于所有与 transformers 集成的未来量化器,您都需要定义此方法。如果不需要显式检查,则直接返回空值即可。
HiggsConfig
class transformers.HiggsConfig
< source >( bits: int = 4p: int = 2modules_to_not_convert: list[str] | None = Nonehadamard_size: int = 512group_size: int = 256tune_metadata: dict[str, typing.Any] | None = None**kwargs )
参数
- bits (int, 可选,默认为 4) — 用于量化的位数。可以是 2、3 或 4。默认为 4。
- p (int, 可选,默认为 2) — 量化网格维度。支持 1 和 2。在实际应用中,2 始终更优。默认值为 2。
- modules_to_not_convert (
list,可选,默认为 [“lm_head”]) — 不应进行量化的线性层列表。 - hadamard_size (int, 可选,默认为 512) — HIGGS 方法的 Hadamard 大小。默认值为 512。矩阵的输入维度会被填充至该值。将其降低到 512 以下会降低量化的质量。
- group_size (int, 可选,默认为 256) — HIGGS 方法的分组大小。可以是 64、128 或 256。减小该值对性能的影响微乎其微。默认值为 256。必须是 hadamard_size 的约数。
- tune_metadata(‘dict’,可选,默认为 {})— 用于保存内核调优结果的模块级元数据(gemm 块形状、GPU 元数据等)。默认值为空字典。在调优过程中会自动设置。
HiggsConfig 是使用 HIGGS 方法进行量化的配置类。
用于检查参数是否正确的安全检查器——同时会将某些 NoneType 参数替换为其默认值。
HqqConfig
class transformers.HqqConfig
< source >( nbits: int = 4group_size: int = 64view_as_float: bool = Falseaxis: int | None = Nonedynamic_config: dict | None = Noneskip_modules: list = ['lm_head']**kwargs )
参数
- nbits (
int,可选,默认为 4) — 位数。支持的值为 (8, 4, 3, 2, 1)。 - group_size (
int,可选,默认值为 64) — 分组大小值。支持的值为任何可被 weight.shape[axis] 整除的值。 - view_as_float (
bool,可选,默认为False) — 如果设置为True,则将量化后的权重视为浮点数(用于分布式训练)。 - axis (
Optional[int],可选) — 执行分组的轴。支持的值为 0 或 1。 - dynamic_config (dict, 可选) — 动态配置的参数。键为层的名称标签,值为量化配置。 如果设置,则由 id 指定的每个层将使用其专用的量化配置。
- skip_modules (
list[str],可选,默认为['lm_head']) — 要跳过的nn.Linear层列表。 - kwargs (
dict[str, Any],可选) — 用于初始化配置对象的额外参数。
这是 hqq 的 BaseQuantizeConfig 的封装。
Override from_dict, used in AutoQuantizationConfig.from_dict in quantizers/auto.py
用于检查参数是否正确的安全检查器——同时会将某些 NoneType 参数替换为其默认值。
移除 config 中对应于默认配置属性的所有属性,以提高可读性,并将其序列化为 Python 字典。
MetalConfig
class transformers.MetalConfig
< source >( bits: int = 4group_size: int = 64modules_to_not_convert: list | None = Nonedequantize: bool = False**kwargs )
针对 Apple Silicon (MPS) 设备的 Metal 仿射量化配置类。
该量化方法使用 Hugging Face Hub 上的 mlx-quantization-metal-kernels Metal 内核,执行具有可配置位宽和分组大小的仿射量化(scales + qbiases)。
量化后的权重被打包为 uint32 张量,前向传播使用融合的 dequantization + matmul Metal 内核。
Mxfp4Config
类 transformers.Mxfp4Config
< source >( modules_to_not_convert: list | None = Nonedequantize: bool = False**kwargs )
这是一个封装类,涵盖了使用 mxfp4 量化加载的模型中所有可操作的属性和功能。
NVFP4Config
class transformers.NVFP4Config
< source >( modules_to_not_convert: list[str] | None = None**kwargs )
用于即时 NVFP4 权重量化的配置。
FbgemmFp8Config
class transformers.FbgemmFp8Config
< source >( activation_scale_ub: float = 1200.0modules_to_not_convert: list | None = None**kwargs )
这是一个封装类,涵盖了使用 fbgemm fp8 量化加载的模型中所有可操作的属性和功能。
CompressedTensorsConfig
class transformers.CompressedTensorsConfig
< source >( config_groups: dict[str, typing.Union[ForwardRef('QuantizationScheme'), list[str]]] | None = Noneformat: str = 'dense'quantization_status: QuantizationStatus = 'initialized'kv_cache_scheme: typing.Optional[ForwardRef('QuantizationArgs')] = Noneglobal_compression_ratio: float | None = Noneignore: list[str] | None = Nonequant_method: str = 'compressed-tensors'run_compressed: bool | None = Nonedequantize: bool = Falseuse_optimized_inference: bool = False**kwargs )
参数
- config_groups (
typing.dict[str, typing.Union[ForwardRef('QuantizationScheme'), typing.list[str]]], 可选) — 将组名映射到量化方案定义的字典 - format (
str,可选,默认为"dense") — 权重存储的格式,例如dense、float-quantized或pack-quantized - quantization_status (
QuantizationStatus,可选,默认为"initialized") — 模型在量化生命周期中的状态,例如 ‘initialized’、‘calibration’、‘frozen’ - kv_cache_scheme (
typing.Union[QuantizationArgs, NoneType],可选) — 指定 kv cache 的量化方式。如果为 None,则不对 kv cache 进行量化。 - global_compression_ratio (
typing.Union[float, NoneType],可选) — 模型压缩的 0-1 浮点百分比 - ignore (
typing.Union[typing.list[str], NoneType], 可选) — 不进行量化的层名称或类型,支持以 ‘re:’ 为前缀的正则表达式 - quant_method (
str,可选,默认为"compressed-tensors") — 请勿覆盖,应为 compressed-tensors - run_compressed (
bool, 可选) — 已弃用,请改用dequantize。其唯一作用是设置dequantize为其相反值,run_compressed=False表示dequantize=True。 - dequantize (
bool,可选,默认为False) — 当为True时,量化权重会在加载时反量化回模型的 dtype(例如 BF16),这是微调或以原始 dtype 保存模型所必需的。当为False时,权重将保持压缩形式,compressed-tensors 会在第一次前向传播时对其进行解压缩。 - use_optimized_inference (
bool,可选,默认为False) — 当设置为True时,对于已有对应 kernel 的方案,相关层将保留其量化权重并通过这些 kernel 执行(目前支持 W8A8 FP8,适用于 CUDA SM89+、XPU,或 torch >= 2.15 的 MPS)。仅用于推理,且需显式启用:若未启用,模型将走常规的 compressed-tensors 路径。当dequantize=True时,此参数将被忽略。
这是一个处理 compressed-tensors 量化配置选项的包装类。
它是 compressed_tensors.QuantizationConfig 的包装器。
from_dict
< source >( config_dictreturn_unused_kwargs = False**kwargs ) → QuantizationConfigMixin
从 Python 参数字典实例化一个 CompressedTensorsConfig。 可选地,解包嵌套的 quantization_config 中的任何参数。
移除 config 中对应于默认配置属性的所有属性,以提高可读性,并将其序列化为 Python 字典。
TorchAoConfig
class transformers.TorchAoConfig
< source >( quant_type: AOBaseConfigmodules_to_not_convert: list | None = Noneinclude_input_output_embeddings: bool = Falseuntie_embedding_weights: bool = False**kwargs )
参数
- quant_type (
AOBaseConfig) — 一个 torchaoAOBaseConfig实例,用于指定量化类型,例如Int4WeightOnlyConfig(group_size=32)、Int8WeightOnlyConfig()、Int8DynamicActivationInt8WeightConfig()、Float8WeightOnlyConfig()等。 - modules_to_not_convert (
list,可选,默认为None) — 不进行量化的模块列表,适用于那些明确要求某些模块保持原始精度的模型量化场景。 - include_input_output_embeddings (
bool,可选,默认为False) — 是否将嵌入层包含在量化中。如果设置了此标志,输入嵌入层也会从 module_not_to_convert 列表中移除。 - untie_embedding_weights (
bool,可选,默认为False) — 在量化与权重共享的输入嵌入权重时,是否解除权重绑定。
用于 torchao 量化/稀疏技术的配置类。
示例:
from torchao.quantization import Int4WeightOnlyConfig
quantization_config = TorchAoConfig(Int4WeightOnlyConfig(group_size=32))
model = AutoModelForCausalLM.from_pretrained(
model_id, device_map="cuda", torch_dtype=torch.bfloat16, quantization_config=quantization_config
)从字典创建配置。
返回要应用的量化配置。
验证配置并设置默认值。
将配置转换为字典。
BitNetQuantConfig
class transformers.BitNetQuantConfig
< source >( modules_to_not_convert: list | None = Nonelinear_class: str = 'bitlinear'quantization_mode: str = 'offline'use_rms_norm: bool = Falserms_norm_eps: float | None = 1e-06**kwargs )
参数
- modules_to_not_convert (
Optional[List],可选) — 可选地,提供一个nn.Linear权重参数的完整路径列表,这些参数不应被量化。默认为 None。 - linear_class (
str,可选,默认为"bitlinear") — 要使用的线性层类型。可以是bitlinear或autobitlinear。 - quantization_mode (
str, 可选,默认为"offline") — 要使用的量化模式。可以是online或offline。 在online模式下,权重量化参数会在每次前向传播过程中动态计算(例如,基于当前的权重值)。这可以适应训练过程中的权重变化(量化感知训练 - QAT)。 在offline模式下,量化参数会在推理之前预先计算。这些参数随后被固定并加载到量化模型中。与在线量化相比,这通常能带来更低的运行时开销。 - use_rms_norm (
bool,可选,默认为False) — 是否在量化前对激活值应用 RMSNorm。这与原始 BitNet 论文中在量化/打包前对激活值进行归一化的方法一致。 - rms_norm_eps (
float,可选,默认值为 1e-06) — RMSNorm 层中用于数值稳定性的 epsilon 值。 - kwargs (
dict[str, Any], 可选) — 可供特定量化后端或未来版本使用的其他关键字参数。
用于应用 BitNet 量化的配置类。
用于检查参数是否正确
SpQRConfig
class transformers.SpQRConfig
< source >( bits: int = 3beta1: int = 16beta2: int = 16shapes: dict[str, int] | None = Nonemodules_to_not_convert: list[str] | None = None**kwargs )
参数
- bits (
int,可选,默认为 3) — 指定权重以及一阶零点(zero-points)和缩放因子(scales)的位数。 目前仅支持 bits = 3。 - beta1 (
int,可选,默认为 16) — SpQR 瓦片宽度。目前仅支持 beta1 = 16。 - beta2 (
int,可选,默认为 16) — SpQR 瓦片高度。目前仅支持 beta2 = 16。 - shapes(
Optional,可选)— 一个字典,用于保存每个对象的形状。我们需要它,因为仅凭 bits、beta1 和 beta2 无法推断出参数的确切大小。 - modules_to_not_convert (
Optional[list[str]],可选) — 可选地,提供一个nn.Linear权重参数的完整路径列表,这些参数不应被量化。 默认为 None。 - kwargs (
dict[str, Any],可选) — 用于初始化配置对象的额外参数。
这是一个关于 spqr 参数的包装类。有关更多详细信息,请参阅原始出版物。
用于检查参数是否正确的安全检查器——同时会将某些 NoneType 参数替换为其默认值。
FineGrainedFP8Config
class transformers.FineGrainedFP8Config
< source >( activation_scheme: str = 'dynamic'weight_block_size: tuple = (128, 128)dequantize: bool = Falsemodules_to_not_convert: list | None = Nonemodules_to_convert: list | None = Nonescale_fmt: str = 'float'expert_dtype: str = 'fp8'**kwargs )
参数
- activation_scheme (
str,可选,默认为"dynamic") — 用于激活的方案,目前默认且唯一支持的方案为“dynamic”。 - weight_block_size (
typing.tuple[int, int],可选,默认为(128, 128)) — 用于量化的权重块大小,默认为 (128, 128)。 - dequantize (
bool,可选,默认为False) — 是否在加载模型时进行反量化。 - modules_to_not_convert (
list, 可选) — 在量化过程中不应进行转换的模块名称列表。 - modules_to_convert (
list, 可选) — 在量化过程中需要转换的额外模块名称列表,例如嵌入表。 - scale_fmt (
str,可选,默认为"float") — 每个块权重缩放的存储数据类型:"float"(fp32,V3 风格)或"ue8m0"(1 字节torch.float8_e8m0fnu,V4 风格)。 - expert_dtype (
str,可选,默认为"fp8") — MoE 专家权重的格式:"fp8",或针对 DeepSeek-V4 的 FP4 打包专家使用"fp4"。
FineGrainedFP8Config 是用于细粒度 FP8 量化的配置类,主要用于 deepseek 模型。
用于检查参数是否正确
QuarkConfig
FourOverSixConfig
class transformers.FourOverSixConfig
< source >( activation_dtype: str | None = Noneactivation_scale_rule: str | None = Nonedtype: str = 'nvfp4'gradient_dtype: str | None = Nonegradient_scale_rule: str | None = Nonekeep_master_weights: bool = Falsematmul_backend: str | None = Noneoutput_dtype: str | None = 'bfloat16'quantize_backend: str | None = Nonescale_rule: str = 'mse'weight_dtype: str | None = Noneweight_scale_2d: bool = Falseweight_scale_rule: str | None = Nonemodule_config_overrides: dict[str, dict[str, typing.Any]] | None = Nonemodules_to_not_convert: list[str] | None = ['lm_head']**kwargs )
参数
- activation_dtype (
str, 可选) — 量化激活张量时使用的数据类型。如果未提供,则使用dtype。 - activation_scale_rule (
str, 可选) — 用于选择激活张量中各块缩放因子的缩放规则。如果未提供,则使用scale_rule。 - dtype (
str,默认值为 “nvfp4”,可选,默认为"nvfp4") — 用于该层权重、激活值和张量的数据类型。可以是"nvfp4"或"mxfp4"。 - gradient_dtype (
str, 可选) — 用于量化梯度张量的数据类型。如果未提供,则使用dtype。 - gradient_scale_rule (
str, 可选) — 在为梯度张量中的块选择缩放因子时所使用的缩放规则。如果未提供,则使用scale_rule。 - keep_master_weights (
bool,默认值为 False,可选,默认为False) — 是否保留主权重。如果为True,则会始终保留高精度权重,并在每次前向传播中在线量化权重。这对于量化训练非常有用。 - matmul_backend (
str, 可选) — 用于矩阵乘法的后端。可以是"cutlass"或"pytorch"。如果未提供,则优先使用 CUTLASS(如果可用),否则使用 PyTorch。 - output_dtype (
str,可选,默认为"bfloat16") — 用于该层输出的数据类型。可以是"bfloat16"或"float16"。 - quantize_backend (
str, 可选) — 用于量化的后端。可以是"cuda"、"triton"或"pytorch"。如果未提供,将根据您的环境以及各后端支持的选项自动选择最快的后端。通常,"cuda"用于推理,"triton"用于训练,而"pytorch"用于非 CUDA 设备。 - scale_rule (
str,默认值为 “mse”,可选,默认为"mse") — 用于选择块缩放的规则。对于 Four Over Six,可以是"mse"、"mae"或"abs_max";对于默认的 NVFP4 量化,可以是"static_6";或者使用"static_4"将所有块缩放到最大值为 4。 - weight_dtype (
str, 可选) — 量化权重张量时使用的数据类型。如果未提供,则使用dtype。 - weight_scale_2d (
bool,默认 False,可选,默认为False) — 是否以 2D 块为单位计算权重张量的缩放因子。此操作应在训练期间执行。 - weight_scale_rule (
str, 可选) — 在为权重张量中的块选择缩放因子时使用的缩放规则。如果未提供,则使用scale_rule。 - module_config_overrides (
dict[str, dict[str, Any]], 可选) — 模块特定配置覆盖的字典。键应为模块名称,值应为包含该模块量化配置的字典。 可用于覆盖特定模块的默认配置。 - modules_to_not_convert (
list[str],可选,默认为['lm_head']) — 要排除在量化之外的模块列表。默认情况下,lm_head会被排除。
这是一个包含 fouroversix 量化所有选项的包装类。简而言之,Four Over Six 是对 NVFP4 量化的一种改进,它会将每个包含 16 个 FP4 值的块中的最大值自适应地缩放到 4 或 6。选择缩放因子 6 会利用 FP4 值的完整范围,而选择缩放因子 4 则能使量化误差的分布更加均匀。更多详情请参阅原始论文:https://arxiv.org/abs/2512.02010。
FPQuantConfig
class transformers.FPQuantConfig
< source >( forward_dtype: str = 'nvfp4'forward_method: str = 'abs_max'backward_dtype: str = 'bf16'store_master_weights: bool = Falsehadamard_group_size: int | None = Nonepseudoquantization: bool = Falsetransform_init: str = 'hadamard'modules_to_not_convert: list[str] | None = None**kwargs )
参数
- forward_dtype (
str,可选,默认为"nvfp4") — 前向传播所使用的 dtype。 - forward_method (
str,可选,默认为"abs_max") — 前向传播所使用的缩放方式。可以是"abs_max"或"quest"。"abs_max"更适合 PTQ,"quest"更适合 QAT。 - backward_dtype (
str,可选,默认为"bf16") — 反向传播所使用的 dtype。 - store_master_weights (
bool,可选,默认为False) — 是否存储主权重。对层权重进行 QAT 时需要此设置。 - hadamard_group_size (
int, 可选) —"quest"在量化前进行 hadamard 变换时的分组大小,与 MXFP4 的分组大小(32)一致。如果为None,则对于"nvfp4"会设置为 16,对于"mxfp4"会设置为 32。 - pseudoquantization(
bool,可选,默认为False)— 是否使用基于 Triton 的伪量化。对于非 Blackwell GPU 是必需的。不会带来任何加速效果。仅用于调试目的。 - transform_init(
str,可选,默认为"hadamard")——用于初始化预处理矩阵的方法。可以是"hadamard"、"identity"或"gsr"。 - modules_to_not_convert (
list, 可选) — 不进行量化的模块列表,适用于量化那些明确要求某些模块保持原始精度的模型。
FPQuantConfig 是使用 FPQuant 方法进行量化的配置类。
用于检查参数是否正确的安全检查器——同时会将某些 NoneType 参数替换为其默认值。
AutoRoundConfig
class transformers.AutoRoundConfig
< source >( bits: int = 4group_size: int = 128sym: bool = Truebackend: str = 'auto'**kwargs )
参数
- bits (
int,可选,默认为 4) — 量化目标位数,支持的取值为 (2, 3, 4, 5, 6, 7, 8)。 - group_size (
int,可选,默认值为 128) — 组大小值 - sym (
bool,可选,默认为True) — 是否使用对称量化 - backend (
str,可选,默认为"auto") — 推理后端。默认情况下,AutoRound 会根据设备、量化设置和已安装的库选择兼容的后端。有关所有后端选项,请参阅 指定推理后端。
这是一个封装类,涵盖了使用 AutoRound 量化加载的模型时,您可以操作的所有可能属性和功能。
用于检查参数是否正确。
SinqConfig
类 transformers.SinqConfig
< source >( nbits: int = 4group_size: int = 64tiling_mode: str = '1D'method: str = 'sinq'modules_to_not_convert: list[str] | None = None**kwargs: Any )
参数
- nbits (
int,默认值为 4) — 权重的量化位数。 - group_size (
int,默认值为 64) — SINQ 权重量化中使用的分组大小(必须是 8 的倍数)。 - tiling_mode (
str,默认值为 “1D”) — SINQ 的平铺模式(通常为 “1D”;如果后端支持,则使用 “2D”)。 - method (
str,默认值为 “sinq”) — “sinq” – 无需校准的仅权重 SINQ “asinq” – A-SINQ(激活感知),Hugging Face 不支持。请参阅官方 SINQ 仓库。 - modules_to_not_convert (
list[str],可选) — 需要保持全精度存储的模块名称/前缀列表。 - **kwargs —
额外的用户参数(保留在
_extra_kwargs中以便往返)。
SINQ / A-SINQ 的量化配置。
将此传递给:
AutoModel.from_pretrained(…, quantization_config=SinqConfig(…))
GgufConfig
类 transformers.GgufConfig
< source >( gguf_file: str | None = Nonedequantize: bool = False**kwargs )
加载量化后的 GGUF 检查点,并将其权重保留在 GGUF 块中。