Multi-Query Attention Là Gì? Giải Thích Dễ Hiểu Cho Người Mới

Câu trả lời nhanh
Multi-Query Attention (MQA) là biến thể của attention trong Transformer, nơi mọi query head dùng chung một cặp Key-Value duy nhất thay vì mỗi head một bộ riêng. Nhờ vậy KV Cache nhỏ đi hàng chục lần, việc sinh văn bản nhanh hơn và tốn ít bộ nhớ hơn rõ rệt, đổi lại chất lượng giảm nhẹ. GQA chính là phiên bản cân bằng giữa MQA và Multi-Head Attention truyền thống, được Llama và Qwen dùng làm mặc định.

Multi-Query Attention (MQA) là gì?

Multi-Query Attention, viết tắt là MQA, là một biến thể của cơ chế attention trong Transformer, trong đó tất cả các “đầu” (query head) dùng chung một bộ Key và Value duy nhất thay vì mỗi đầu có bộ riêng. Kết quả là mô hình cần lưu trữ và di chuyển ít dữ liệu hơn rất nhiều khi suy luận, đặc biệt là khi sinh văn bản dài.

Nói cách khác, nếu attention truyền thống như mỗi nhân viên một bộ chìa khóa riêng thì MQA cho cả văn phòng dùng chung một bộ chìa. Chất lượng có giảm nhẹ, nhưng tốc độ và bộ nhớ lại được cải thiện đáng kể.

MQA hoạt động như thế nào?

Trong kiến trúc Multi-Head Attention tiêu chuẩn, mỗi lớp attention có nhiều cặp Key-Value head song song với Query head. Ví dụ một mô hình có 32 đầu query thì cũng có 32 đầu key và 32 đầu value. Đây chính là nguồn gốc của cái giá phải trả: khi sinh văn bản, toàn bộ các Key và Value này phải được lưu trong KV Cache để tái sử dụng ở từng bước sinh từ.

MQA đơn giản hóa điều đó bằng cách giữ nguyên số query head nhưng chỉ dùng đúng một key head và một value head cho tất cả. Bộ nhớ đệm KV Cache vì thế nhỏ hơn đúng bằng số đầu query. Với mô hình 32 đầu, KV Cache giảm 32 lần — con số không hề nhỏ khi bạn chạy mô hình dài ngữ cảnh.

Cơ chế này được Noah Shazeer đề xuất năm 2019 trong bài báo “Fast Transformer Decoding: One Write-Head is All You Need”. Tên bài báo đã tóm tắt tinh thần của MQA: chỉ cần một đầu ghi là đủ.

Vì sao MQA quan trọng khi chạy AI?

Khi một mô hình ngôn ngữ sinh văn bản, mỗi token mới đều cần “nhìn lại” toàn bộ token trước đó. Thông tin nhìn lại đó chính là Key và Value đã tính sẵn, được lưu trong KV Cache. Bộ nhớ cache này lớn tới mức nó thường là điểm nghẽn chính của quá trình suy luận, chứ không phải bản thân phép tính.

Bằng cách giảm số lượng Key-Value head xuống một, MQA giải tỏa đúng điểm nghẽn đó. Ít dữ liệu hơn nghĩa là ít băng thông bộ nhớ phải di chuyển hơn, và băng thông bộ nhớ chính là thứ quyết định tốc độ sinh từ trên GPU ngày nay.

Mình hay hình dung thế này: KV Cache giống như bàn làm việc của nhân viên phiên dịch. Câu càng dài, tài liệu chất trên bàn càng nhiều, tới mức việc tìm giấy còn lâu hơn việc đọc giấy. MQA là cách gom toàn bộ tài liệu về một cuốn sổ mỏng dùng chung.

MQA, GQA và Multi-Head Attention khác nhau ra sao?

Ba khái niệm này nằm trên cùng một phổ. Multi-Head Attention (MHA) là bản gốc: số query head bằng số key-value head. MQA là cực đoan nhất: chỉ một key-value head dùng chung. Grouped Query Attention, hay GQA, nằm ở giữa — nhiều query head chia nhóm, mỗi nhóm dùng chung một key-value head.

GQA ra đời chính là để “cân” lại MQA. MQA tiết kiệm nhất nhưng đổi lại chất lượng tụt rõ ở một số tác vụ. GQA chọn số nhóm hợp lý, ví dụ 8 nhóm cho 32 query head, để giữ được chất lượng gần bằng MHA mà vẫn giảm KV Cache xuống 8 lần. Đây cũng là lý do các mô hình như Llama 3 hay Qwen đều chọn GQA làm mặc định.

Nếu bạn muốn hiểu sâu hơn về phương án trung gian này, mình có bài riêng về GQA, và bài về KV Cache sẽ giải thích kỹ hơn vì sao giảm Key-Value lại nhanh đến vậy.

Đâu là sự đánh đổi của MQA?

Không có bữa trưa nào miễn phí. Khi hàng chục query head cùng dồn về một key-value head, mô hình mất đi phần đa dạng trong cách “nhìn” ngữ cảnh. Với các tác vụ đòi hỏi hiểu ngữ cảnh tinh tế, độ chính xác có thể giảm so với MHA — đây là điều các nhà nghiên cứu đã đo được ngay từ bài báo gốc.

Tuy nhiên ở thực tế triển khai, phần mất mát chất lượng thường nhỏ hơn nhiều so với phần tốc độ và bộ nhớ thu về. Đó là lý do MQA vẫn được dùng trong các mô hình ưu tiên tốc độ suy luận, ví dụ PaLM của Google hay một số mô hình dịch vụ cần phản hồi nhanh với chi phí thấp.

Riêng mình thấy đây là ví dụ đẹp của triết lý kỹ thuật: muốn AI chạy nhanh và rẻ cho hàng triệu người dùng, đôi khi phải hy sinh chút “thông minh” mà mắt thường khó nhận ra. Người dùng không thấy mô hình kém đi 1 điểm benchmark, nhưng chắc chắn cảm nhận được phản hồi nhanh hơn và giá rẻ hơn.

Khi nào nên chọn MQA?

Nếu bạn tự triển khai hoặc fine-tune mô hình cho ứng dụng thực tế, câu hỏi chọn MQA, GQA hay MHA phụ thuộc vào ưu tiên của bạn. Cần thông lượng cao, phục vụ nhiều người dùng cùng lúc, chấp nhận chất lượng hơi giảm? MQA là lựa chọn hợp lý. Cần chất lượng tối đa và có dư GPU? MHA vẫn ổn. Phần lớn các trường hợp thực tế ngày nay, GQA là điểm cân bằng mà cộng đồng đã kiểm chứng.

Cũng lưu ý rằng MQA phát huy công dụng rõ nhất ở giai đoạn suy luận, tức là khi mô hình đã huấn luyện xong và đang chạy phục vụ người dùng. Ở giai đoạn huấn luyện, phần tiết kiệm kém ấn tượng hơn.

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

MQA có phải mô hình AI riêng không?

Không. MQA là một kỹ thuật bên trong kiến trúc Transformer, giống như một chi tiết trong động cơ xe chứ không phải chiếc xe.

MQA nhanh hơn GQA không?

Có, về lý thuyết MQA tiết kiệm bộ nhớ hơn GQA vì chỉ có một key-value head. Nhưng chênh lệch không quá lớn, và GQA giữ chất lượng tốt hơn nên thường được ưu tiên.

Có thể chuyển mô hình MHA sang MQA không?

Có. Kỹ thuật phổ biến là “uptraining”: gộp các key-value head có sẵn lại rồi huấn luyện thêm một phần nhỏ số bước ban đầu để mô hình thích nghi. Bài báo GQA đã chứng minh cách này hiệu quả.

Tóm lại

Multi-Query Attention là thủ thuật nhỏ nhưng thay đổi cuộc chơi trong việc tối ưu suy luận AI: gộp toàn bộ Key-Value head về một để giảm KV Cache, tăng tốc sinh từ và hạ chi phí phục vụ. Hiểu MQA cũng giúp bạn hiểu vì sao các mô hình hiện đại như Llama chọn GQA — chính là phiên bản cân bằng của ý tưởng này. Nếu bạn đang tìm hiểu tối ưu inference, đây là một trong những khái niệm nền tảng đáng nắm.

ThienLv

Mình là Thien, người tạo ra blog này. Ban ngày làm marketing, ban đêm cày tiền online và chơi với AI. Blog này là nơi mình ghi lại những gì mình thử qua — tool nào xịn, chiến thuật nào chạy được, cái gì thất bại. Mình không giỏi nhất, nhưng mình thích chia sẻ thật. Chill với một ly cafe đá là lý tưởng nhất.

Xem tất cả bài viết →

Để 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 *