AIHieu.comAI Hiểu
Thuật ngữ AI giải thích dễ hiểu

Lượng tử hoá mô hình AI là gì: vì sao bản 4 bit chạy được trên máy tính thường

Lượng tử hoá lưu mỗi tham số của mô hình AI bằng ít bit hơn để nhẹ đi vài lần. Cơ chế làm tròn, mức hao hụt và cách đọc ký hiệu Q4, Q8.

Shopkeeper at a Hai Phong hardware store pouring screws from a large tin into a smaller plain tin box, close view of hands, cool fluorescent and daylight mix

Lượng tử hoá (quantization) là cách nén mô hình AI bằng việc lưu mỗi tham số bằng ít bit hơn, ví dụ từ 16 bit xuống 8 bit hoặc 4 bit, để mô hình nhẹ đi vài lần và chạy được trên máy yếu hơn. Cái giá là mỗi con số bị làm tròn thô hơn, nên mô hình có thể kém đi một chút, nhiều hay ít tuỳ mức nén và tuỳ loại việc.

Đây là lý do một mô hình cần cả trăm GB bộ nhớ ở dạng gốc lại có bản chạy được trên máy tính xách tay, và là lý do tên các tệp mô hình hay kèm những ký hiệu khó hiểu như Q4, Q8, int4. Bài này giải thích chuyện làm tròn bằng ví dụ đời thường, vì sao mô hình chịu được việc làm tròn mạnh, cái mất thường lộ ra ở đâu, và cách đọc các ký hiệu đó.

Bit và độ chính xác: chuyện làm tròn quen thuộc

Bạn làm tròn số mỗi ngày. Món hàng 23.457 đồng được thu tròn thành 23.500 đồng; quãng đường 12,38 km được nói là "khoảng mười hai cây". Làm tròn giúp số gọn hơn, dễ nhớ hơn, và trong đa số trường hợp không làm sai việc. Nhưng nếu một kế toán làm tròn từng dòng trong sổ, cộng nghìn dòng lại có thể lệch đáng kể.

Máy tính lưu số bằng bit. Càng nhiều bit, con số càng được lưu chi tiết. Một con số 16 bit có thể nhận khoảng 65 nghìn giá trị khác nhau; một con số 8 bit chỉ có 256 giá trị; một con số 4 bit chỉ có 16 giá trị. Hình dung một cây thước: thước 16 bit chia vạch tới từng li, thước 4 bit chỉ có 16 vạch trên cả chiều dài. Lượng tử hoá là đo lại toàn bộ tham số của mô hình bằng cây thước thưa vạch hơn.

Lợi ích tính được ngay. Một mô hình 8 tỷ tham số ở dạng 16 bit cần khoảng 16 GB chỉ để chứa tham số; ở dạng 8 bit cần khoảng 8 GB; ở dạng 4 bit còn khoảng 4 đến 5 GB, vì còn kèm một ít số phụ. Từ chỗ phải có máy chuyên dụng, mô hình xuống được máy tính xách tay có bộ nhớ khá.

Lợi ích thứ hai ít được nhắc nhưng quan trọng không kém: tốc độ. Khi một mô hình ngôn ngữ sinh từng chữ, phần lớn thời gian máy bận chuyển tham số từ bộ nhớ vào khối tính toán. Tham số nhẹ hơn thì chuyển nhanh hơn, nên mô hình lượng tử hoá thường trả lời nhanh hơn trên cùng một máy.

Lượng tử hoá diễn ra thế nào, ở mức nguyên lý

Có nhiều phương pháp khác nhau, nhưng phần lớn đều đi theo một khung chung. Lấy ví dụ giả định nén xuống 4 bit:

  1. Chia tham số thành từng nhóm nhỏ. Thay vì dùng một cây thước cho cả mô hình, người ta chia tham số thành các nhóm vài chục đến vài trăm con số đứng cạnh nhau.
  2. Tìm khoảng giá trị của mỗi nhóm. Với mỗi nhóm, xem số nhỏ nhất và lớn nhất là bao nhiêu.
  3. Kẻ 16 vạch trên khoảng đó. Khoảng từ nhỏ nhất tới lớn nhất được chia thành 16 nấc, vì 4 bit chỉ biểu diễn được 16 giá trị.
  4. Đưa mỗi tham số về nấc gần nhất. Mỗi con số giờ chỉ cần lưu "nó ở nấc thứ mấy", tức 4 bit, cộng với một hệ số chung cho cả nhóm để biết mỗi nấc ứng với bao nhiêu.
  5. Khi chạy, đổi ngược lại. Máy lấy nấc nhân với hệ số của nhóm để ra giá trị gần đúng rồi tính như bình thường.

Vì mỗi nhóm có cây thước riêng, nhóm toàn số nhỏ được chia vạch dày, nhóm có số lớn được chia vạch rộng. Đây là mẹo giúp làm tròn mạnh mà sai số vẫn nhỏ. Các phương pháp hiện đại còn tinh hơn, chẳng hạn xem tham số nào ảnh hưởng nhiều tới kết quả để giữ chúng chính xác hơn.

Vì sao làm tròn mạnh như vậy mà mô hình vẫn chạy được

Thoạt nghe, ép hàng tỷ con số chi tiết vào 16 nấc có vẻ là cách chắc chắn làm hỏng mô hình. Thực tế lại không tệ như vậy, vì vài lý do. Thứ nhất, mô hình lớn có nhiều dư thừa: một khả năng được nhiều tham số cùng gánh, nên sai số nhỏ ở từng tham số phần lớn triệt tiêu lẫn nhau thay vì cộng dồn.

Thứ hai, phần lớn tham số tập trung quanh những giá trị nhỏ gần không, nên chia vạch dày ở vùng đó là đủ phục vụ đa số. Thứ ba, đầu ra của mô hình ngôn ngữ là một bảng xác suất cho chữ tiếp theo; sai lệch nhỏ trong bảng thường không đổi chữ có xác suất cao nhất, nên câu trả lời đọc lên gần như giống hệt.

Nhưng có một chi tiết các nhà nghiên cứu phát hiện ra khi làm việc với mô hình lớn: một số rất ít giá trị có độ lớn bất thường, gọi là giá trị ngoại lai, và chúng lại rất quan trọng. Nếu dùng chung cây thước với số khác, các giá trị ngoại lai này làm khoảng chia bị kéo giãn, các số bình thường bị làm tròn quá thô. Nhiều phương pháp lượng tử hoá tốt hiện nay xử lý riêng nhóm ngoại lai này.

Có thể so với việc nghe nhạc. Một bản nhạc nén xuống dung lượng nhỏ vẫn nghe rõ giai điệu, lời hát, nhịp; chỉ người có tai tinh và loa tốt mới nhận ra tiếng đàn kém trong hay tiếng trống kém dày. Mô hình lượng tử hoá vừa phải cũng vậy: phần lớn câu trả lời đọc lên không khác, chỉ những việc đòi độ chính xác cao mới làm lộ chỗ hao hụt. Nén quá tay thì như bản nhạc rè, ai nghe cũng thấy.

Kinh nghiệm chung trong cộng đồng là mô hình càng lớn càng chịu lượng tử hoá tốt hơn: một mô hình lớn ở dạng 4 bit thường làm tốt hơn một mô hình nhỏ hơn hẳn ở dạng 16 bit có cùng dung lượng. Đây là quan sát phổ biến, không phải định luật, nên vẫn cần thử với việc cụ thể.

Mức nén và mức hao hụt: xu hướng chung

Bảng sau tóm tắt xu hướng thường được mô tả với mô hình ngôn ngữ cỡ vài tỷ tham số trở lên. Dung lượng lấy ví dụ giả định một mô hình 8B; mức hao hụt là mô tả định tính, thay đổi theo mô hình và phương pháp.

MứcDung lượng ước tính (8B)Mức hao hụt thường gặpHay dùng khi
16 bit (bản gốc phổ biến)khoảng 16 GBkhông, đây là mốc so sánhhuấn luyện, chạy trên máy chủ
8 bitkhoảng 8 GBthường rất khó nhận ramuốn tiết kiệm mà gần như giữ nguyên chất lượng
5 đến 6 bitkhoảng 6 GBnhỏ, đôi khi thấy ở việc khócân bằng giữa chất lượng và dung lượng
4 bitkhoảng 4 đến 5 GBcó, nhưng việc thường ngày ít bị ảnh hưởngchạy trên máy tính cá nhân, phổ biến nhất
2 đến 3 bitkhoảng 3 GBthường thấy rõ: lặp ý, sai lập luận, lạc đềthiết bị rất hạn chế, chấp nhận kém đi

Đọc bảng này như bản đồ định hướng, không phải bảng thông số. Cùng là 4 bit, hai phương pháp khác nhau có thể cho chất lượng chênh nhau đáng kể, và cách duy nhất để biết chắc là thử trên đúng việc của bạn.

Hao hụt thường lộ ra ở đâu

Lập luận nhiều bước và toán. Một sai số nhỏ ở bước đầu có thể đẩy cả chuỗi lập luận đi lệch. Các bài toán, bài lập trình dài thường là nơi bản nén mạnh lộ yếu điểm sớm nhất.

Ngôn ngữ ít dữ liệu, trong đó có tiếng Việt. Phần hiểu biết về ngôn ngữ ít gặp trong dữ liệu huấn luyện có thể mong manh hơn. Một số nghiên cứu ghi nhận lượng tử hoá ảnh hưởng tới các ngôn ngữ ngoài tiếng Anh nhiều hơn, nên với tiếng Việt, hãy thử kỹ trước khi kết luận bản nén "dùng tốt như bản gốc".

Văn bản rất dài. Khi phải giữ và liên hệ thông tin trong một đoạn ngữ cảnh dài, sai số tích luỹ có thể làm mô hình quên hoặc lẫn chi tiết ở đầu tài liệu.

Chi tiết hiếm. Kiến thức ít gặp vốn đã được lưu mong manh; làm tròn thêm có thể khiến mô hình nhớ sai hoặc bịa ở những chỗ bản gốc trả lời đúng.

Sự ổn định của câu trả lời. Bản nén mạnh đôi khi lặp lại một cụm từ, kết thúc câu lửng hoặc đổi giọng giữa chừng. Những lỗi này dễ nhận ra hơn sai sự thật, nhưng làm trải nghiệm kém đi.

Đọc các ký hiệu trên tên tệp mô hình

Khi tìm tải một mô hình trọng số mở, bạn sẽ gặp nhiều ký hiệu chỉ cách lưu số. Một số ký hiệu hay gặp và cách hiểu chung:

  • FP32, FP16, BF16. Số thực 32 bit hoặc 16 bit, là các dạng chưa nén hoặc nén nhẹ. BF16 là một kiểu 16 bit giữ được khoảng giá trị rộng, hay dùng trong huấn luyện.
  • INT8, INT4. Số nguyên 8 bit, 4 bit, tức đã lượng tử hoá.
  • Q8, Q5, Q4, Q3, Q2. Cách ghi phổ biến trong cộng đồng chạy mô hình trên máy cá nhân, con số chỉ số bit trung bình. Hậu tố đi kèm thường chỉ biến thể của phương pháp; ý nghĩa cụ thể xem tài liệu hiện hành của công cụ.
  • Bản lượng tử hoá chính thức và bản của cộng đồng. Một số hãng tự phát hành bản nén, đôi khi được huấn luyện thêm để bù hao hụt. Bản do cộng đồng tự nén thì chất lượng tuỳ người làm.
  • Lượng tử hoá sau huấn luyện và trong huấn luyện. Nén sau khi huấn luyện xong là cách nhanh, phổ biến. Huấn luyện có tính tới việc sẽ bị nén giúp mô hình quen với sai số, thường giữ chất lượng tốt hơn nhưng tốn công hơn.

Một lời nhắc an toàn: chỉ tải tệp mô hình từ nguồn bạn tin cậy, giống như với phần mềm. Mô hình bị chỉnh sửa có thể trả lời sai một cách có chủ đích mà bạn khó phát hiện.

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

Lượng tử hoá có giống nén tệp ZIP không?

Không. Nén ZIP giữ nguyên dữ liệu, giải nén ra y hệt bản gốc. Lượng tử hoá là nén có mất mát, giống lưu ảnh dạng JPEG chất lượng thấp: tệp nhỏ đi nhiều nhưng không khôi phục lại được bản gốc chính xác. Vì thế mới có chuyện mô hình kém đi một chút.

Bản 4 bit có đủ dùng cho việc hằng ngày không?

Với nhiều việc thường ngày như tóm tắt, viết nháp, hỏi đáp đơn giản, bản 4 bit của một mô hình tốt thường đủ dùng. Với toán, lập trình, văn bản dài hoặc tiếng Việt chuyên ngành, hao hụt có thể rõ hơn. Hãy thử vài chục câu hỏi đúng loại việc của bạn để tự đánh giá.

Lượng tử hoá có làm mô hình bịa nhiều hơn không?

Có thể, nhất là ở mức nén mạnh và với kiến thức hiếm, vì những chi tiết lưu mong manh dễ bị làm tròn mất. Ở mức 8 bit, khác biệt thường rất nhỏ. Dù dùng bản nào, thói quen kiểm chứng thông tin quan trọng vẫn cần giữ.

Có thể lượng tử hoá mô hình của dịch vụ trực tuyến để chạy trên máy không?

Không, vì bạn không có trọng số của mô hình đó. Lượng tử hoá chỉ làm được với mô hình bạn có trọng số trong tay, tức mô hình trọng số mở. Các dịch vụ trực tuyến tự quyết định cách chạy mô hình của mình, có khi cũng dùng lượng tử hoá ở phía máy chủ.

Vì sao không nén tiếp xuống 1 bit cho thật nhẹ?

Ép mô hình đã huấn luyện xong xuống 1 hay 2 bit thường làm chất lượng giảm quá nhiều. Có những hướng nghiên cứu huấn luyện mô hình ngay từ đầu với số rất ít bit và cho kết quả đáng chú ý, nhưng đó là cách làm khác với nén một mô hình có sẵn, và vẫn đang được nghiên cứu.

Cần tư vấn cụ thể cho trường hợp của bạn?

Chúng tôi sẽ liên hệ trong vòng 24 giờ.

Đăng ký tư vấn ngay

Bài viết liên quan

Bạn cần hỗ trợ thêm?

Để lại thông tin, chúng tôi sẽ liên hệ trong 24 giờ.

hoặc
Gọi ngay 0926 138 138