# VPTQ

[Vector Post-Training Quantization (VPTQ)](https://github.com/microsoft/VPTQ) là một phương pháp Post-Training Quantization (PTQ) sử dụng vector quantization để lượng tử hóa các LLM ở độ rộng bit cực thấp (<2-bit). VPTQ có thể nén một mô hình 70B, thậm chí 405B, xuống 1-2 bit mà không cần huấn luyện lại và vẫn duy trì độ chính xác cao. Đây là một thuật toán lượng tử hóa nhẹ, mất khoảng 17 giờ để lượng tử hóa một mô hình 405B. VPTQ có khả năng suy luận lượng tử hóa linh hoạt với chi phí giải mã thấp và thông lượng cao cùng Time To First Token (TTFT).

Chạy lệnh bên dưới để cài đặt VPTQ, cung cấp các kernel hiệu quả cho suy luận trên GPU NVIDIA và AMD.

```bash
pip install vptq
```

[VPTQ-community](https://huggingface.co/VPTQ-community) cung cấp một bộ sưu tập các mô hình đã được lượng tử hóa VPTQ. Tên mô hình chứa thông tin về độ rộng bit (không bao gồm cookbook, tham số và chi phí đệm). Hãy xem xét mô hình [Meta-Llama-3.1-70B-Instruct-v8-k65536-256-woft] như một ví dụ.

- Tên mô hình là Meta-Llama-3.1-70B-Instruct.
- Số lượng tâm được cho bởi 65536 (2^16).
- Số lượng tâm dư được cho bởi 256 (2^8).

Công thức tính độ rộng bit tương đương được cho bởi biểu thức sau.

- index: log2(65536) = 16 / 8 = 2-bit
- chỉ số phần dư: log2(256) = 8 / 8 = 1-bit
- tổng số bit: 2 + 1 = 3-bit

Từ đây, hãy ước tính kích thước mô hình bằng cách nhân 70B * 3-bits / 8-bits/byte để có tổng cộng 26.25GB.

Tải một mô hình đã lượng tử hóa VPTQ bằng [from_pretrained()](/docs/transformers/main/vi/main_classes/model#transformers.PreTrainedModel.from_pretrained).

```py
from transformers import AutoTokenizer, AutoModelForCausalLM

quantized_model = AutoModelForCausalLM.from_pretrained(
    "VPTQ-community/Meta-Llama-3.1-70B-Instruct-v16-k65536-65536-woft",
    dtype="auto", 
    device_map="auto"
)
```

Để lượng tử hóa mô hình của riêng bạn, hãy tham khảo hướng dẫn [VPTQ Quantization Algorithm Tutorial](https://github.com/microsoft/VPTQ/blob/algorithm/algorithm.md).

## Benchmarks

VPTQ đạt độ chính xác tốt hơn và thông lượng cao hơn với chi phí lượng tử hóa thấp hơn trên các mô hình có kích thước khác nhau. Các kết quả thực nghiệm sau đây chỉ mang tính tham khảo; VPTQ có thể đạt được kết quả tốt hơn với các tham số hợp lý, đặc biệt là về độ chính xác của mô hình và tốc độ suy luận.

| Mô hình       | bitwidth | W2↓  | C4↓  | AvgQA↑ | tok/s↑ | mem(GB) | chi phí/h↓ |
| ----------- | -------- | ---- | ---- | ------ | ------ | ------- | ------- |
| LLaMA-2 7B  | 2.02     | 6.13 | 8.07 | 58.2   | 39.9   | 2.28    | 2       |
|             | 2.26     | 5.95 | 7.87 | 59.4   | 35.7   | 2.48    | 3.1     |
| LLaMA-2 13B | 2.02     | 5.32 | 7.15 | 62.4   | 26.9   | 4.03    | 3.2     |
|             | 2.18     | 5.28 | 7.04 | 63.1   | 18.5   | 4.31    | 3.6     |
| LLaMA-2 70B | 2.07     | 3.93 | 5.72 | 68.6   | 9.7    | 19.54   | 19      |
|             | 2.11     | 3.92 | 5.71 | 68.7   | 9.7    | 20.01   | 19      |

## Tài nguyên

Xem một ví dụ demo của VPTQ trên [Space](https://huggingface.co/spaces/microsoft/VPTQ) Demo Trực Tuyến VPTQ hoặc thử chạy [notebook](https://colab.research.google.com/github/microsoft/VPTQ/blob/main/notebooks/vptq_example.ipynb) suy luận VPTQ.

Để biết thêm thông tin, hãy đọc [bài báo](https://huggingface.co/papers/2409.17066) về VPTQ.

