Optimum 文件
使用 Brevitas 進行量化
並獲得增強的文件體驗
開始使用
使用 Brevitas 進行量化
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 )
引數
使用 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 量化引數的配置類。