Transformers documentation
HQQ
HQQ
Half-Quadratic Quantization (HQQ) hỗ trợ lượng tử hóa nhanh ngay khi chạy cho 8, 4, 3, 2 và thậm chí 1-bit. Nó không yêu cầu dữ liệu hiệu chuẩn và tương thích với mọi loại mô hình (LLM, thị giác, v.v.).
HQQ còn hỗ trợ fine-tuning với PEFT và tương thích hoàn toàn với torch.compile để suy luận và huấn luyện nhanh hơn nữa.
Cài đặt HQQ bằng lệnh sau để có phiên bản mới nhất và để xây dựng các kernel CUDA tương ứng nếu bạn đang sử dụng thiết bị cuda. Nó cũng hỗ trợ Intel XPU với triển khai thuần pytorch.
pip install hqq
Bạn có thể chọn thay thế tất cả các lớp tuyến tính trong một mô hình bằng cùng một cấu hình lượng tử hóa, hoặc chỉ định một cấu hình lượng tử hóa cụ thể cho các lớp tuyến tính cụ thể.
Thực hiện lượng hóa một mô hình bằng cách tạo một HqqConfig và chỉ định nbits cùng group_size để thay thế cho tất cả các lớp tuyến tính (torch.nn.Linear) của mô hình.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, HqqConfig
quant_config = HqqConfig(nbits=8, group_size=64)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.1-8B",
dtype=torch.float16,
device_map="auto",
quantization_config=quant_config
)Thực hiện lượng tử hóa một mô hình bằng cách tạo một từ điển chỉ định nbits và group_size cho các lớp tuyến tính cần lượng tử hóa. Truyền chúng vào HqqConfig và thiết lập các lớp cần lượng tử hóa bằng cấu hình này. Cách tiếp cận này đặc biệt hữu ích để lượng tử hóa các mô hình mixture-of-experts (MoE) vì chúng ít bị ảnh hưởng hơn bởi các cài đặt lượng tử hóa thấp hơn.
q4_config = {'nbits':4, 'group_size':64}
q3_config = {'nbits':3, 'group_size':32}
quant_config = HqqConfig(dynamic_config={
'self_attn.q_proj':q4_config,
'self_attn.k_proj':q4_config,
'self_attn.v_proj':q4_config,
'self_attn.o_proj':q4_config,
'mlp.gate_proj':q3_config,
'mlp.up_proj' :q3_config,
'mlp.down_proj':q3_config,
})
model = transformers.AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.1-8B",
dtype=torch.float16,
device_map="auto",
quantization_config=quant_config
)Các backend
HQQ hỗ trợ nhiều backend khác nhau, bao gồm PyTorch thuần và các kernel CUDA khử lượng hóa tùy chỉnh. Các backend này phù hợp với các GPU đời cũ và huấn luyện PEFT/QLoRA.
from hqq.core.quantize import *
HQQLinear.set_backend(HQQBackend.PYTORCH)Để suy luận nhanh hơn, HQQ hỗ trợ các kernel hợp nhất 4-bit (torchao và Marlin) sau khi mô hình được lượng tử hóa. Các kernel này có thể đạt tới 200 token/giây trên một card 4090. Ví dụ bên dưới minh họa cách bật backend torchao_int4.
from hqq.utils.patching import prepare_for_inference
prepare_for_inference("model", backend="torchao_int4")Tham khảo hướng dẫn Backend để biết thêm chi tiết.
Tài nguyên
Đọc bài đăng trên blog Half-Quadratic Quantization of Large Machine Learning Models để biết thêm chi tiết về HQQ.
Update on GitHub