Khi mình bắt đầu tìm hiểu về cách các dịch vụ AI như ChatGPT hay Claude phục vụ hàng triệu người cùng lúc, mình столк mặt với một câu hỏi thú vị: làm sao GPU quản lý bộ nhớ cho hàng nghìn cuộc hội thoại đang chạy song song mà không bị chật? Câu trả lời nằm ở một kỹ thuật có tên PagedAttention — một trong những cải tiến quan trọng nhất giúp suy luận AI rẻ và nhanh hơn đáng kể.
PagedAttention là gì?

PagedAttention là kỹ thuật quản lý bộ nhớ KV Cache khi AI suy luận, lấy cảm hứng từ cơ chế phân trang (paging) của hệ điều hành. Thay vì cấp phát một khối bộ nhớ liền kề và cố định cho từng yêu cầu, PagedAttention chia KV Cache thành nhiều “trang” nhỏ và cấp phát linh hoạt theo nhu cầu thực tế, giúp giảm lãng phí bộ nhớ và phục vụ được nhiều người dùng hơn trên cùng một GPU.
Kỹ thuật này được giới thiệu trong bài báo về vLLM của Đại học California Berkeley vào năm 2023, và hiện nay đã trở thành tiêu chuẩn de facto trong hầu hết các hệ thống suy luận AI hiện đại như vLLM, SGLang hay TensorRT-LLM.
Vì sao cần PagedAttention? Vấn đề lãng phí bộ nhớ
Để hiểu PagedAttention, trước hết bạn cần nắm KV Cache là gì: khi AI sinh văn bản, nó lưu lại các cặp Key-Value của từng token đã xử lý để không phải tính toán lại. Đây là bộ nhớ đệm giúp suy luận nhanh hơn nhiều.
Vấn đề là: cách cấp phát truyền thống giống như đặt chỗ khách sạn trước cho số đêm “đoán mò”. Hệ thống phải cấp phát một khối bộ nhớ liền kề theo độ dài tối đa của chuỗi — ví dụ cấp sẵn 2048 token — ngay cả khi cuộc hội thoại thực tế chỉ dùng 200 token. Cố sinh ra có thể sinh xong ở token thứ 150, nhưng bộ nhớ đã cấp thì vẫn bị giữ nguyên.
Kết quả: theo chính nghiên cứu của nhóm vLLM, chỉ khoảng 30-40% bộ nhớ KV Cache thực sự được sử dụng ở các hệ thống cũ. Phần còn lại bị lãng phí — trong khi KV Cache thường chiếm tới hơn một nửa bộ nhớ GPU khi suy luận. Đây chính là nút thắt khiến giá dịch vụ AI cao và số người dùng phục vụ đồng thời bị giới hạn.
PagedAttention hoạt động như thế nào?
Ý tưởng cốt lõi rất giống cách Windows hay Linux quản lý RAM:
- Chia nhỏ thành trang (logical blocks): KV Cache được chia thành các khối nhỏ, thường 16 token mỗi khối.
- Cấp phát theo nhu cầu (physical blocks): chỉ khi token thực sự được sinh ra, hệ thống mới gán một khối vật lý trên GPU. Không dự trữ trước.
- Bảng ánh xạ (block table): giống bảng trang của hệ điều hành, mỗi yêu cầu có một bảng ghi lại khối logic nào đang nằm ở khối vật lý nào. Các khối vật lý không cần liền kề.
Kết quả là lãng phí bộ nhớ giảm xuống chỉ còn vài phần trăm — chủ yếu ở khối cuối cùng chưa lấp đầy. Nhờ vậy, cùng một GPU có thể phục vụ gấp 2-4 lần số người dùng đồng thời so với trước.
Sharing: đòn bẩy 추가 khi xử lý văn bản trùng lặp
Một lợi ích phụ mình thấy rất hay: các khối vật lý có thể được chia sẻ giữa nhiều yêu cầu nếu chúng có cùng prefix. Ví dụ, hàng nghìn người dùng cùng gửi một system prompt dài giống hệt nhau — thay vì lưu 1000 bản copy, GPU chỉ lưu một bản và tất cả cùng trỏ tới. Đây cũng là nền tảng cho kỹ thuật prefix cache mà nhiều nhà cung cấp API đang dùng để giảm giá cho prompt lặp lại.
PagedAttention liên quan gì đến bạn?
Nếu bạn là người dùng thông thường, PagedAttention gần như vô hình. Nhưng nó ảnh hưởng trực tiếp đến túi tiền của bạn theo ba cách:
Thứ nhất, giá API rẻ hơn. Bộ nhớ hiệu quả hơn nghĩa là chi phí mỗi token giảm, và cuộc đua giá giữa các nhà cung cấp AI phần lớn đến từ những tối ưu hạ tầng kiểu này.
Thứ hai, ít bị queue hơn. Đăng cao điểm, khi máy chủ đầy, request của bạn phải xếp hàng. PagedAttention tăng gấp đôi số request phục vụ đồng thời nên thời gian chờ giảm hẳn.
Thứ ba, nếu bạn tự host model bằng vLLM, đây là lý do vLLM nhanh hơn hẳn cách chạy naive bằng transformers. Góc nhìn cá nhân của mình: nhiều người mới tự host bị ấn tượng bởi throughput kém, nhưng thực ra họ chỉ chưa bật các tối ưu như PagedAttention và continuous batching.
Hạn chế cần biết
PagedAttention không phải đạn bạc. Việc quản lý bảng khối khiến truy cập bộ nhớ gián tiếp hơn, gây một chút overhead tính toán. Với batch nhỏ hoặc chuỗi ngắn, lợi ích không rõ rệt. Ngoài ra, với các kiến trúc attention mới như sliding window hay các biến thể khác, triển khai phức tạp hơn — dù các thư viện hiện đại đã hỗ trợ tốt.
Kết luận
PagedAttention là ví dụ điển hình cho việc một ý tưởng cũ — phân trang bộ nhớ từ thập niên 1960 — được áp dụng lại và thay đổi cả ngành công nghiệp AI. Nếu bạn đang tìm hiểu về suy luận AI, mình đề nghị đọc theo chuỗi: Token, KV Cache, rồi PagedAttention, cuối cùng là Continuous Batching. Hiểu được bốn khái niệm này, bạn đã nắm được xương sống của toàn bộ hạ tầng phục vụ AI hiện đại.
