Blog / AI / Deep Article
Phân tích cách lượng tử hóa 8-bit, 4-bit và AWQ giảm bộ nhớ mô hình AI, những đánh đổi về tốc độ, chất lượng và cách đánh giá trên GPU thực tế.
Một mô hình ngôn ngữ có hàng tỷ tham số không chỉ cần năng lực tính toán mà còn cần nơi lưu các trọng số của nó. Khi chạy trên máy cá nhân hoặc một máy chủ GPU có dung lượng bộ nhớ hạn chế, trở ngại đầu tiên thường là mô hình không thể nạp trọn vào bộ nhớ. Lượng tử hóa (quantization) giải quyết một phần bài toán bằng cách biểu diễn trọng số với ít bit hơn. Nhưng ít bit không đồng nghĩa mô hình tự động nhanh hơn, và càng không có nghĩa chất lượng giữ nguyên trong mọi tác vụ.
Bài viết này tập trung vào lượng tử hóa trọng số phục vụ suy luận, đặc biệt là cách tiếp cận activation-aware weight quantization (AWQ). Đây là chủ đề khác với việc huấn luyện bộ thích nghi LoRA hay QLoRA: mục tiêu chính ở đây là đưa một mô hình đã có vào môi trường triển khai bị giới hạn tài nguyên, rồi đo được lợi ích và tổn thất thực tế.
Hãy xét một mô hình giả định có 7 tỷ tham số. Nếu mỗi tham số được lưu bằng 16 bit, phần trọng số thô chiếm xấp xỉ 14 tỷ byte, tức khoảng 14 GB theo hệ thập phân. Nếu biểu diễn mỗi tham số bằng 8 bit, con số lý thuyết còn khoảng 7 GB; với 4 bit là khoảng 3,5 GB. Đây chỉ là phép tính số tham số nhân với số bit trên mỗi tham số, chưa phải dung lượng VRAM mà ứng dụng thực tế sẽ sử dụng.
Bộ nhớ thực tế còn dành cho mã chương trình, vùng làm việc của phép toán, các tensor không được lượng tử hóa, metadata của các nhóm lượng tử và KV cache phát sinh khi xử lý ngữ cảnh. Vì vậy, câu quảng cáo “mô hình 7B chạy được với 3,5 GB VRAM” không thể được suy ra chỉ từ phép nhân trên. Nó còn phụ thuộc kiến trúc, độ dài đầu vào, số người dùng đồng thời, runtime và cách phân phối các lớp lên thiết bị.
Một khác biệt quan trọng là trọng số và KV cache không giống nhau. Trọng số là các giá trị học được và thường được dùng lặp lại trong suốt phiên suy luận. KV cache là dữ liệu trung gian liên quan đến chuỗi token đã xử lý; nó tăng theo lượng ngữ cảnh và số phiên. Lượng tử hóa trọng số có thể giảm mạnh phần thứ nhất mà không tự động giải quyết toàn bộ phần thứ hai.
Trong biểu diễn số thực có độ chính xác cao, mỗi trọng số có thể mang nhiều mức giá trị. Khi lượng tử hóa, ta ánh xạ các giá trị ấy vào một tập mức rời rạc nhỏ hơn. Một cách diễn giải đơn giản là chọn hệ số tỷ lệ và điểm không, chuyển giá trị thực thành số nguyên gần nhất trong miền cho phép, rồi khôi phục gần đúng khi cần tính toán.
Ví dụ minh họa: một nhóm trọng số trải từ -1 đến 1. Nếu chỉ có rất ít mức biểu diễn, hai trọng số khác nhau có thể bị làm tròn về cùng một mức. Sai số từng trọng số đôi khi nhỏ nhưng có thể tích lũy qua nhiều lớp mạng. Một mô hình lớn không phản ứng đồng đều với sai số: có vị trí chịu được làm tròn, có vị trí khiến đầu ra thay đổi đáng kể.
Trong thực tế, công thức và cách đóng gói có thể khác nhau giữa int8, int4, NF4, FP4 hoặc các định dạng đặc thù phần cứng. Không nên coi mọi nhãn “4-bit” là một định dạng duy nhất. Phương pháp chọn scale, kích thước nhóm, cách xử lý giá trị ngoại lệ và kernel tính toán đều tác động đến kết quả.
Tài liệu bitsandbytes của Hugging Face mô tả các lớp Linear8bitLt và Linear4bit thay thế lớp tuyến tính thông thường. Cũng trong tài liệu đó, LLM.int8() giữ độ chính xác cao hơn cho một số phép tính nhạy cảm. Điều này phản ánh một nguyên tắc thực dụng: giảm độ chính xác có chọn lọc thường hợp lý hơn ép mọi phép tính vào cùng một khuôn.
Tưởng tượng hai trọng số có độ lớn bằng nhau, nhưng một trọng số thường được nhân với tín hiệu đầu vào mạnh còn trọng số kia hiếm khi tham gia các đường tính toán quan trọng. Sai số do lượng tử hóa hai trọng số ấy có thể tạo tác động khác nhau lên đầu ra.
AWQ xuất phát từ nhận xét rằng tầm quan trọng của trọng số không thể đánh giá chỉ bằng cách nhìn vào chính trọng số. Nghiên cứu AWQ của Ji Lin và cộng sự dùng phân bố activation — các giá trị kích hoạt quan sát được khi mô hình xử lý dữ liệu — để xác định những kênh nhạy cảm. Theo phần tóm tắt nghiên cứu, bảo vệ một tỷ lệ nhỏ các trọng số nổi bật có thể giảm đáng kể sai số lượng tử hóa.
Ý tưởng cốt lõi không đơn giản là “giữ 1% trọng số ở 16 bit”. Nhóm tác giả mô tả phép biến đổi tương đương bằng cách thay đổi tỷ lệ các kênh trọng số quan trọng, qua đó giảm sai số mà vẫn hướng tới cách triển khai thân thiện với phần cứng. Điều này quan trọng bởi pha trộn nhiều độ chính xác tùy tiện có thể gây bất lợi cho kernel GPU và làm mất lợi ích của dữ liệu đã nén.
Các thống kê activation được thu thập ngoại tuyến từ dữ liệu hiệu chuẩn. Cách chọn dữ liệu vẫn cần được xem xét: nếu bộ hiệu chuẩn quá hẹp, việc đo các kênh nhạy cảm có thể không phản ánh đủ tình huống sử dụng. Nghiên cứu báo cáo khả năng khái quát trên nhiều miền và phương thức, nhưng đó là kết quả trong thiết lập đánh giá của tác giả, không phải bảo đảm cho mọi mô hình mới.
Không. Giảm kích thước trọng số có thể giảm lượng dữ liệu phải đọc từ bộ nhớ, đặc biệt trong tình huống hiệu năng bị giới hạn bởi băng thông bộ nhớ. Tuy nhiên, bộ xử lý còn phải giải mã hoặc chuyển đổi dữ liệu lượng tử sang dạng phù hợp cho phép nhân ma trận. Nếu runtime thiếu kernel tối ưu, chi phí chuyển đổi có thể triệt tiêu lợi ích.
Bản nghiên cứu AWQ công bố TinyChat, một framework suy luận hướng tới mô hình 4-bit trên thiết bị. Nhóm tác giả báo cáo mức tăng tốc hơn ba lần so với triển khai Hugging Face FP16 trong các điều kiện đo của họ. Đây là kết quả benchmark của nghiên cứu, không phải cam kết rằng một máy bất kỳ, với một mô hình bất kỳ, cũng tăng tốc ba lần khi bật AWQ.
Cần phân biệt ít nhất ba đại lượng: thời gian xử lý token đầu tiên, tốc độ sinh các token tiếp theo và thông lượng khi nhiều yêu cầu chạy đồng thời. Một phương pháp có thể cải thiện thông lượng nhưng không cải thiện tương ứng độ trễ từng người dùng. Tương tự, một mô hình nạp vừa GPU nhờ 4-bit có thể vẫn chậm nếu phần lớn phép toán phải chuyển qua CPU.
Phần cứng cũng đặt ra giới hạn. Tài liệu Hugging Face liệt kê các yêu cầu tương thích riêng cho 8-bit, NF4/FP4 và các backend NVIDIA, Intel hoặc CPU. Không thể suy từ việc một GPU hỗ trợ CUDA rằng mọi kernel lượng tử hóa đều chạy tối ưu trên nó. Phiên bản thư viện, driver, cấu hình model và loại toán tử đều cần được kiểm tra.
Một mô hình được nén vẫn có thể trả lời rất tốt nhiều câu hỏi thông thường. Nhưng sai số làm tròn có thể lộ ra ở những tác vụ cần phân biệt xác suất sát nhau, suy luận nhiều bước, mã lập trình hoặc chuỗi đầu ra dài. Không nên đánh giá chất lượng chỉ bằng vài câu hỏi trò chuyện dễ.
Một phép kiểm tra hữu ích cần có tập nhiệm vụ gần với môi trường sử dụng: trả lời tiếng Việt, trích xuất thông tin có cấu trúc, làm toán, sinh mã và kiểm tra độ ổn định định dạng nếu ứng dụng cần. So sánh phải dùng cùng prompt, cùng chính sách lấy mẫu và cùng điều kiện phần cứng khi có thể. Ngoài điểm trung bình, nên xem các lỗi nghiêm trọng: mất dữ kiện, suy luận sai, không tuân thủ định dạng hoặc tạo nội dung thiếu căn cứ.
Có hai tầng đánh đổi. Tầng thứ nhất là sai số số học do biểu diễn ít bit. Tầng thứ hai là hệ quả của cả hệ thống: khi tiết kiệm VRAM, người vận hành có thể tăng độ dài ngữ cảnh hoặc số phiên đồng thời. Khi đó, chất lượng và độ trễ đo được còn phụ thuộc tải mới, không chỉ phương pháp lượng tử hóa. Kết luận “4-bit tốt hơn 16-bit” sẽ gây hiểu nhầm nếu chỉ xét số người dùng phục vụ mà bỏ qua chất lượng và chi phí.
8-bit và 4-bit trước hết mô tả ngân sách biểu diễn trên mỗi phần tử đã lượng tử hóa. AWQ là phương pháp lựa chọn và bảo vệ những kênh trọng số nhạy cảm dựa trên activation, có thể được triển khai với trọng số độ chính xác thấp. NF4 là định dạng 4-bit được thiết kế cho những trọng số có phân bố gần chuẩn, được tài liệu Hugging Face giới thiệu trong bối cảnh QLoRA.
QLoRA chủ yếu giải quyết bài toán tinh chỉnh một mô hình nền đã lượng tử hóa bằng các tham số bổ sung có thể huấn luyện. AWQ thường được thảo luận như một phương pháp nén trọng số phục vụ suy luận. Chúng có thể xuất hiện trong cùng hệ sinh thái công cụ nhưng không phải hai tên gọi thay thế cho nhau.
Tài liệu bitsandbytes cũng nêu nested quantization, tức lượng tử hóa tiếp metadata lượng tử để giảm thêm chi phí lưu trữ. Điều này cho thấy kích thước thực tế không đơn giản bằng số bit nhân số tham số: hệ thống còn phải lưu thông tin phục hồi giá trị. Các lựa chọn như group size, scale và dtype tính toán có thể làm thay đổi cả footprint lẫn tốc độ.
Giả sử một nhóm muốn triển khai chatbot nội bộ trên GPU có 16 GB VRAM. Mục tiêu không phải chọn cấu hình “nhẹ nhất”, mà là tìm cấu hình đạt ngưỡng chất lượng với độ trễ chấp nhận được. Quy trình hợp lý bắt đầu bằng mô hình gốc và bài kiểm thử đại diện, sau đó mới thử các bản 8-bit và 4-bit tương thích.
Bước đầu tiên là ghi nhận dung lượng trọng số, VRAM đỉnh, độ dài ngữ cảnh, thời gian đến token đầu và tốc độ sinh token. Tiếp đó, chạy cùng bộ câu hỏi trên từng cấu hình. Nếu 4-bit giảm đáng kể bộ nhớ nhưng làm sai các trường thông tin quan trọng, mức tiết kiệm ấy không đáng giá cho nghiệp vụ yêu cầu độ chính xác cao. Nếu chất lượng gần tương đương và tải tăng đáng kể, 4-bit có thể là lựa chọn hợp lý.
Checkpoint 4-bit phải tương thích với engine, kernel, phiên bản framework và giấy phép mô hình.
Đây là ví dụ thiết kế thử nghiệm, không phải kết quả đo thực tế trên GPU 16 GB. Không có số benchmark nào được giả định là đã chạy. Một bài viết có trách nhiệm phải tách phép tính lý thuyết, số liệu do tác giả nghiên cứu báo cáo và kết quả thực nghiệm của chính hệ thống.
Hiệu quả của AWQ trên một mô hình mới phụ thuộc kiến trúc, phân bố trọng số, tập hiệu chuẩn, phần cứng và triển khai kernel. Các kết quả trong bài báo gốc là bằng chứng về phương pháp, nhưng không thay thế phép đo ở môi trường đích. Ngoài ra, nhiều benchmark ngắn chưa phản ánh đầy đủ đầu vào tiếng Việt dài, nhiều lượt hội thoại hoặc tác vụ chuyên môn hiếm gặp.
Cũng cần hỏi benchmark có so sánh cùng một mức chất lượng hay không. Nếu một bản lượng tử hóa nhanh hơn nhưng giảm mạnh độ chính xác ở tác vụ cốt lõi, chỉ báo tốc độ đơn lẻ không đủ để ra quyết định. Nên trình bày kết quả dưới dạng cặp giá trị: tài nguyên và chất lượng, cùng điều kiện đo cụ thể.
Cũng cần tính chi phí hiệu chuẩn, kiểm thử và bảo trì các định dạng checkpoint, không chỉ giá thuê GPU.
Lượng tử hóa là một trong những kỹ thuật quan trọng giúp mô hình ngôn ngữ tiếp cận phần cứng phổ thông hơn. Nó giảm dung lượng trọng số bằng cách chấp nhận một mức sai số biểu diễn; AWQ cố gắng phân bổ sai số thông minh hơn nhờ quan sát activation. Nhưng nén mô hình không tự giải quyết KV cache, không bảo đảm tăng tốc và không miễn trừ kiểm thử chất lượng.
Khi lựa chọn giữa FP16, 8-bit và 4-bit, câu hỏi tốt nhất không phải “cấu hình nào nhỏ nhất?” mà là “cấu hình nào đạt chất lượng tối thiểu, độ trễ mục tiêu và ngân sách vận hành trên phần cứng cụ thể?”. Chỉ một phép đo có thể lặp lại mới biến lợi ích lý thuyết của lượng tử hóa thành quyết định triển khai đáng tin cậy.