Quantization Q4: Cấu trúc quyết định Q4_K_M hơn Q4_K_S như thế nào?

Quantization Q4: Cấu trúc quyết định Q4_K_M hơn Q4_K_S như thế nào?

Chia sẻ:

Hai tệp cùng mang nhãn 4-bit trong một kho GGUF vẫn chênh lệch nhau rõ rệt: bảng đo perplexity của llama.cpp trên Llama 3 8B ghi Q4_K_M ở 4,58 GiB với PPL 6,407, còn Q4_K_S nhẹ hơn 0,21 GiB nhưng perplexity đội lên 6,501. Khoảng cách đó không đến từ hai thuật toán nén khác nhau, bởi cả hai phiên bản đều lấy chung một nền. Điểm mấu chốt nằm ở cấu trúc: quantization Q4 theo hướng K-quant cho phép miễn trừ vài nhóm tensor khỏi ngưỡng 4 bit, và danh sách miễn trừ ấy mới là thứ phân định bản Medium với bản Small.

Quantization Q4 cắt bỏ điều gì khỏi trọng số gốc FP16

Trọng số của một mô hình ngôn ngữ lớn được huấn luyện ở dấu phẩy động 16-bit hoặc 32-bit, mỗi tham số chiếm hai tới bốn byte. Quantization Q4 gom dải giá trị số thực liên tục về tập hữu hạn gồm 16 mức số nguyên, kèm hệ số tỉ lệ để tái tạo giá trị xấp xỉ lúc nhân ma trận. Phép đổi này không xóa tham số nào, nó thu hẹp biên độ mô tả từng tham số. Kết quả là tệp quantization Q4 rút gọn khoảng 69% so với phiên bản F16, đủ để một bộ xử lý đồ họa phổ thông nạp trọn mạng nơ-ron vào bộ nhớ tốc độ cao.

Định dạng Nguyên lý lưu trữ Dung lượng Llama 3 8B Perplexity (Wikitext-2)
F16 Dấu phẩy động 16-bit, phiên bản đối chứng 14,97 GiB 6,233
Q8_0 Số nguyên 8-bit, block 32 phần tử 7,96 GiB 6,234
Q4_K_M K-quant 4-bit, hỗn hợp mức Medium 4,58 GiB 6,407
Q4_K_S K-quant 4-bit, hỗn hợp mức Small 4,37 GiB 6,501
Q4_0 Phiên bản cũ, làm tròn về mức gần nhất 4,34 GiB 6,700

Toàn bộ số liệu trên trích từ bảng đo perplexity của llama.cpp, xác minh bằng tập Wikitext-2 trên cùng một cấu hình máy và cùng một bản dựng. Llama 3 8B xuất hiện với vai trò bộ số đo tham chiếu, bởi nhóm phát triển công bố đầy đủ mọi mức nén trên cùng mô hình, chứ không phải vì đó là phiên bản nên tải về dùng năm 2026. Nguyên lý đọc bảng vẫn khả dụng với các kho GGUF đời mới, do thuật toán nén không đổi theo danh xưng mô hình.

Cấu trúc super-block dựng nên bản chất của định dạng Q4_K

Điểm phân biệt K-quant với các phiên bản đời đầu nằm ở nguyên lý chia khối. Cấu trúc block_q4_K khai báo trong tệp ggml/src/ggml-common.h gom 256 trọng số thành một super-block, bên trong chia tiếp thành 8 block nhỏ 32 phần tử. Mỗi block nhỏ mang một hệ số tỉ lệ và một giá trị min riêng, cả hai đều lượng tử xuống 6-bit. Phủ lên trên là hai hệ số fp16 cấp super-block, một dùng giải nén dãy scale, một dùng cho dãy min.

Cộng hết phần phụ trợ đó vào, chú thích ngay trong mã nguồn ggml ghi con số tổng kết: 4,5 bit cho mỗi trọng số, không phải 4 bit tròn. Nửa bit dôi ra thực chất là chi phí lưu scale và min. Đổi lại, quantization Q4 theo hướng K-quant mô tả được cả những dải trọng số lệch tâm, thay vì buộc phân bố phải đối xứng quanh số không.

Cấu trúc super-block dựng nên bản chất của định dạng Q4_K

Đặt cạnh block_q4_0 sẽ thấy rõ ưu thế. Phiên bản cũ chia block 32 phần tử, mỗi block chỉ mang một hệ số delta fp16 duy nhất và không có giá trị min, nên phép nén buộc phải đối xứng và chỉ làm tròn về mức gần nhất. Ở đầu kia, block_q6_K chia 16 block 16 phần tử với scale 8-bit, tiêu tốn 6,5625 bit mỗi trọng số. Ba con số 4,5, 6,5625 và 8 dựng nên toàn bộ dải lựa chọn mà quantization Q4 theo hướng K-quant tận dụng.

Phần vỏ tệp bao quanh các khối này được mô tả đầy đủ trong tài liệu GGUF của Hugging Face, gồm khối metadata và bảng tensor đi kèm.

Q4_K_M ưu tiên nâng bit cho tensor nào so với Q4_K_S

Cả Q4_K_M lẫn Q4_K_S đều lấy Q4_K làm nền, chênh lệch duy nhất nằm ở danh sách tensor được miễn trừ. Tệp src/llama-quant.cpp mô tả quy tắc này bằng mã nguồn chứ không bằng lời quảng cáo. Ký tự M viết tắt cho Medium, và phần Medium đó tiêu thêm 0,21 GiB dung lượng để bù đắp độ chính xác ở hai nhóm tensor nhạy cảm nhất của kiến trúc transformer.

Với Q4_K_M, tensor attn_v tương ứng attention.wv được nâng lên Q6_K, và tensor ffn_down tương ứng feed_forward.w2 cũng được nâng lên Q6_K. Hai nhóm này dùng chung hàm chọn lớp use_more_bits(i, n), trả về đúng khi lớp nằm trong 1/8 đầu, hoặc từ 7/8 trở đi, hoặc thỏa điều kiện (i - n/8) % 3 == 2. Nói cách khác, các lớp rìa và một phần ba số lớp giữa duy trì ở 6,5625 bit. Riêng tensor attn_qkv nâng lên Q5_K.

Q4_K_M ưu tiên nâng bit cho tensor nào so với Q4_K_S

Phiên bản Small keo kiệt hơn hẳn. Q4_K_S chỉ nâng bốn lớp attn_v đầu tiên lên Q5_K, và nâng 1/8 số lớp ffn_down đầu tiên lên Q5_K, toàn bộ phần còn lại nằm ở Q4_K. So với Q4_K_M, bảng đo bộc lộ đúng cái giá của sự tiết kiệm: tệp nhẹ hơn 0,21 GiB nhưng perplexity đội thêm 0,094 điểm, gấp hơn năm lần biên độ chênh lệch giữa Q8_0 và F16.

Cần thêm một lưu ý để tránh hiểu sai về nhóm định dạng cũ. Q4_0 và Q5_0 vốn nén đồng đều theo block, song llama.cpp vẫn giữ ngoại lệ: khi có ma trận tầm quan trọng đi kèm, 1/8 số lớp ffn_down đầu tiên được kích hoạt sang Q4_1 hoặc Q5_1 nhằm chặn hiện tượng mất kiểm soát ở các lớp đầu.

Quantization Q4 vs Q8 chênh lệch ra sao trên cùng một mô hình

Q8_0 duy trì trọng số ở số nguyên 8-bit và bám sát bản đối chứng tới ngưỡng khó phân biệt: PPL 6,234 so với 6,233 của F16, tức suy giảm 0,02%. Cái giá là 7,96 GiB, gấp 1,74 lần tệp Q4_K_M. Khi cân nhắc Q4 vs Q8 trên cùng một mô hình, chênh lệch 3,38 GiB đó thường quyết định máy có nạp trọn mô hình vào bộ nhớ đồ họa hay không, và đây mới là yếu tố cốt lõi chi phối tốc độ sinh từ.

Quantization Q4 vs Q8 chênh lệch ra sao trên cùng một mô hình

Ở chiều ngược lại, mức tăng 0,174 điểm perplexity của Q4_K_M không phân bổ đều trên mọi tác vụ. Với tóm tắt tài liệu, dịch thuật hay soạn thảo, sai lệch nằm dưới ngưỡng nhận biết của người đọc. Với chuỗi suy luận dài nhiều bước hoặc sinh mã nguồn có ràng buộc cú pháp chặt, sai lệch của Q4_K_M tích lũy qua từng token và bộc lộ rõ hơn. Cấu hình dư dung lượng bộ nhớ đồ họa thì Q8_0 vẫn là phương án an toàn cho nhóm tác vụ thứ hai.

Cách một công cụ nạp mô hình cũng chi phối trải nghiệm không kém định dạng nén. Bài Làm chủ tốc độ LM Studio phân tích ba thiết lập mặc định thường làm giảm hiệu năng ngay cả khi mức nén đã chọn đúng.

Bộ nhớ đệm ngữ cảnh mới là phần dễ bị bỏ sót

Dung lượng tệp không phải dung lượng bộ nhớ lúc chạy. Llama 3 8B có 32 lớp, 8 đầu key/value và head_dim 128, nên mỗi token phải lưu cả key lẫn value ở 16-bit: 2 nhân 32 nhân 8 nhân 128 nhân 2 byte, ra đúng 128 KiB cho một token. Nhân lên, cửa sổ 4.096 token chiếm 0,5 GiB, còn cửa sổ 32.768 token chiếm tròn 4 GiB. Phần đội thêm khi mở rộng ngữ cảnh là 3,5 GiB, nằm hoàn toàn ngoài con số 4,58 GiB của tệp Q4_K_M.

Ghép hai phần lại, một bộ xử lý đồ họa 8 GB như RTX 5060 Laptop với băng thông 448 GB/s đáp ứng đủ chỗ cho tệp quantization Q4 cộng ngữ cảnh vừa phải, nhưng chạm giới hạn phần cứng rất nhanh khi cửa sổ ngữ cảnh nới rộng. Vượt ngưỡng, phần tính toán tràn sang bộ nhớ hệ thống qua PCIe và tốc độ sinh từ suy giảm theo băng thông thấp hơn nhiều lần của RAM.

Tương quan giữa dung lượng bộ nhớ đồ họa và băng thông được phân tích riêng trong bài Laptop chạy AI local, kèm ngưỡng cấu hình cụ thể.

Khi mô hình chạy nền như một dịch vụ thay vì mở giao diện thủ công, ngân sách bộ nhớ còn phải tính thêm thời lượng mô hình nằm lại trong RAM giữa các lượt gọi. Bài LM Studio Server dựng dịch vụ AI cục bộ mô tả cơ chế nạp theo yêu cầu và tự giải phóng khi máy nhàn rỗi.

Câu hỏi thường gặp (FAQ)

Q4_K_M có nén đúng 4 bit cho mỗi trọng số không?

Không. Nền Q4_K đã tiêu 4,5 bit mỗi trọng số vì phải lưu kèm scale và min 6-bit cho từng block 32 phần tử, cộng hai hệ số fp16 cho mỗi super-block 256 trọng số. Trên nền đó, biến thể Medium còn ưu tiên nâng attn_vffn_down ở một phần số lớp lên Q6_K, tức 6,5625 bit. Con số 4 trong danh xưng chỉ mô tả biên độ của phần lưu trọng số, không phải mức tiêu thụ thực chất của cả tệp.

Nên chọn Q4_K_M hay Q4_K_S khi bộ nhớ chỉ dư khoảng 200 MB?

Bảng đo trên Llama 3 8B cho thấy Q4_K_S nhẹ hơn 0,21 GiB nhưng perplexity tăng từ 6,407 lên 6,501. Nếu 0,21 GiB đó quyết định mô hình có nằm trọn trong bộ nhớ đồ họa hay phải tràn sang RAM, hãy ưu tiên Q4_K_S, bởi phần hiệu năng mất do tràn bộ nhớ lớn hơn nhiều. Còn khi dung lượng khả dụng đủ cho cả hai, Q4_K_M luôn là phương án hợp lý hơn.

Vì sao Q4_0 nhẹ tương đương Q4_K_S mà chất lượng lại kém hơn rõ rệt?

Q4_0 chỉ nhẹ hơn Q4_K_S 0,03 GiB nhưng perplexity vọt từ 6,501 lên 6,700. Nguyên lý cấu trúc của quantization Q4 giải thích khoảng cách đó: mỗi block 32 phần tử của Q4_0 chỉ có một hệ số delta và không có giá trị min, buộc phân bố trọng số phải đối xứng quanh số không. K-quant lưu thêm min cho từng block nên bám sát được các dải lệch tâm, đồng thời duy trì vài nhóm tensor ở mức bit cao hơn.

← Bài trước
Bài sau →

0 phản hồi cho “Quantization Q4: Cấu trúc quyết định Q4_K_M hơn Q4_K_S như thế nào?”

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *