Optimum 文件

量化

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

並獲得增強的文件體驗

開始使用

量化

AutoGPTQ 整合

🤗 Optimum 與 AutoGPTQ 庫 合作,提供了一個簡單的 API,可對語言模型應用 GPTQ 量化。透過 GPTQ 量化,您可以將自己喜歡的語言模型量化到 8、4、3 甚至 2 位。這不會導致效能大幅下降,並且推理速度更快。大多數 GPU 硬體都支援此功能。

如果您想使用 GPTQ 量化 🤗 Transformers 模型,請參閱此文件

要了解有關 GPTQ 中使用的量化技術的更多資訊,請參閱

請注意,AutoGPTQ 庫提供了更多高階用法(triton 後端、融合注意力、融合 MLP),這些用法尚未與 Optimum 整合。目前,我們只利用了 GPTQ 的 CUDA 核心。

要求

您需要安裝以下要求才能執行以下程式碼

  • AutoGPTQ 庫:`pip install auto-gptq`

  • Optimum 庫:`pip install --upgrade optimum`

  • 從原始碼安裝最新的 `transformers` 庫:`pip install --upgrade git+https://github.com/huggingface/transformers.git`

  • 安裝最新的 `accelerate` 庫:`pip install --upgrade accelerate`

載入和量化模型

`GPTQQuantizer` 類用於量化您的模型。為了量化您的模型,您需要提供一些引數

  • 位數:`bits`
  • 用於校準量化的資料集:`dataset`
  • 用於處理資料集的模型序列長度:`model_seqlen`
  • 要量化的塊名稱:`block_name_to_quantize`

透過 🤗 Transformers 整合,您無需傳遞 `block_name_to_quantize` 和 `model_seqlen`,因為我們可以檢索它們。但是,對於自定義模型,您需要指定它們。另外,請確保您的模型在量化之前已轉換為 `torch.float16`。

from transformers import AutoModelForCausalLM, AutoTokenizer
from optimum.gptq import GPTQQuantizer, load_quantized_model
import torch
model_name = "facebook/opt-125m"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16)

quantizer = GPTQQuantizer(bits=4, dataset="c4", block_name_to_quantize = "model.decoder.layers", model_seqlen = 2048)
quantized_model = quantizer.quantize_model(model, tokenizer)
GPTQ 量化目前僅適用於文字模型。此外,量化過程可能需要很長時間,具體取決於硬體(175B 模型使用 NVIDIA A100 需要 4 個 GPU 小時)。請在 Hugging Face Hub 上檢查您想量化的模型是否已有 GPTQ 量化版本。

儲存模型

要儲存您的模型,請使用 `GPTQQuantizer` 類的儲存方法。它將建立一個資料夾,其中包含您的模型狀態字典和量化配置。

save_folder = "/path/to/save_folder/"
quantizer.save(model,save_folder)

載入量化權重

您可以使用 `load_quantized_model()` 函式載入量化權重。透過 Accelerate 庫,可以更快地載入模型並降低記憶體使用。模型需要使用空權重進行初始化,然後作為下一步載入權重。

from accelerate import init_empty_weights
with init_empty_weights():
    empty_model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16)
empty_model.tie_weights()
quantized_model = load_quantized_model(empty_model, save_folder=save_folder, device_map="auto")

Exllama 核心,實現更快推理

隨著 exllamav2 核心的釋出,與 exllama 核心相比,4 位模型的推理速度更快。它預設啟用:`load_quantized_model()` 中的 `disable_exllamav2=False`。要使用這些核心,您需要將整個模型放在 GPU 上。

from optimum.gptq import GPTQQuantizer, load_quantized_model
import torch

from accelerate import init_empty_weights
with init_empty_weights():
    empty_model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16)
empty_model.tie_weights()
quantized_model = load_quantized_model(empty_model, save_folder=save_folder, device_map="auto")

如果您希望使用 exllama 核心,則需要透過設定 `exllama_config` 來更改版本

from optimum.gptq import GPTQQuantizer, load_quantized_model
import torch

from accelerate import init_empty_weights
with init_empty_weights():
    empty_model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16)
empty_model.tie_weights()
quantized_model = load_quantized_model(empty_model, save_folder=save_folder, device_map="auto", exllama_config = {"version":1})

請注意,目前 exllama/exllamav2 核心僅支援 4 位模型。此外,建議在您使用 peft 微調模型時停用 exllama/exllamav2 核心。

您可以在此處找到這些核心的基準測試

微調量化模型

在 Hugging Face 生態系統中,透過官方支援介面卡,您可以微調已使用 GPTQ 量化的模型。有關更多詳細資訊,請參閱 `peft` 庫。

< > 在 GitHub 上更新

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