Optimum 文件

使用 Brevitas 進行量化

您正在檢視的是需要從原始碼安裝。如果您希望使用常規 pip 安裝,請檢視最新的穩定版本(v1.27.0)。
Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

使用 Brevitas 進行量化

BrevitasQuantizer

optimum.amd.BrevitasQuantizer

< >

( 模型: 模組 模型名稱或路徑: 字串 )

處理 huggingface.co/models 上共享模型的執行時量化過程。

from_pretrained

< >

( model_name_or_path: str subfolder: str = '' revision: typing.Optional[str] = None cache_dir: typing.Optional[str] = None trust_remote_code: bool = False force_download: bool = False local_files_only: bool = False use_auth_token: typing.Union[bool, str, NoneType] = None device_map: typing.Union[typing.Dict, str, torch.device, NoneType] = None **model_kwargs )

引數

  • model_name_or_path (Union[str, Path]) — 可以是 Hugging Face Hub 上模型倉庫的模型 ID,或者是包含模型的本地目錄路徑。
  • subfolder (str, 預設為 "") — 如果模型檔案位於 Hugging Face Hub 上模型目錄/倉庫的子資料夾中,您可以在此處指定子資料夾名稱。
  • revision (Optional[str], 可選, 預設為 None) — 修訂版本是要使用的特定模型版本。它可以是分支名稱、標籤名稱或提交 ID。
  • cache_dir (Optional[str], 可選) — 快取已下載的預訓練模型權重和配置檔案的目錄路徑,如果不需要使用標準快取。
  • trust_remote_code (bool, 預設為 False) — 允許使用模型倉庫中託管的自定義建模程式碼。此選項僅應在您信任且已閱讀程式碼的倉庫中設定,因為它將在您的本地機器上執行模型倉庫中存在的任意程式碼。
  • force_download (bool, 預設為 False) — 是否強制(重新)下載模型權重和配置檔案,如果存在快取版本則覆蓋。
  • local_files_only (Optional[bool], 預設為 False) — 是否只檢視本地檔案(即不嘗試下載模型)。
  • use_auth_token (Optional[str], 預設為 None) — 用作遠端檔案的 HTTP Bearer 授權的令牌。如果為 True,將使用執行 transformers-cli login 時生成的令牌(儲存在 ~/.huggingface 中)。

載入 BrevitasQuantizer 和模型。

量化

< >

( 量化配置: BrevitasQuantizationConfig 校準資料集: typing.Optional[typing.List[typing.Dict]] = None )

引數

  • quantization_config (BrevitasQuantizationConfig) — 用於量化模型的量化配置。
  • calibration_dataset (Optional[List[Dict]], 預設為 None) — 如果量化涉及校準階段,則此引數需要指定為模型的輸入列表。示例:calibration_dataset = [{"input_ids": torch.tensor([[1, 2, 3, 4]])}, {"input_ids": torch.tensor([[6, 7, 3, 4]])}],這是用於接受 input_ids 作為引數且具有兩個樣本的模型的資料集。

使用 Brevitas 根據 quantization_config 量化模型。

BrevitasQuantizationConfig

optimum.amd.BrevitasQuantizationConfig

< >

( weights_bitwidth: int = 8 activations_bitwidth: typing.Optional[int] = 8 weights_only: bool = False weights_param_method: typing.Literal['stats', 'mse'] = 'stats' weights_symmetric: bool = True scale_precision: typing.Literal['float_scale', 'power_of_two_scale'] = 'float_scale' weights_quant_granularity: typing.Literal['per_tensor', 'per_channel', 'per_group'] = 'per_tensor' weights_group_size: typing.Optional[int] = None quantize_zero_point: bool = True activations_param_method: typing.Optional[typing.Literal['stats', 'mse']] = 'stats' is_static: bool = False activations_symmetric: typing.Optional[bool] = False activations_quant_granularity: typing.Optional[typing.Literal['per_tensor', 'per_row', 'per_group']] = 'per_tensor' activations_group_size: typing.Optional[int] = None activations_equalization: typing.Optional[typing.Literal[None, 'layerwise', 'cross_layer']] = 'cross_layer' apply_weight_equalization: bool = False apply_bias_correction: bool = False apply_gptq: bool = False gptq_act_order: typing.Optional[bool] = None device: str = 'auto' layers_to_exclude: typing.Optional[typing.List] = None gpu_device_map: typing.Optional[typing.Dict[int, float]] = None cpu_device_map: typing.Optional[typing.Dict[str, float]] = None )

引數

  • weights_bitwidth (int, 預設為 8) — 權重量化的位寬。例如,如果 weights_bitwidth=8,則每個權重值量化為 8 位。
  • activations_bitwidth (Optional[int], 預設為 8) — 啟用量化的位寬。
  • weights_only (bool, 預設為 False) — 如果設定為 True,則只量化權重,否則啟用也將被量化。
  • weights_param_method (str, 預設為 stats) — 用於估計權重量化引數(縮放、零點)的策略。有兩種策略可用:
    • "stats":使用 min-max 估計要量化的範圍。
    • "mse":使用未量化權重和量化權重之間的均方誤差估計要量化的範圍。
  • weights_symmetric (bool, 預設為 True) — 是否在權重上使用對稱量化。
  • scale_precision (str, 預設為 "float_scale") — 指定縮放的約束。可以是 "float_scale"(任意縮放),也可以是 "power_of_two_scale"(縮放約束為 2 的冪)。
  • weights_quant_granularity (str, 預設為 "per_tensor") — 權重量化的粒度。此引數可以是:
    • "per_tensor":單個權重矩陣使用一個縮放(可能還有零點)。
    • "per_channel":權重矩陣的每列(外部維度)都有其自己的縮放(可能還有零點)。
    • "per_group":權重矩陣的每列可能具有多個縮放,按 weight_group_size 分組。
  • weights_group_size (Optional[int], 預設為 None) — 如果 weights_quant_granularity="per_group",則用於權重的組大小。在這種情況下預設為 128,否則為 None
  • quantize_zero_point (bool, 預設為 True) — 當設定為 True 時,未量化值 0.0 可以精確地表示為量化值:即零點。當設定為 False 時,量化範圍 [a, b] 可以精確表示(a 和 b 沒有舍入),但未量化值零不能精確表示。
  • activations_param_method (List[str]) — 用於估計啟用量化引數(縮放、零點)的策略。有兩種策略可用:
    • "stats":使用 min-max 估計要量化的範圍。
    • "mse":使用未量化啟用和量化啟用之間的均方誤差估計要量化的範圍。
  • is_static (bool, 預設為 False) — 是否應用靜態量化或動態量化。
  • activations_symmetric (bool, 預設為 False) — 是否在啟用上使用對稱量化。
  • activations_quant_granularity (str, 預設為 "per_tensor") — 啟用量化的粒度。此引數可以是 "per_tensor""per_row""per_group"。如果使用靜態量化 (is_static=True),則只能使用 "per_tensor"
  • activations_group_size (int, 預設為 None) — 如果 activations_quant_granularity="per_group",則用於啟用的組大小。在這種情況下預設為 64,否則為 None
  • activations_equalization (Optional[str], 預設為 "cross_layer") — 是否應用啟用均衡(SmoothQuant)。可能的選項有:
    • None:不進行啟用均衡。
    • "layerwise":按照 https://arxiv.org/abs/2211.10438 中所述應用 SmoothQuant。啟用重縮放將作為乘法節點新增,不與前一層融合。
    • "cross_layer":應用 SmoothQuant,並在可能時將啟用重縮放融合到前一層中(例如:nn.LayerNorm 後面跟著 nn.Linear)。這是透過使用 torch.fx 對模型進行圖捕獲來實現的。
  • apply_weight_equalization (bool, 預設為 False) — 按照 https://arxiv.org/abs/1906.04721 應用跨層權重均衡。此引數對於啟用函式為線性或分段線性(如 OPT 模型中使用的 ReLU)的模型很有用,並且可以透過平衡各層的縮放來減少權重的量化誤差。
  • apply_bias_correction (bool, 預設為 False) — 應用偏差校正以補償量化引起的啟用偏差變化。
  • apply_gptq (bool, 預設為 False) — 是否應用 GPTQ 演算法來量化權重。
  • gptq_act_order (Optional[bool], 預設為 None) — 當 apply_gptq=True 時,是否使用啟用重新排序(act-order,也稱為 desc-act)。如果 apply_gptq=True,預設為 False
  • layers_to_exclude (Optional[List], 預設為 None) — 指定不應量化的層的名稱。這應該只是層名稱的最後一部分。如果同一名稱在多個層中重複,它們都將被排除。如果留空,則會自動識別並排除最後一個線性層。

QuantizationConfig 是處理所有 Brevitas 量化引數的配置類。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.