Đóng gói trọng số tam phân ở mức 1,6 bit mỗi trit
Một thủ thuật dấu phẩy tĩnh thông minh đóng gói 5 chữ số tam phân vào 8 bit với hiệu suất 99%, cho phép giải nén SIMD nhanh cho suy luận LLM.

Bài báo BitNet b1.58 sử dụng trọng số tam phân (-1, 0, 1), nhưng lưu trữ chúng một cách ngây thơ sẽ lãng phí không gian. Mức tối thiểu lý thuyết là log₂(3) ≈ 1,585 bit mỗi trit. Một sơ đồ thực tế cần đạt gần mức đó trong khi cho phép giải nén song song nhanh trên phần cứng hiện đại.
Tại sao 5 trit mỗi byte
5 chữ số tam phân biểu diễn 3⁵ = 243 trạng thái, vừa khít trong 8 bit (256 trạng thái). Đó là 1,6 bit mỗi trit — 99,06% giới hạn lý thuyết. Các kích thước khối tốt tiếp theo (3 trit trong 5 bit, 4 trit trong 7 bit) kém hiệu quả hơn hoặc khó căn chỉnh byte.
Thủ thuật dấu phẩy tĩnh
Ý tưởng cốt lõi: coi byte đã đóng gói như một số dấu phẩy tĩnh trong [0, 1). Nhân với 3 và lấy phần nguyên để trích xuất trit quan trọng nhất, sau đó lặp lại với phần thập phân. Không cần phép chia hay modulo — chỉ cần nhân và dịch bit, điều mà SIMD ưa thích.
Đóng gói yêu cầu phép chia làm tròn lên: b = ((b * 256) + 242) / 243. Giải nén là một vòng lặp chặt: b = b * 3; trit = b >> 8; b = b & 0xFF.
Tác giả đã triển khai kỹ thuật này trong llama.cpp cho suy luận TriLM và BitNet b1.58, với các đường dẫn SIMD AVX2 và NEON. Pull request có tại đây.
Tại sao nó quan trọng với LLM
Lượng tử hóa tam phân giảm đáng kể kích thước mô hình — BitNet b1.58 sử dụng trung bình 1,58 bit mỗi trọng số. Đóng gói và giải nén hiệu quả tác động trực tiếp đến thông lượng suy luận, đặc biệt trên CPU. Kỹ thuật này là một ví dụ gọn gàng về việc đánh đổi một lượng nhỏ mật độ để có lợi thế lớn về tốc độ giải mã.
Thảo luận
0 bình luận
Hãy là người đầu tiên thảo luận.