# Chọn một phương pháp

Nếu checkpoint của bạn đã được lượng tử hóa, checkpoint sẽ quyết định phương pháp. Hãy tải nó như được minh họa trong [Tải checkpoint đã lượng tử hóa trước](./overview#load-a-pre-quantized-checkpoint). Ngược lại, hãy chọn một phương pháp dựa trên phần cứng của bạn và những gì bạn cần làm với mô hình sau khi tải nó.

## Bắt đầu từ mục tiêu của bạn

Mỗi hàng đề xuất một phương pháp đầu tiên để thử. Hãy kiểm tra bảng so sánh đầy đủ trước khi bạn quyết định chọn một phương pháp.

| Mục tiêu | Bắt đầu với | Tại sao |
|---|---|---|
| Đào tạo mô hình với ít bộ nhớ hơn và ít cấu hình nhất | [bitsandbytes](./bitsandbytes) | Thực hiện lượng tử hóa xuống 4 hoặc 8 bit trong quá trình tải mà không cần hiệu chuẩn, chạy trên CUDA, XPU, HPU và CPU, đồng thời hỗ trợ lưu và tinh chỉnh. |
| Tinh chỉnh với QLoRA | [bitsandbytes](./bitsandbytes#qlora) | Hỗ trợ 4-bit NF4 với PEFT. [HQQ](./hqq), [EETQ](./eetq), [GPTQ](./gptq), [SINQ](./sinq) và [Quanto](./quanto) cũng hỗ trợ fine-tuning. |
| Tăng tốc suy luận với `torch.compile` | [torchao](./torchao) | `generate` tự động biên dịch các mô hình torchao với bộ nhớ đệm tĩnh, và torchao có các phương án int4, int8 và FP8 cho CUDA, XPU và CPU. |
| Đạt độ chính xác 4-bit tốt nhất | [GPTQ](./gptq) | Hiệu chuẩn trên một tập dữ liệu trong khi tải. Để sử dụng [AWQ](./awq) hoặc [AutoRound](./auto_round) thay thế, hãy lượng tử hóa bằng thư viện của chúng và tải checkpoint. |
| Chạy FP8 trên Ada, Hopper hoặc Intel XPU | [FP8 chi tiết](./finegrained_fp8) | Yêu cầu khả năng tính toán CUDA 8.9 trở lên, hoặc một XPU. [FBGEMM FP8](./fbgemm_fp8) yêu cầu khả năng tính toán 9.0 trở lên, hoặc một XPU. |
| Chạy FP4 trên Blackwell | [NVFP4](./nvfp4) | Thực hiện lượng tử hóa xuống định dạng số float 4-bit của NVIDIA trong khi tải. [MXFP4](./mxfp4) chạy trên compute capability 7.5 trở lên, XPU và CPU. |
| Chạy trên Apple silicon | [Metal](./metal) | Thực hiện lượng tử hóa xuống 2, 4 hoặc 8 bit trên MPS trong khi tải. Các tệp [GGUF](./gguf) cũng được tải trên MPS. |
| Tải các checkpoint được tạo bằng llm-compressor | [compressed-tensors](./compressed_tensors) | Tải các checkpoint FP8, int4 và int8 ở định dạng compressed-tensors. |
| Nén xuống dưới 4 bit | [HQQ](./hqq) hoặc [SINQ](./sinq) | Thực hiện lượng tử hóa xuống 2 hoặc 3 bit khi tải mà không cần hiệu chuẩn. Các checkpoint [AQLM](./aqlm), [VPTQ](./vptq) và [SpQR](./spqr) có thể đạt mức thấp hơn nhưng phải được lượng tử hóa bằng thư viện riêng của chúng. |

Hiển thị bảng so sánh đầy đủ

| Phương pháp | `quant_method` | Quy trình làm việc | Bits | Phần cứng | Lưu | Tinh chỉnh | Tự động biên dịch |
|---|---|---|---|---|---|---|---|
| [AQLM](./aqlm) | `aqlm` | Chỉ dành cho đã lượng tử hóa | 1–2 | CUDA, CPU | ✅ | ✅ với `aqlm>=1.0.2` | ❌ |
| [AutoRound](./auto_round) | `auto-round` | Chỉ dành cho đã lượng tử hóa | 2–8 | CUDA, XPU, CPU | ✅ | ❌ | ❌ |
| [AWQ](./awq) | `awq` | Chỉ dành cho đã lượng tử hóa | 4 | CUDA, ROCm, XPU, CPU | ✅ ngoại trừ các backend ExLlama | ✅ với `gptqmodel>=5.0.0` | ❌ |
| [BitNet](./bitnet) | `bitnet` | Chỉ dành cho đã lượng tử hóa | 1.58 | CUDA | ✅ | Chỉ `autobitlinear` ở chế độ `online` | ❌ |
| [bitsandbytes](./bitsandbytes) | `bitsandbytes` | Trong khi tải | 4, 8 | CUDA, XPU, HPU, CPU | ✅ | ✅ | ❌ |
| [compressed-tensors](./compressed_tensors) | `compressed-tensors` | Chỉ dành cho đã lượng tử hóa | Đặt theo checkpoint | CUDA, XPU, MPS, CPU | ✅ | ✅ ngoại trừ với các kernel FP8 | ✅ |
| [EETQ](./eetq) | `eetq` | Trong khi tải | 8 | CUDA | ✅ | ✅ | ❌ |
| [FBGEMM FP8](./fbgemm_fp8) | `fbgemm_fp8` | Trong khi tải | 8 | CUDA (khả năng tính toán 9.0+), XPU | ✅ | ❌ | ❌ |
| [FP8 chi tiết](./finegrained_fp8) | `fp8`, `mxfp8` | Trong khi tải | 8 | CUDA (khả năng tính toán 8.9+), XPU | ✅ | ❌ | ✅ |
| [Bốn trên Sáu](./fouroversix) | `fouroversix` | Trong khi tải | 4 | CUDA (nhanh nhất trên Blackwell), CPU | ✅ | Chỉ với `keep_master_weights=True` | ❌ |
| [FP-Quant](./fp_quant) | `fp_quant` | Trong khi tải | 4 | CUDA, XPU | ✅ | Chỉ với `store_master_weights=True` | ❌ |
| [GGUF](./gguf) | `gguf` | Chỉ dành cho đã lượng tử hóa | 1–8 | CUDA, MPS, XPU, CPU | ❌ | ❌ | ✅ |
| [GPTQ](./gptq) | `gptq` | Trong khi tải, với hiệu chuẩn | 2, 3, 4, 8 | CUDA, ROCm, XPU, CPU | ✅ | ✅ | ❌ |
| [HIGGS](./higgs) | `higgs` | Trong khi tải | 2, 3, 4 | CUDA | ✅ | ❌ | ❌ |
| [HQQ](./hqq) | `hqq` | Trong khi tải | 1, 2, 3, 4, 8 | CUDA, XPU | ✅ | ✅ | ❌ |
| [Metal](./metal) | `metal` | Trong khi tải | 2, 4, 8 | MPS | ✅ | ❌ | ❌ |
| [MXFP4](./mxfp4) | `mxfp4` | Trong khi tải | 4 | CUDA (khả năng tính toán 7.5+), XPU, CPU | ✅ | ❌ | ❌ |
| [NVFP4](./nvfp4) | `nvfp4` | Trong khi tải | 4 | Một GPU Blackwell | ❌ | ❌ | ✅ |
| [Quanto](./quanto) | `quanto` | Trong khi tải | 2, 4, 8 | CUDA, MPS, XPU, CPU | ❌ | ✅ | ❌ |
| [Quark](./quark) | `quark` | Chỉ dành cho đã lượng tử hóa | Đặt theo checkpoint | CUDA, ROCm, CPU | ❌ | ❌ | ❌ |
| [SINQ](./sinq) | `sinq` | Trong khi tải | 2, 3, 4, 6, 8 | Một GPU CUDA, CPU | ✅ | ✅ | ❌ |
| [SpQR](./spqr) | `spqr` | Chỉ dành cho đã lượng tử hóa | 3 | CUDA | ✅ | ❌ | ❌ |
| [torchao](./torchao) | `torchao` | Trong khi tải | 4, 8 | CUDA, XPU, CPU | ✅ | Chỉ các phương án 8-bit | ✅ |
| [VPTQ](./vptq) | `vptq` | Chỉ dành cho đã lượng tử hóa | 1–8 | CUDA | ✅ | ❌ | ❌ |

## Kiểm tra bộ nhớ bằng trình chọn lượng tử hóa

[Trình chọn lượng tử hóa](https://huggingface.co/spaces/stevhliu/quantization-picker) ước tính xem một mô hình có vừa với phần cứng của bạn ở mỗi độ chính xác hay không, bao gồm cả bộ đệm KV. Hãy chọn một mô hình, phần cứng của bạn và những gì bạn cần phương pháp đó thực hiện, sau đó giao diện **So sánh** sẽ liệt kê các phương pháp phù hợp.

<iframe src="https://stevhliu-quantization-picker.hf.space" frameborder="0" width="100%" height="420"
>

## Benchmarks

Các benchmark dưới đây so sánh một số phương pháp trên Llama 3.1 8B và 70B. Chúng báo cáo độ chính xác, thông lượng tính bằng token mỗi giây, bộ nhớ đỉnh tính bằng GB và thời gian lượng tử hóa.

Llama 3.1 70B ở bf16 được chạy trên 2 GPU NVIDIA A100 80GB. Các phương pháp FP8 được chạy trên 1 GPU NVIDIA H100 80GB, và tất cả các phương pháp còn lại được chạy trên 1 GPU NVIDIA A100 80GB. Thông lượng được đo ở batch size 1, tạo ra 64 token. Kết quả bao gồm `torch.compile` và các kernel Marlin khi phương pháp hỗ trợ chúng.

<iframe src="https://huggingface.co/datasets/derekl35/quantization-benchmarks/embed/viewer/default/train" frameborder="0" width="100%" height="560px" title="dataset kết quả benchmarking"
>

Kết quả được nhóm thành ba khoảng bit.

| Bits | Các phương pháp được đánh giá | Bộ nhớ so với bf16 | Độ chính xác |
|---|---|---|---|
| 8 | bitsandbytes int8, HQQ, Quanto, torchao, FP8 | Nhỏ hơn khoảng 2 lần | Rất gần với bf16 |
| 4 | AWQ, GPTQ, HQQ, bitsandbytes NF4, SINQ | Nhỏ hơn khoảng 4 lần | Cao. AWQ và GPTQ thường dẫn đầu nhưng cần hiệu chuẩn. |
| Dưới 4 | VPTQ, AQLM, 2-bit GPTQ | Nhỏ hơn hơn 4 lần | Giảm hiệu suất rõ rệt, đặc biệt ở 2 bits. AQLM và VPTQ mất rất nhiều thời gian để lượng tử hóa. |

> [!TIP]
> Đo lường độ chính xác và tốc độ trên chính tác vụ và phần cứng của bạn trước khi chọn phương pháp cho môi trường sản xuất.

