Transformers 文件
量化
並獲得增強的文件體驗
開始使用
量化
量化技術透過使用較低精度的資料型別(如 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 )
這是一個封裝類,包含了所有在使用 quanto
載入的模型中可以調整的屬性和功能。
檢查引數是否正確的安全檢查器
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
引數的封裝類。
檢查引數是否正確的安全檢查器 - 同時會將一些 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
引數的封裝類。
檢查引數是否正確的安全檢查器
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 後端)載入的模型中可以調整的屬性和功能。
檢查引數是否正確的安全檢查器
EetqConfig
class transformers.EetqConfig
< 原始碼 >( weights: str = 'int8' modules_to_not_convert: typing.Optional[list] = None **kwargs )
這是一個封裝類,包含了所有在使用 eetq
載入的模型中可以調整的屬性和功能。
檢查引數是否正確的安全檢查器
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 (
str
或PreTrainedTokenizerBase
, 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 toFalse
) — 是否按啟用值大小降序量化列。將其設定為 False 可以顯著加快推理速度,但困惑度可能會略有下降。也稱為 act-order。 - sym (
bool
, optional, defaults toTrue
) — 是否使用對稱量化。 - true_sequential (
bool
, optional, defaults toTrue
) — 是否在單個 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,有效值為auto
、auto_trainable
等。對於 auto-gptq,有效值僅為 None 和auto_trainable
。參考 gptqmodel 後端: https://github.com/ModelCloud/GPTQModel/blob/main/gptqmodel/utils/backend.py - use_cuda_fp16 (
bool
, optional, defaults toFalse
) — 是否為 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 toTrue
) — 是否快取塊輸出,以作為後續塊的輸入重用。 - 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 後端)的屬性和功能。
從 optimum gptq 配置字典獲取相容的類
檢查引數是否正確的安全檢查器
獲取與 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 toFalse
) — 此標誌用於透過 LLM.int8() 啟用 8 位量化。 - load_in_4bit (
bool
, optional, defaults toFalse
) — 此標誌用於透過將 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 toFalse
) — 此標誌用於高階用例和了解此功能的使用者。如果你想將模型分成不同的部分,一部分在 GPU 上以 int8 執行,另一部分在 CPU 上以 fp32 執行,你可以使用此標誌。這對於解除安裝大型模型如google/flan-t5-xxl
很有用。請注意,int8 操作不會在 CPU 上執行。 - llm_int8_has_fp16_weight (
bool
, optional, defaults toFalse
) — 此標誌使用 16 位主權重執行 LLM.int8()。這對於微調很有用,因為權重在反向傳播時不必來回轉換。 - bnb_4bit_compute_dtype (
torch.dtype
或 str, optional, defaults totorch.float32
) — 這設定了計算型別,可能與輸入型別不同。例如,輸入可能是 fp32,但計算可以設定為 bf16 以加速。 - bnb_4bit_quant_type (
str
, optional, defaults to"fp4"
) — 這設定了 bnb.nn.Linear4Bit 層中的量化資料型別。選項是 FP4 和 NF4 資料型別,由fp4
或nf4
指定。 - bnb_4bit_use_double_quant (
bool
, optional, defaults toFalse
) — 此標誌用於巢狀量化,即第一次量化的量化常數再次被量化。 - bnb_4bit_quant_storage (
torch.dtype
或 str, optional, defaults totorch.uint8
) — 這設定了用於打包量化後 4 位引數的儲存型別。 - kwargs (
dict[str, Any]
, optional) — 用於初始化配置物件的附加引數。
這是一個包裝類,包含了在使用 bitsandbytes
載入模型時,所有可以使用的屬性和功能。
這將替換 load_in_8bit
或 load_in_4bit
,因此這兩個選項是互斥的。
目前僅支援 LLM.int8()
、FP4
和 NF4
量化。如果 bitsandbytes
中增加了更多方法,則會向此類新增更多引數。
如果模型可以量化,則返回 True
,否則返回 False
。
檢查引數是否正確的安全檢查器 - 同時會將一些 NoneType 引數替換為其預設值。
此方法返回模型使用的量化方法。如果模型不可量化,則返回 None
。
從配置中刪除所有與預設配置屬性對應的屬性,以提高可讀性,並序列化為 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 才能正確量化模型。
如果量化需要額外記憶體,則調整 infer_auto_device_map() 的 max_memory 引數
adjust_target_dtype
< 原始碼 >( torch_dtype: 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 的量化方法(需要為量化建立新引數)中定義。
從 state_dict 中獲取所需元件並建立量化引數;僅當 requires_parameters_quantization == True 時適用。
可能會將模型反量化以恢復原始模型,但會帶來一些準確性/效能上的損失。請注意,並非所有量化方案都支援此操作。
用於 caching_allocator_warmup
的因子,以獲取預分配的位元組數來預熱 CUDA。因子為 2 表示我們分配空模型中的所有位元組(因為我們在 fp16 中分配),因子為 4 表示我們分配空模型中權重佔用記憶體的一半,依此類推……
get_special_dtypes_update
< source >( model torch_dtype: torch.dtype )
返回未量化模組的 dtypes - 用於在將 str 作為 device_map 傳遞時計算 device_map。該方法將使用在 _process_model_before_weight_loading
中修改的 modules_to_not_convert
。
postprocess_model
< source >( model: PreTrainedModel **kwargs )
在權重載入後對模型進行後處理。請確保重寫抽象方法 _process_model_after_weight_loading
。
preprocess_model
< source >( model: PreTrainedModel **kwargs )
在權重載入前設定模型屬性和/或轉換模型。此時模型應在元裝置上初始化,以便您可以自由地操作模型的主體結構,從而原地替換模組。請確保重寫抽象方法 _process_model_before_weight_loading
。
update_device_map
< source >( device_map: typing.Optional[dict[str, typing.Any]] )
如果您想用新的裝置對映覆蓋現有的裝置對映,請重寫此方法。例如,對於 bitsandbytes,由於 accelerate
是一個硬性要求,如果沒有傳遞 device_map,則 device_map 會被設定為 `“auto”`
update_expected_keys
< source >( model expected_keys: list loaded_keys: list )
如果您想調整 update_expected_keys
,請重寫此方法。
update_missing_keys
< source >( model missing_keys: list prefix: str )
如果您想調整 missing_keys
,請重寫此方法。
update_missing_keys_after_loading
< source >( model missing_keys: list prefix: str )
如果您想在載入模型引數後但在模型後處理前調整 missing_keys
,請重寫此方法。
update_torch_dtype
< source >( torch_dtype: torch.dtype )
某些量化方法需要顯式地將模型的 dtype 設定為目標 dtype。如果您想確保保留該行為,則需要重寫此方法
更新縮放的張量並行(tp)計劃
update_unexpected_keys
< source >( model unexpected_keys: list prefix: str )
如果您想調整 unexpected_keys
,請重寫此方法。
此方法用於檢查與 from_pretrained
中傳遞的引數可能存在的衝突。您需要為所有未來與 transformers 整合的量化器定義此方法。如果不需要顯式檢查,只需返回即可。
HiggsConfig
class transformers.HiggsConfig
< source >( 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 方法進行量化的配置類。
檢查引數是否正確的安全檢查器 - 同時會將一些 NoneType 引數替換為其預設值。
HqqConfig
class transformers.HqqConfig
< source >( 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 toFalse
) — 如果設定為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,在 quantizers/auto.py 中的 AutoQuantizationConfig.from_dict 中使用
檢查引數是否正確的安全檢查器 - 同時會將一些 NoneType 引數替換為其預設值。
從配置中刪除所有與預設配置屬性對應的屬性,以提高可讀性,並序列化為 Python 字典。
FbgemmFp8Config
class transformers.FbgemmFp8Config
< source >( activation_scale_ub: float = 1200.0 modules_to_not_convert: typing.Optional[list] = None **kwargs )
這是一個包裝類,包含了你可以對使用 fbgemm fp8 量化載入的模型進行操作的所有可能屬性和功能。
CompressedTensorsConfig
class transformers.CompressedTensorsConfig
< source >( 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 toTrue
) — 如果為 True,則更改子模組(通常是線性層)以模擬壓縮模型的執行,否則使用預設子模組
這是一個處理 compressed-tensors 量化配置選項的包裝類。它是 compressed_tensors.QuantizationConfig
的一個包裝器
from_dict
< source >( config_dict return_unused_kwargs = False **kwargs ) → QuantizationConfigMixin
從一個 Python 引數字典例項化一個 CompressedTensorsConfig。可選擇性地從巢狀的 quantization_config 中解包任何引數
從配置中刪除所有與預設配置屬性對應的屬性,以提高可讀性,並序列化為 Python 字典。
TorchAoConfig
class transformers.TorchAoConfig
< source >( 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 )
從字典建立配置。
根據配置建立適當的量化方法。
驗證配置並設定預設值。
將配置轉換為字典。
BitNetQuantConfig
class transformers.BitNetQuantConfig
< source >( 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"
) — 使用的線性類的型別。可以是bitlinear
或autobitlinear
。 - quantization_mode (
str
, optional, defaults to"offline"
) — 使用的量化模式。可以是online
或offline
。在online
模式下,權重 quantization 引數在每次前向傳播期間動態計算(例如,基於當前的權重值)。這可以適應訓練期間的權重變化(量化感知訓練 - QAT)。在offline
模式下,量化引數在推理 *之前* 預先計算。然後這些引數被固定並載入到量化模型中。與線上量化相比,這通常會帶來更低的執行時開銷。 - use_rms_norm (
bool
, optional, defaults toFalse
) — 是否在量化前對啟用值應用 RMSNorm。這與原始 BitNet 論文在量化/打包前對啟用值進行歸一化的方法相匹配。 - rms_norm_eps (
float
, optional, defaults to 1e-06) — RMSNorm 層中用於數值穩定性的 epsilon 值。 - kwargs (
dict[str, Any]
, optional) — 可能由特定量化後端或未來版本使用的其他關鍵字引數。
用於應用 BitNet 量化的配置類。
檢查引數是否正確的安全檢查器
SpQRConfig
class transformers.SpQRConfig
< source >( 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
引數的包裝類。有關更多詳細資訊,請參閱原始出版物。
檢查引數是否正確的安全檢查器 - 同時會將一些 NoneType 引數替換為其預設值。
FineGrainedFP8Config
class transformers.FineGrainedFP8Config
< source >( activation_scheme: str = 'dynamic' weight_block_size: tuple = (128, 128) modules_to_not_convert: typing.Optional[list] = None **kwargs )
FineGrainedFP8Config 是一個用於細粒度 FP8 量化的配置類,主要用於 deepseek 模型。
檢查引數是否正確的安全檢查器
QuarkConfig
AutoRoundConfig
class transformers.AutoRoundConfig
< source >( 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 量化模型的可能屬性和功能。
用於檢查引數是否正確的安全檢查器。