Transformers documentation

AWQ

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

AWQ

Lượng tử hóa trọng số nhận thức kích hoạt (AWQ) giữ lại một phần nhỏ các trọng số quan trọng cho hiệu suất của LLM để nén mô hình xuống 4-bit với mức suy giảm hiệu suất tối thiểu.

Có một số thư viện để lượng tử hóa mô hình bằng thuật toán AWQ, chẳng hạn như llm-awq, autoawq hoặc optimum-intel. Transformers hỗ trợ nạp các mô hình đã được lượng tử hóa bằng thư viện llm-awq và autoawq. Hướng dẫn này sẽ cho bạn thấy cách nạp các mô hình đã được lượng tử hóa bằng autoawq, nhưng quy trình tương tự áp dụng cho các mô hình đã được lượng tử hóa bằng llm-awq.

Chạy lệnh bên dưới để cài đặt autoawq

pip install autoawq

AutoAWQ hạ cấp Transformers xuống phiên bản 4.47.1. Nếu bạn muốn thực hiện suy luận với AutoAWQ, bạn có thể cần cài đặt lại phiên bản Transformers của mình sau khi cài đặt AutoAWQ.

Xác định một mô hình đã được lượng tử hóa AWQ bằng cách kiểm tra khóa quant_method trong tệp config.json của mô hình.

{
  "_name_or_path": "/workspace/process/huggingfaceh4_zephyr-7b-alpha/source",
  "architectures": [
    "MistralForCausalLM"
  ],
  ...
  ...
  ...
  "quantization_config": {
    "quant_method": "awq",
    "zero_point": true,
    "group_size": 128,
    "bits": 4,
    "version": "gemm"
  }
}

Tải mô hình đã lượng tử hóa AWQ bằng from_pretrained(). Thao tác này mặc định tự động đặt các trọng số khác sang fp16 vì lý do hiệu suất. Sử dụng tham số dtype để tải các trọng số khác này ở định dạng khác.

Nếu mô hình được nạp trên CPU, hãy sử dụng tham số device_map để chuyển nó sang bộ tăng tốc.

from transformers import AutoModelForCausalLM, AutoTokenizer
from accelerate import Accelerator
import torch

device = Accelerator().device

model = AutoModelForCausalLM.from_pretrained(
  "TheBloke/zephyr-7B-alpha-AWQ",
  dtype=torch.float32,
  device_map=device
)

Sử dụng attn_implementation để bật FlashAttention2 nhằm tăng tốc suy luận hơn nữa.

from transformers import AutoModelForCausalLM, AutoTokenizer
from accelerate import Accelerator

model = AutoModelForCausalLM.from_pretrained(
  "TheBloke/zephyr-7B-alpha-AWQ",
  attn_implementation="flash_attention_2",
  device_map=Accelerator().device
)

Các module đã hợp nhất

Các module đã hợp nhất (fused) mang lại độ chính xác và hiệu suất được cải thiện. Chúng được hỗ trợ sẵn cho các module AWQ của kiến trúc Llama và Mistral, nhưng bạn cũng có thể hợp nhất các module AWQ cho các kiến trúc không được hỗ trợ.

Các module đã hợp nhất không thể kết hợp với các kỹ thuật tối ưu hóa khác như FlashAttention2.

các kiến trúc được hỗ trợ
các kiến trúc không được hỗ trợ

Tạo một AwqConfig và đặt các tham số fuse_max_seq_len và do_fuse=True để bật các module đã hợp nhất. Tham số fuse_max_seq_len là tổng độ dài chuỗi và nó phải bao gồm độ dài ngữ cảnh và độ dài sinh dự kiến. Đặt nó thành một giá trị lớn hơn để an toàn.

Ví dụ dưới đây hợp nhất các module AWQ của model TheBloke/Mistral-7B-OpenOrca-AWQ.

import torch
from transformers import AwqConfig, AutoModelForCausalLM

quantization_config = AwqConfig(
    bits=4,
    fuse_max_seq_len=512,
    do_fuse=True,
)
model = AutoModelForCausalLM.from_pretrained(
  "TheBloke/Mistral-7B-OpenOrca-AWQ",
  quantization_config=quantization_config
).to(0)

Mô hình TheBloke/Mistral-7B-OpenOrca-AWQ đã được chạy benchmark với batch_size=1, cả khi có lẫn khi không có các module đã được hợp nhất.

Module không hợp nhất
Kích thước lôChiều dài PrefillChiều dài giải mãToken prefill/giâyGiải mã token/giâyBộ nhớ (VRAM)
1323260.098438.45374,50 GB (5,68%)
164641333.6731.66044,50 GB (5,68%)
11281282434.0631.62724,50 GB (5,68%)
12562563072.2638.17314,50 GB (5,68%)
15125123184.7431.68194,59 GB (5,80%)
1102410243148.1836.80314,81 GB (6,07%)
1204820482927.3335.26765,73 GB (7,23%)
Mô-đun đã hợp nhất
Kích thước lôChiều dài PrefillChiều dài giải mãToken prefill/giâyGiải mã token/giâyBộ nhớ (VRAM)
1323281.489980.25694,00 GB (5,05%)
164641756.1106.264,00 GB (5,05%)
11281282479.32105.6314,00 GB (5,06%)
12562561813.685.74854,01 GB (5,06%)
15125122848.997.7014,11 GB (5,19%)
1102410243044.3587.73234,41 GB (5,57%)
1204820482715.1189.47095,57 GB (7,04%)

Tốc độ và thông lượng của các module đã hợp nhất và chưa hợp nhất cũng được kiểm tra bằng thư viện optimum-benchmark.

generate throughput per batch size
bộ nhớ đỉnh khi chạy forward / kích thước batch
forward latency per batch size
tốc độ sinh/số lượng lô

ExLlamaV2

ExLlamaV2 kernels hỗ trợ prefill và decoding nhanh hơn. Chạy lệnh bên dưới để cài đặt phiên bản mới nhất của autoawq với hỗ trợ ExLlamaV2.

pip install git+https://github.com/casper-hansen/AutoAWQ.git

Đặt version="exllama" trong AwqConfig để bật các kernel ExLlamaV2.

ExLlamaV2 được hỗ trợ trên GPU AMD.

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, AwqConfig

quantization_config = AwqConfig(version="exllama")

model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/Mistral-7B-Instruct-v0.1-AWQ",
    quantization_config=quantization_config,
    device_map="auto",
)

Tài nguyên

Chạy notebook demo AWQ để xem thêm các ví dụ về cách lượng tử hóa một mô hình, đẩy mô hình đã lượng tử hóa lên Hub, và nhiều hơn nữa.

Update on GitHub