
TurboQuant: Khả năng nén và hiệu suất có đáng được cường điệu hóa không?
Làm thế nào để nó tăng cường hiệu quả mà không làm mất đi độ chính xác? Nó có thực sự đáng để cường điệu?
-->
TurboQuant: Khả năng nén và hiệu suất có đáng được cường điệu hóa không? - KDnuggets
-->
Blog
Bài viết hàng đầu
Giới thiệu
chủ đề
trí tuệ nhân tạo
Lời khuyên nghề nghiệp
Thị giác máy tính
Kỹ thuật dữ liệu
Khoa học dữ liệu
Mô hình ngôn ngữ
Học máy
MLOps
NLP
Lập trình
Python
SQL
Bộ dữ liệu
Sự kiện
Tài nguyên
Bảng cheat
Khuyến nghị
Tóm tắt công nghệ
Quảng cáo
Tham gia bản tin
TurboQuant: Khả năng nén và hiệu suất có đáng được cường điệu hóa không?
Làm thế nào để nó tăng cường hiệu quả mà không làm mất đi độ chính xác? Nó có thực sự đáng để cường điệu?
Bởi Iván Palomares Carrascosa, Chuyên gia nội dung kỹ thuật của KDnuggets vào ngày 15 tháng 5 năm 2026 trong Mô hình ngôn ngữ
-->
#Giới thiệu
TurboQuant là bộ thuật toán và thư viện mới được Google ra mắt gần đây. Mục tiêu của nó là áp dụng lượng tử hóa và nén nâng cao cho các mô hình ngôn ngữ lớn (LLM) và công cụ tìm kiếm vectơ - các yếu tố không thể thiếu của hệ thống tạo tăng cường truy xuất (RAG) - để cải thiện hiệu quả của chúng một cách đáng kể. TurboQuant đã được chứng minh là có thể giảm thành công mức tiêu thụ bộ nhớ đệm xuống chỉ còn 3 bit mà không yêu cầu đào tạo lại mô hình hoặc hy sinh độ chính xác.
Làm thế nào nó làm được điều đó và nó có thực sự đáng được cường điệu hóa không? Bài viết này nhằm mục đích trả lời những câu hỏi này thông qua mô tả và ví dụ thực tế về việc sử dụng nó.
Tóm tắt #TurboQuant
Trong khi LLM và công cụ tìm kiếm vectơ sử dụng vectơ chiều cao để xử lý thông tin với kết quả ấn tượng, nỗ lực này đòi hỏi lượng bộ nhớ lớn, có khả năng gây tắc nghẽn lớn trong cái gọi là bộ nhớ đệm khóa-giá trị (KV) — một "bảng gian lận kỹ thuật số" truy cập nhanh chứa thông tin được sử dụng thường xuyên để truy xuất theo thời gian thực. Việc quản lý độ dài ngữ cảnh lớn hơn sẽ tăng quy mô truy cập bộ đệm KV theo kiểu tuyến tính, điều này hạn chế nghiêm trọng dung lượng bộ nhớ và tốc độ tính toán.
Các kỹ thuật lượng tử hóa vectơ (VQ) được sử dụng trong những năm gần đây giúp giảm kích thước của vectơ văn bản để giải quyết các tắc nghẽn, nhưng chúng thường đưa ra một phần "chi phí bộ nhớ" và yêu cầu tính toán các hằng số lượng tử hóa có độ chính xác đầy đủ trên các khối dữ liệu nhỏ, do đó làm suy yếu một phần lý do nén.
TurboQuant là một tập hợp các thuật toán thế hệ tiếp theo để nén nâng cao mà không làm giảm độ chính xác. Nó giải quyết một cách tối ưu vấn đề chi phí bộ nhớ bằng cách sử dụng quy trình hai giai đoạn được hỗ trợ bởi hai kỹ thuật bổ sung cho nhau:
PolarQuant: Đây là kỹ thuật nén được áp dụng ở giai đoạn đầu tiên. Nó nén dữ liệu chất lượng cao bằng cách ánh xạ tọa độ vectơ vào hệ tọa độ cực. Điều này giúp đơn giản hóa hình học dữ liệu và loại bỏ nhu cầu lưu trữ các hằng số lượng tử hóa bổ sung — nguyên nhân chính gây ra chi phí bộ nhớ.
QJL (Quantized Johnson-Lindenstrauss): Giai đoạn thứ hai của quá trình nén. Nó tập trung vào việc loại bỏ các sai lệch có thể có được giới thiệu ở giai đoạn trước, hoạt động như một trình kiểm tra toán học áp dụng nén một bit nhỏ để loại bỏ các lỗi ẩn hoặc các sai lệch còn sót lại do áp dụng PolarQuant.
TurboQuant có đáng được cường điệu không?
Theo kết quả thực nghiệm và bằng chứng, câu trả lời ngắn gọn là có. Bằng cách tránh việc chuẩn hóa dữ liệu tốn kém cần thiết trong các phương pháp lượng tử hóa truyền thống, TurboQuant 3 bit mang lại hiệu suất tăng gấp 8 lần so với các phím không được lượng tử hóa 32 bit trên bộ tăng tốc dựa trên GPU H100.
#Đánh giá TurboQuant
Ví dụ về mã Python sau đây minh họa cách các nhà phát triển có thể đánh giá điều này cục bộ. Chương trình có thể được thực thi trong môi trường IDE cục bộ hoặc máy tính xách tay Google Colab, cung cấp sự so sánh về mặt khái niệm giữa các vectơ không được lượng tử hóa và khả năng nén nhanh của TurboQuant.
Kho lưu trữ TurboQuant yêu cầu các hạt nhân cụ thể để hoạt động. Để ví dụ này hoạt động, trước tiên hãy thực hiện các cài đặt sau — tốt nhất là trong môi trường máy tính xách tay, trừ khi bạn có đủ dung lượng ổ đĩa trên máy cục bộ của mình.
Đầu tiên cài đặt TurboQuant:
cài đặt pip turboquant
Trong môi trường Google Colab, bạn chỉ cần cài đặt thư viện và đảm bảo bộ tăng tốc phần cứng thời gian chạy của bạn được đặt thành GPU T4 — có sẵn trên bậc miễn phí của Colab — để mã sau đây thực thi đúng cách.
Đoạn mã sau minh họa sự so sánh đơn giản về hiệu suất và mức sử dụng bộ nhớ khi sử dụng mô hình ngôn ngữ được đào tạo trước có và không có tính năng nén KV của TurboQuant. Đầu tiên và quan trọng nhất, hàng nhập khẩu chúng ta sẽ cần:
ngọn đuốc nhập khẩu
thời gian nhập khẩu
từ máy biến áp nhập AutoModelForCausalLM, AutoTokenizer
từ nhập khẩu turboquant TurboQuantCache
Chúng tôi sẽ tải một LLM không quá lớn như TinyLlama/TinyLlama-1.1B-Chat-v1.0, được đào tạo để tạo văn bản và mã thông báo tương ứng của nó. Chúng tôi chỉ định sử dụng độ chính xác float thập phân 16 bit: tùy chọn này thường hiệu quả hơn trong phần cứng hiện đại.
model_id = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"
tokenizer = AutoTokenizer.from_pretrain(model_id)
model = AutoModelForCausalLM.from_pretrain(model_id, device_map="auto", torch_dtype=torch.float16)
Tiếp theo, chúng tôi xác định kịch bản, mô phỏng chuỗi đầu vào mô hình lớn, khi TurboQuant thực sự tỏa sáng khi cửa sổ ngữ cảnh trở nên lớn hơn. Đừng lo lắng về việc lặp lại cùng một nội dung 20 lần trên đầu vào: ở đây điều quan trọng là kích thước được quản lý chứ không phải ngôn ngữ.
nhắc = "Giải thích lịch sử của vũ trụ một cách chi tiết." * 20
đầu vào = tokenizer(prompt, return_tensors="pt").to("cuda")
Hàm sau đây là chìa khóa để đo lường và so sánh thời gian thực hiện cũng như mức sử dụng bộ nhớ trong quá trình tạo văn bản, với lượng tử hóa 3 bit của TurboQuant đang được sử dụng, use_tq=True hoặc bị vô hiệu hóa, use_tq=False. Bộ đệm trước tiên được làm trống để đảm bảo các phép đo rõ ràng.
def run_unified_benchmark(use_tq=False):
ngọn đuốc.cuda.empty_cache()
# Khởi tạo loại bộ đệm cụ thể
cache = TurboQuantCache(bits=3) if use_tq else Không có
start_time = time.time()
với ngọn đuốc.no_grad():
# Chạy
Nguồn tin: KDnuggets — Tác giả: Iván Palomares Carrascosa. Bản dịch tiếng Việt do AI thực hiện, có thể có sai sót.