Transformers 量化配置全景指南:从 BitsAndBytes 到 HfQuantizer 的源码级解析
【免费下载链接】transformers🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers
量化(Quantization)通过将权重与激活以 8-bit 整数(int8)、4-bit 等更低精度的数据类型表示,显著降低模型的内存占用与计算开销,让原本放不进显存的大模型可以被加载推理,并加速推理过程。这篇指南以 docs/source/en/main_classes/quantization.md 为骨架,系统讲解 Transformers 当前内置的全部量化配置类(Quanto、AQLM、VPTQ、AWQ、EETQ、GPTQ、bitsandbytes、HIGGS、HQQ、Metal、MXFP4、NVFP4、FBGEMM-FP8、CompressedTensors、TorchAO、BitNet、SpQR、FineGrainedFP8、Quark、FourOverSix、FPQuant、AutoRound、SINQ)以及量化器抽象基类HfQuantizer,并结合 量化配置源码 与 量化器实现目录 展开参数含义与底层调用链。读完本文,你将掌握:每一种内置量化方案的配置参数与适用场景、如何通过quantization_config=在from_pretrained中加载量化模型、以及如何基于HfQuantizer为 Transformers 尚未原生支持的量化算法编写自定义量化器。
量化在 Transformers 中的总体架构
Transformers 的量化生态围绕两个核心概念展开:
- 量化配置(Quantization Config):一类以
quant_method字段标识算法的配置对象,绝大多数继承自 QuantizationConfigMixin。它定义了"如何量化"的全部参数,并可通过to_json_file()/to_json_string()序列化进模型的config.json。 - 量化器(HfQuantizer):一个插入到
PreTrainedModel.from_pretrained加载流程中的抽象类,负责把配置落地为真实的模块替换、权重转换与环境校验,参见 quantizers/base.py。
配置与量化器之间由自动分发表连接。quantizers/auto.py 中的AUTO_QUANTIZER_MAPPING将每个量化方法与具体的量化器类一一对应(如"gptq"→GptqHfQuantizer、"bitsandbytes_4bit"→Bnb4BitHfQuantizer),AUTO_QUANTIZATION_CONFIG_MAPPING 则完成quant_method字符串到配置类的映射。当你在from_pretrained中传入quantization_config=参数时,底层会经由 get_hf_quantizer() 完成配置合并、环境校验(validate_environment)、设备映射调整与张量并行计划更新,从而把模型改造成量化版本。
从文件布局看,QuantizationMethod 枚举集中登记了bitsandbytes、gptq、awq、quanto、torchao、mxfp4、sinq等全部受支持的量化算法标识。用户在from_pretrained中手动传入的配置对象(quantization_config参数)和模型自身config.json中已存储的量化配置(pre_quantized=True)会经过merge_quantization_configs合并,后者会以模型自带配置为主、以用户传入的"加载属性"(如backend、dequantize)覆盖部分字段。
经典算法配置:bitsandbytes 的 8-bit 与 4-bit
BitsAndBytesConfig 是所有配置类中应用最广泛的一个,它同时承载LLM.int8()8-bit 量化与 FP4/NF4 4-bit 量化两种能力。其构造约束值得注意:load_in_4bit与load_in_8bit不能同时为True(源码会在__init__与两个 setter 中同时校验并抛出ValueError)。
8-bit(LLM.int8())参数
| 参数 | 默认值 | 含义 |
|---|---|---|
load_in_8bit | False | 是否启用 LLM.int8() 8-bit 量化 |
llm_int8_threshold | 6.0 | 离群值检测阈值。hidden states 中超过该值的元素视为离群值,其计算回退到 fp16。论文观测到大模型权重大多服从 [-3.5, 3.5] 分布,但有少数系统性离群值落在 [-60,-6] 或 [6,60],int8 对量级约 5 的值效果良好,超出后性能显著下降。小模型或微调等不稳定模型可能需要更低阈值 |
llm_int8_skip_modules | None | 不希望转成 8-bit 的模块显式列表,例如 CausalLM 的lm_head保持原 dtype |
llm_int8_enable_fp32_cpu_offload | False | 高级用法:将模型拆分,部分在 GPU 上跑 int8、部分在 CPU 上跑 fp32,适合google/flan-t5-xxl这类超大模型(注意 int8 运算不会在 CPU 上执行) |
llm_int8_has_fp16_weight | False | 使用 16-bit 主权重运行 LLM.int8(),便于微调(反向传播无需反复转换权重) |
4-bit(FP4/NF4)参数
| 参数 | 默认值 | 含义 |
|---|---|---|
load_in_4bit | False | 是否将 Linear 层替换为 bitsandbytes 的 FP4/NF4 4-bit 层 |
bnb_4bit_compute_dtype | torch.float32 | 计算类型,可与输入类型不同。例如输入 fp32、计算设为 bf16 以获得加速 |
bnb_4bit_quant_type | "fp4" | 量化数据类型,可取值fp4或nf4 |
bnb_4bit_use_double_quant | False | 嵌套量化(double quantization):对第一次量化的量化常数再次量化,进一步省显存 |
bnb_4bit_quant_storage | torch.uint8 | 打包 4-bit 参数的存储类型,字符串取值可为float16/float32/int8/uint8/float64/bfloat16 |
代码层面的细节可以给实战提供重要参考:bnb_4bit_compute_dtype与bnb_4bit_quant_storage在源码中做了严格的类型清洗——传入字符串时通过getattr(torch, ...)解析为torch.dtype,非法字符串直接抛错;quantization_method()方法会根据开关返回"llm_int8"、"fp4"或"nf4",而post_init()对每个参数做类型检查(如llm_int8_threshold必须是 float)。一个值得留意的设计是:单靠设置quantization_config=BitsAndBytesConfig(...)而两个 load 开关都为 False 时,is_quantizable()返回 False,模型不会被量化。
典型的 4-bit NF4 加载方式如下:
from transformers import AutoModelForCausalLM, BitsAndBytesConfig import torch quantization_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_compute_dtype=torch.bfloat16, bnb_4bit_use_double_quant=True, ) model = AutoModelForCausalLM.from_pretrained( "meta-llama/Llama-3-8B", quantization_config=quantization_config, device_map="auto", )权重压缩算法:GPTQ 与 AWQ
GPTQ 与 AWQ 是两种先离线校准、再以低比特表示权重的经典方法,这类方法通常在量化前需要一批校准数据,其"量化动作本身"多数由optimum/gptqmodel、auto-awq生态完成,Transformers 侧的配置类负责描述参数并在加载时正确解析预量化 checkpoint。
GPTQConfig
GPTQConfig 完整参数如下:
bits(必填,支持 2/3/4/8):量化位宽,post_init()会校验;tokenizer:处理数据集用的分词器,可传自定义对象、模型 id 或本地目录;dataset:量化用的数据集,字符串仅支持['wikitext2','c4','c4-new'],或自定义字符串列表;group_size(默认 128):量化分组大小,推荐 128,-1表示按列(per-column)量化,必须 >0 或等于 -1;damp_percent(默认 0.1):用于阻尼的 Hessian 对角均值百分比,取值必须在 (0, 1);desc_act(默认 False):是否按激活大小降序量化列(act-order),设为 False 可显著加速推理,但困惑度可能略变差;act_group_aware(默认 True):desc_act=False时启用 GAR(group aware activation order)提升量化质量;当desc_act=True时源码会自动将其强制关闭并打印 warning;sym(默认 True):是否对称量化;true_sequential(默认 True):在单个 Transformer block 内也按层序量化——每个后续层使用已经过量化层处理的输入;format(默认"gptq"):权重格式,gptq(v1) 由 gptqmodel 支持,gptq_v2为 gptqmodel 独有;兼容旧字段checkpoint_format;backend(默认 None,最终回落为"auto"):选择推理 kernel;model_seqlen:模型能处理的最大序列长度;block_name_to_quantize:要量化的 block 名,为 None 时用常见模式(如model.layers)推断;module_name_preceding_first_block:第一个 Transformer block 之前的层;batch_size(默认 1)、pad_token_id(batch_size>1 时数据准备需要)、max_input_length(exllama act-order 后端初始化缓冲需要);cache_block_outputs(默认 True):缓存 block 输出供下一 block 复用;modules_in_block_to_quantize:block 内要按顺序量化的模块子列表,用于精细控制量化范围(需要 optimum ≥ 1.15.0,源码中做了版本强校验)。
加载一个已用 GPTQ 量化好的模型:
from transformers import AutoModelForCausalLM, GPTQConfig quantization_config = GPTQConfig(bits=4, dataset="c4", tokenizer=tokenizer) model = AutoModelForCausalLM.from_pretrained( "model-id", device_map="auto", quantization_config=quantization_config, )AwqConfig
AwqConfig 直接继承GPTQConfig以复用其骨架,并补充 AWQ 特有字段:
bits(默认 4)、group_size(默认 128):语义同 GPTQ;zero_point(默认 True):是否使用零点量化;backend(默认AwqBackend.AUTO):后端枚举见 AwqBackend,取值包括auto、auto_trainable、machete、marlin、exllama_v2/exllama_v1、gemm/gemm_triton、gemv/gemv_fast、torch_awq/torch_fused_awq等;旧的LEGACY_AWQ(即"autoawq")会被自动映射为AUTO;format(隐藏于 kwargs,默认gemm):权重布局格式,AwqFormat 枚举值为gemm、gemv、gemv_fast、llm-awq,兼容旧字段version;modules_to_not_convert(默认 None):保持原精度的模块列表,对需要保留部分模块精度的模型非常有用(如 Whisper encoder、Llava encoder、Mixtral gate 层)。
需要特别提醒:源码 docstring 明确说明Transformers 不直接执行 AWQ 量化,需要参考 AutoAWQ 的文档先完成模型量化,Transformers 负责加载这些预量化 checkpoint。
训练后量化(PTQ)与动态量化配置
QuantoConfig
QuantoConfig 面向quanto库,属于训练后量化方案:
weights(默认"int8"):权重量化目标类型,仅支持float8、int8、int4、int2;activations(默认 None):激活量化目标类型,仅支持 None、int8、float8;modules_to_not_convert:保持原精度的模块列表。
源码的post_init()会对weights与activations的取值做白名单校验。
EetqConfig
EetqConfig 使用eetq库,weights目前仅支持"int8",另有modules_to_not_convert。它提供的是无需校准数据、直接运行的 8-bit 参考实现路径。
FbgemmFp8Config
FbgemmFp8Config 使用 fbgemm FP8 量化,核心参数activation_scale_ub(默认 1200.0)用于输入激活量化时的激活缩放上界;modules_to_not_convert控制跳过模块。它通过get_loading_attributes()暴露activation_scale_ub作为加载期属性,可在from_pretrained时被覆盖。
面向新兴硬件的低比特方案:HIGGS、MXFP4、NVFP4、FourOverSix、FPQuant、Metal
这一类配置围绕新一代低比特数据格式(如 FP4、MXFP4、NVFP4)与特定硬件(Blackwell、Apple Silicon)展开。
HiggsConfig
HiggsConfig:
bits(默认 4):可为 2、3、4;p(默认 2):量化网格维度,仅 1 或 2 被支持,实践中 p=2 效果更好;modules_to_not_convert(默认含lm_head);hadamard_size(默认 512):HIGGS 方法的 Hadamard 尺寸,矩阵输入维度会 padding 到该值,低于 512 会降低量化质量;group_size(默认 256):可为 64/128/256,且必须整除hadamard_size(源码强制校验);tune_metadata:保存 kernel 调优结果的模块级元数据(gemm block 形状、GPU 元数据等),调优时自动写入。
Mxfp4Config
Mxfp4Config 面向 mxfp4 格式,仅有modules_to_not_convert与dequantize(默认 False)两个关键参数。dequantize=True表示加载时把模型反量化回 bf16,此时通过get_loading_attributes()传递dequantize作为加载属性。
NVFP4Config
NVFP4Config 用于加载时即时(on-the-fly)的 NVFP4 权重量化,仅提供modules_to_not_convert,额外 kwargs 会被忽略并打印日志。它与下面的 FourOverSix/FPQuant 属于相邻但侧重点不同的方案。
FourOverSixConfig
FourOverSixConfig 是对 NVFP4 量化的改进——每个 16 个 FP4 值的块内,自适应地把最大值缩放到 4 或 6(取 6 用满 FP4 取值范围,取 4 则量化误差分布更均匀)。参数非常丰富:
dtype(默认"nvfp4"):层权重/激活的数据类型,可为nvfp4或mxfp4;scale_rule(默认"mse"):块缩放规则,可为mse、mae、abs_max(FourOverSix),或static_6(标准 NVFP4)、static_4(所有块最大值限制为 4);activation_dtype/activation_scale_rule/weight_dtype/weight_scale_rule/gradient_dtype/gradient_scale_rule:分别为激活、权重、梯度指定类型与缩放规则,缺省回落到dtype或scale_rule;output_dtype(默认"bfloat16"):层输出类型,可为bfloat16或float16;keep_master_weights(默认 False):保留高精度主权重并在每次前向中在线量化,用于量化训练;weight_scale_2d(默认 False):训练期间对权重按 2D block 计算缩放;quantize_backend:可选cuda(通常用于推理)、triton(通常用于训练)、pytorch(非 CUDA 设备),缺省自动选择;matmul_backend:可选cutlass或pytorch;module_config_overrides:按模块名覆盖默认量化配置;modules_to_not_convert(默认["lm_head"])。
FPQuantConfig
FPQuantConfig 是用于 QAT/PTQ 的 4-bit 浮点量化配置:
forward_dtype(默认"nvfp4"):前向数据类型,目前仅支持mxfp4与nvfp4;forward_method(默认"abs_max"):前向缩放方式,abs_max更适合 PTQ、quest更适合 QAT;nvfp4 只允许abs_max;backward_dtype(默认"bf16"):反向类型,支持bf16/mxfp8/mxfp4,且非 bf16 反向目前仅兼容 mxfp4 前向;store_master_weights(默认 False):对层权重做 QAT 时是否需要保存主权重;hadamard_group_size:量化前 Hadamard 变换的分组大小,缺省时 nvfp4 取 16、mxfp4 取 32;pseudoquantization(默认 False):使用基于 Triton 的伪量化,非 Blackwell GPU 上必须开启,无加速、仅调试用;transform_init(默认"hadamard"):预处理矩阵初始化方式,可为hadamard、identity、gsr;modules_to_not_convert(缺省自动设为["lm_head"])。
MetalConfig
MetalConfig 面向 Apple Silicon(MPS)设备,使用来自 Hub 的mlx-quantization-metal-kernelsMetal kernel 做仿射量化(scales + qbiases),量化权重打包成uint32张量,前向走融合反量化 + matmul 的 Metal kernel:
bits(默认 4,支持 2/4/8);group_size(默认 64,必须为正);modules_to_not_convert、dequantize(默认 False)。
稀疏与混合方案:AQLM、VPTQ、SpQR、BitNet、FineGrainedFP8、SINQ
AqlmConfig
AqlmConfig 基于 AQLM(Additive Quantization of Language Models)方法:
in_group_size(默认 8):输入维度的分组大小;out_group_size(默认 1):输出维度分组大小,官方建议恒为 1;num_codebooks(默认 1):加性量化(Additive Quantization)过程的码本数量;nbits_per_codebook(默认 16):单个码本向量编码比特数,码本大小为 2^bits;linear_weights_not_to_quantize:保持不量化的nn.Linear权重完整路径列表。
VptqConfig
VptqConfig 面向 VPTQ(Vector Post-Training Quantization):
enable_proxy_error(默认 False):是否计算每层代理误差——源码目前强制其为 False;config_for_layers:每层量化参数字典,值由 VptqLayerConfig 描述(enable_norm、enable_perm、group_num、group_size、num_centroids、num_res_centroids、vector_lens、outlier_size等);shared_layer_config:层间共享的量化参数;modules_to_not_convert:不量化的模块(如 Whisper encoder 等需保持原精度的部分)。
SpQRConfig
SpQRConfig 支持 SpQR 方法的 checkpoint 加载。当前实现非常"专一":bits仅支持 3、beta1与beta2均仅支持 16(SpQR tile 宽/高),三者不匹配即抛错;另有shapes(由于仅凭 bits/beta 无法推导各对象精确尺寸,需显式给出形状字典)与modules_to_not_convert。
BitNetQuantConfig
BitNetQuantConfig:
linear_class(默认"bitlinear"):可为bitlinear或autobitlinear;quantization_mode(默认"offline"):online模式每次前向动态计算权重量化参数,可适应训练中权重变化(QAT);offline模式在推理前预计算量化参数并固定加载,运行时开销更低;modules_to_not_convert:不量化的模块;use_rms_norm(默认 False):量化前对激活做 RMSNorm(对齐 BitNet 原论文做法);rms_norm_eps(默认 1e-6)。
FineGrainedFP8Config
FineGrainedFP8Config 主要用于 DeepSeek 系列模型的细粒度 FP8 量化,同时兼容 MiniMax(会把ignored_layers视为modules_to_not_convert的别名):
activation_scheme(默认"dynamic"):激活量化方案,目前仅dynamic(与static)被支持;weight_block_size(默认(128, 128)):权重块大小(两个正整数);dequantize(默认 False):加载时是否反量化模型;modules_to_not_convert:不转换的模块;scale_fmt(默认"float"):逐块权重缩放因子的存储格式,float(fp32,V3 风格)或ue8m0(1 字节torch.float8_e8m0fnu,V4 风格)。
从 quantizers/auto.py 可以看到"fp8"、"mxfp8"都复用了FineGrainedFP8HfQuantizer,即 MXFP8(E4M3 权重 + 逐块 [1,32] E8M0 缩放)与 FP8 共用同一条反量化加载管线。
SinqConfig
SinqConfig:
nbits(默认 4):权重量化比特数;group_size(默认 64):SINQ 分组大小,需为 8 的倍数(源码仅给 warning,后端可能拒绝);tiling_mode(默认"1D"):SINQ 平铺模式;method(默认"sinq"):sinq表示免校准的 weight-only SINQ,asinq(激活感知 A-SINQ)在 HF 中不被支持;modules_to_not_convert:保持全精度的模块名/前缀。
开放生态桥接配置:CompressedTensors、TorchAO、AutoRound、HQQ、Quark
这些配置面向上游成熟生态(如 Neural Magic 的 compressed-tensors、PyTorch 官方 torchao、Intel 的 auto-round、mobiusml 的 HQQ、AMD 的 Quark),Transformers 通过薄封装把 checkpoint 语义翻译到自身加载流程。
CompressedTensorsConfig
CompressedTensorsConfig 是compressed_tensors.QuantizationConfig的包装,导入时需要compressed-tensors>=0.15.0:
config_groups:把 group 名映射到量化方案定义(QuantizationScheme或层列表)的字典;format(默认"dense"):权重存储格式,如dense、float-quantized、pack-quantized;quantization_status(默认"initialized"):模型量化生命周期状态(initialized/calibration/frozen/compressed);kv_cache_scheme:KV 缓存量化方案,None 表示不量化 KV 缓存;global_compression_ratio:0-1 的模型压缩比例;ignore:不量化的层名或类型,支持re:前缀的正则;dequantize(默认 False):为 True 时加载期把量化权重反量化回模型 dtype(如 BF16),适合微调或以原 dtype 保存;为 False 时保持压缩形式、首个前向时由 compressed-tensors 解压;use_optimized_inference(默认 False):对已有专用 kernel 的层(当前为 W8A8 FP8,需 CUDA SM89+ 或 XPU)走优化 kernel,仅推理、需主动开启;dequantize=True时自动忽略。
源码中的post_init()与has_fp8_modules属性体现了严格的自我保护:若 checkpoint 实际未压缩却要求压缩执行,会强制回退到dequantize=True;若声称开启优化推理但无 FP8 模块,也会自动关闭。
TorchAoConfig
TorchAoConfig 的用法与其它配置类不同——quant_type直接接收一个 torchao 的AOBaseConfig实例(不再是字符串):
from transformers import AutoModelForCausalLM, TorchAoConfig from torchao.quantization import Int4WeightOnlyConfig import torch quantization_config = TorchAoConfig(Int4WeightOnlyConfig(group_size=32)) model = AutoModelForCausalLM.from_pretrained( model_id, device_map="cuda", torch_dtype=torch.bfloat16, quantization_config=quantization_config, )modules_to_not_convert:不量化的模块;include_input_output_embeddings(默认 False):是否量化 embedding(开启后输入 embedding 也会从免量化列表移除);untie_embedding_weights(默认 False):量化与其它权重 tied 的输入 embedding 时是否解开权重。
post_init()会校验torchao已安装、quant_type确为AOBaseConfig实例;序列化时通过config_to_dict/config_from_dict与 torchao 双向转换,实现配置随config.json持久化与回读。
AutoRoundConfig
AutoRoundConfig:
bits(默认 4):支持 2/3/4/8;group_size(默认 128)、sym(默认 True);backend(默认"auto"):推理后端,默认根据设备、量化设置与已装库自动选择。
其from_dict允许把gptq/awq(gemm 版)/auto-round格式的 checkpoint 转换加载为 AutoRound 推理格式(packing_format会相应改写),这一兼容逻辑也对应 merge_quantization_configs 中 AutoRoundConfig 优先分发的特判。
HqqConfig
HqqConfig 是 hqqBaseQuantizeConfig的包装,需要hqq>=0.2.1:
nbits(默认 4):支持 8/4/3/2/1;group_size(默认 64):需能整除weight.shape[axis];view_as_float(默认 False):分布式训练时把量化权重视为 float;axis(默认 None,构造时自动置 1):分组沿哪个轴,仅 0/1 合法(axis=1 兼容 TorchAO/BitBlas 等更快后端);dynamic_config:逐层自定义量化配置(键为层名,值为完整量化参数);skip_modules(默认["lm_head"]):跳过的nn.Linear层列表。
QuarkConfig
QuarkConfig 面向 AMD Quark(需amd-quark>=0.12)。它较为特殊:不提供显式的构造函数参数,而是整体把 kwargs 透传给 Quark 生态去解析——quant_method取"fp8"/"awq"等值时走QuantConfigParser.from_custom_config老式路径,否则走QConfig.from_dict新式路径并额外解析export段(如min_kv_scale需 quark≥0.8)。
扩展点:HfQuantizer 抽象类与自定义量化方案
quantization.md 明确指出:Transformers 尚未支持的量化技术可以通过HfQuantizer类接入。所有内置量化器(quantizer_*.py 系列)都是它的具体实现。
HfQuantizer 定义了量化器在from_pretrained生命周期中的完整钩子:
- 类属性:
requires_calibration(默认 False,是否需要先校准);属性is_trainable、is_serializable、is_qat_trainable、is_compileable(后两者默认 False)均为抽象或固定默认; __init__接收quantization_config与pre_quantized(权重是否已量化;若要求校准却传入pre_quantized=False会直接报错);validate_environment:校验环境与from_pretrained传入参数是否冲突;update_dtype/update_device_map:部分方法需要强制设定 dtype,bitsandbytes 则在没有 device_map 时自动补为"auto";update_tp_plan/update_ep_plan:为缩放因子更新张量并行/专家并行计划;preprocess_model/postprocess_model:分别在权重加载前后改造模型,实际工作放在_process_model_before_weight_loading/_process_model_after_weight_loading两个可覆写方法中;dequantize:尽力恢复原始精度模型(部分方案不支持);get_state_dict_and_metadata、get_quantize_ops、get_weight_conversions:为自定义权重加载管线(renamings → converters → dequant/merge/concat)提供改写入口;- 静态方法
get_modules_to_not_convert:结合 skip 列表、fp32 保留模块与默认跳过规则生成"不量化模块"清单。
模块级工具函数 get_keys_to_not_convert() 会自动推导默认保留模块:tied 权重、最后一个参数模块、输出 embedding(典型如lm_head)。此外 base.py 底部还维护了 MODULES_TO_PATCH_FOR_QUANTIZATION 注册表,用于把特定模块类(如 MoE 中的Llama4TextExperts)在 meta 设备上原地替换为压缩实现SequentialLlama4TextExperts。
若要接入一种全新的量化方法,标准的扩展路径是:
- 定义一个继承
QuantizationConfigMixin的 dataclass,设置quant_method,实现参数校验与(可选)get_loading_attributes(); - 编写继承
HfQuantizer的量化器,实现is_serializable、is_trainable、validate_environment、_process_model_before_weight_loading等; - 使用 register_quantization_config() 与 register_quantizer() 注册到自动分发映射中,注册要求分别继承
QuantizationConfigMixin与HfQuantizer。
如何选择与使用
选择量化方案时可参考 docs/source/en/quantization/overview.md 与 docs/source/en/quantization/selecting.md 的总体决策框架,本文仅从配置类特性给出判断要点:
- 希望开箱即用地压缩权重并显著省显存:优先考虑 bitsandbytes 4-bit(
load_in_4bit=True,NF4 + double quant),无需离线校准数据; - 追求低比特极致压缩且可接受离线校准:GPTQ/AWQ 是社区生态最成熟的方案,配套文档见 quantization/gptq.md 与 quantization/awq.md;
- 面向特定硬件与格式:Apple Silicon 看
MetalConfig(metal.md),Blackwell 场景关注FPQuantConfig/FourOverSixConfig/NVFP4Config,MX 格式生态看Mxfp4Config(mxfp4.md、nvfp4.md、fouroversix.md); - 模型自带预量化配置:直接
from_pretrained即可,框架会自动从config.json的quantization_config字段解析出对应配置类与量化器(pre_quantized=True路径),并在加载后用validate_environment检查当前环境是否满足要求(如 CUDA 能力、依赖版本)。
需要明确的能力边界:本文描述的是当前仓库 transformers 中已实现的量化生态。不同配置类背后依赖的第三方库(bitsandbytes、auto-awq、gptqmodel、torchao、compressed-tensors、hqq、eetq、quark等)需要在环境中按各自要求安装对应版本,且部分 kernel 方案有明确的 GPU 架构前提(如 FP8 优化推理要求 CUDA SM89+ 或 XPU)。建议在动手前先确认目标硬件与依赖版本,再依据上文各配置类的取值约束完成参数设定。
【免费下载链接】transformers🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考