Phân tầng lưu trữ KV cache cho suy luận AI: từ HBM đến S3

Data / Storage • AI Storage • KV cache

Lưu trữ KV cache đang trở thành một tầng storage cho AI mới: khi chatbot nhiều lượt, RAG và agent làm ngữ cảnh dài ra, bộ nhớ GPU không còn đủ chỗ giữ KV cache, và tính lại từ đầu thì tốn GPU và làm người dùng chờ lâu. Bài viết giải thích các tầng lưu trữ KV cache từ HBM, RAM, NVMe cục bộ tới flash dùng chung và S3, cách tính dung lượng cần giữ, và cách phân tầng lưu trữ KV cache phù hợp với từng khối lượng công việc suy luận AI.

System / InfraStorage ArchitectMLOpsCTO / CIOBFSI • Giáo dục

1. Vì sao lưu trữ KV cache phải rời khỏi GPU?

Khi mô hình ngôn ngữ đọc prompt (pha prefill), nó tạo ra các cặp key và value cho từng token ở từng lớp. Đó là KV cache: trạng thái đã tính của ngữ cảnh, giúp pha decode không phải tính lại lịch sử khi sinh token mới. Bài KV data trong GenAI là gì đã giải thích khái niệm; bài này tập trung vào câu hỏi hạ tầng: đặt KV cache ở đâu.

Tăng tuyến tính

Theo độ dài ngữ cảnh

Dung lượng KV cache tăng theo số token × số phiên, trong khi chi phí tính lại lịch sử tăng còn nhanh hơn.

Lặp lại

Ngữ cảnh được dùng nhiều lần

Chatbot nhiều lượt, RAG có prefix chung, agent gọi công cụ nhiều bước đều đọc lại cùng một ngữ cảnh.

Tính lại được

Không cần độ bền tuyệt đối

Theo NVIDIA, KV cache là dữ liệu dẫn xuất, mất thì tính lại được, nên storage cho nó ưu tiên tốc độ, điện năng và chi phí hơn độ bền.

Đây chính là loại “Agent data” mới do AI tạo ra: không phải dữ liệu nghiệp vụ gốc, nhưng giữ lại được thì GPU làm ít việc hơn và người dùng nhận token đầu tiên sớm hơn.

2. KV cache chiếm bao nhiêu dung lượng?

Dung lượng KV cache của mỗi token được tính từ cấu hình mô hình:

KV/token = 2 (K và V) × số lớp × số KV head × head_dim × byte/phần tử
Llama 3.1 70B: 2 × 80 × 8 × 128 × 2 byte (BF16) = 327.680 byte ≈ 320 KiB/token
Lưu KV ở FP8: ≈ 160 KiB/token

Cấu hình 80 lớp, 8 KV head, head_dim 128 lấy từ tài liệu kỹ thuật Llama 3 của Meta. Từ đó:

Ước tính dung lượng KV cache cho Llama 3.1 70B (BF16, tính minh họa)
Kịch bản Token giữ lại KV cache Tầng phù hợp
1 phiên hỏi đáp ngắn 8K ≈ 2,5 GiB G1 (GPU)
1 phiên đọc hợp đồng dài 128K ≈ 40 GiB G1 nếu đang chạy, G2/G3 khi tạm dừng
200 phiên agent đồng thời 200 × 32K ≈ 2.000 GiB (≈ 2,1 TB) Vượt GPU; cần G2 lớn và G3
Giữ lịch sử 2.000 phiên để quay lại trong ngày 2.000 × 32K ≈ 20 TiB (≈ 21 TB) G3.5 / G4 dùng chung

Để so sánh, một máy chủ 8× RTX PRO 6000 có 768 GB bộ nhớ GPU, và sau khi trừ trọng số mô hình chỉ chứa được vài chục phiên 32K ở BF16. Phần còn lại phải được đẩy xuống tầng thấp hơn hoặc bỏ đi rồi tính lại. Cách tính VRAM cho trọng số và KV cache được trình bày trong bài chọn máy chủ GPU Supermicro cho suy luận GenAI.

3. Các tầng lưu trữ KV cache: từ G1 đến G4

NVIDIA Dynamo KV Block Manager (KVBM) chia nơi chứa KV cache thành bốn tầng: G1 bộ nhớ GPU, G2 RAM của CPU, G3 SSD NVMe cục bộ, G4 storage từ xa hoặc trên cloud. Đầu năm 2026, NVIDIA bổ sung tầng G3.5: flash gắn qua Ethernet, tối ưu cho KV cache, dùng chung ở mức pod, trong nền tảng CMX dựa trên BlueField-4 (công bố 01/2026, khi đó gọi là Inference Context Memory Storage Platform; Cloudian và Supermicro nằm trong danh sách đối tác) (Hình 1).

Các tầng lưu trữ KV cacheG1 · Bộ nhớ GPUG2 · RAM hệ thống (CPU)G3 · NVMe cục bộG3.5 · Flash dùng chung qua EthernetHBM / GDDRpinned memorySSD trong máy chủ GPUNVMe-oF, RDMA · tầng CMX của NVIDIAG4 · Storage dùng chung (file, S3 object)dung lượng lớn, bền vững, truy cập qua NIXLNhanh nhất, ít chỗ nhấtTrong một máy chủGắn với một nodeDùng chung trong pod GPUDùng chung toàn hệ thống96–288 GB mỗi GPUhàng trăm GB tới vài TB mỗi máyhàng chục TB, khó chia sẻ giữa nodephục vụ ngữ cảnh “ấm” cho nhiều nodeđộ trễ mili giây, giữ lịch sử phiênOffload: khối KV ít dùng được đẩy xuống tầng lớn hơnOnboard: khi request cần lại, khối KV được nạp lên GPU
Hình 1. Các tầng lưu trữ KV cache theo cách phân loại của NVIDIA Dynamo và nền tảng CMX. Càng xuống dưới, dung lượng càng lớn và phạm vi chia sẻ càng rộng, nhưng độ trễ càng cao. Dung lượng mỗi tầng là ví dụ minh họa.
So sánh các tầng lưu trữ KV cache
Tầng Phương tiện Phạm vi Vai trò Điểm cần lưu ý
G1 HBM/GDDR trên GPU 1 GPU KV đang dùng cho decode Đắt nhất, cạnh tranh chỗ với trọng số mô hình
G2 RAM CPU 1 máy chủ Vùng đệm, nhận KV vừa rời GPU KVBM khuyến nghị cache CPU ít nhất bằng cache GPU
G3 NVMe cục bộ 1 node Giữ KV “ấm” dung lượng lớn Cache đĩa nên ít nhất bằng cache CPU; không dùng chung giữa node
G3.5 Flash qua Ethernet (NVMe-oF, RDMA) Pod nhiều node Chia sẻ ngữ cảnh giữa các node GPU Cần mạng RDMA/độ trễ thấp; hệ sinh thái đang hình thành
G4 File hoặc S3 object storage Toàn hệ thống Lưu lâu dài lịch sử phiên, ngữ cảnh ít dùng Độ trễ mili giây; cần băng thông cao để nạp kịp

4. Cơ chế offload và onboard KV cache

KVBM quản lý KV cache theo khối. Khối rời GPU được sao chép sang RAM bằng CUDA, rồi ghi xuống đĩa qua NIXL, thư viện truyền dữ liệu của NVIDIA (dùng POSIX hoặc GPUDirect Storage khi có). Khi cần lại, khối trên đĩa có thể được đọc thẳng vào bộ nhớ GPU. Với tầng G4, KVBM coi storage là một kho khối dữ liệu truy cập qua NIXL, nên các hãng storage tích hợp bằng plugin NIXL của mình (Hình 2).

Offload và onboard KV cache qua NIXLNVIDIA Dynamo KV Block Manager (KVBM)theo dõi từng khối KV, quyết định khối nào nằm ở tầng nào · tích hợp vLLM, TensorRT-LLMG1 · GPUHBM / GDDRG2 · RAM CPUpinned memoryG3 · NVMecục bộG3.5 / G4 · Từ xaNVMe/TCP blockfile song songS3 object over RDMACUDA copyNIXL · lớp truyền dữ liệuPOSIX, GPUDirect Storage, RDMA, plugin của hãng storageOffload: GPU → RAM → NVMe / storage từ xaOnboard: nạp lại KV vào GPU, có thể đọc thẳng từ đĩa qua GDS
Hình 2. Luồng KV cache trong KVBM. GPU và RAM trao đổi bằng CUDA copy; ghi xuống NVMe cục bộ hoặc storage từ xa đi qua NIXL. Tài liệu KVBM nêu giao diện G4 vẫn đang được hoàn thiện, nên tích hợp với từng hệ thống storage cần kiểm tra theo phiên bản.

Hai nguyên tắc sizing từ tài liệu KVBM: cache CPU nên ít nhất bằng cache GPU, và cache đĩa ít nhất bằng cache CPU, vì KVBM hoạt động kiểu ghi xuyên (write-through) qua các tầng. Ngoài Dynamo, LMCache là lớp quản lý KV cache mã nguồn mở tích hợp với vLLM, hỗ trợ nhiều backend như RAM, đĩa cục bộ, GPUDirect Storage, NIXL, S3 và Redis. SGLang dùng HiCache với backend NIXL.

5. Tái sử dụng KV cache thay vì tính lại prefill

Lợi ích của các tầng lưu trữ KV cache đến từ một phép so sánh: nạp KV đã lưu nhanh hơn bao nhiêu so với chạy lại prefill cho toàn bộ ngữ cảnh (Hình 3). Prefill ngữ cảnh dài rất tốn GPU, nên khi tỷ lệ tái sử dụng cao, chênh lệch rất lớn.

Tính lại prefill so với nạp KV cacheVÍ DỤ: NGỮ CẢNH 120K TOKEN · P95 TTFT · THỬ NGHIỆM CỦA CLOUDIANTính lại prefillkhông có KV cache bên ngoàiGPU chạy lại toàn bộ 120K token158,86 sNạp KV cacheS3 object qua RDMA7,59 s · nhanh hơn khoảng 20 lầnCấu hình do hãng công bố: 8× RTX PRO 6000, 2 × 200 Gb/s, vLLM + Dynamo KVBM, plugin NIXL RDMA, object 8 MiB, cache hit 100%.Kết quả thực tế phụ thuộc mô hình, tỷ lệ tái sử dụng ngữ cảnh và băng thông storage; cần kiểm chứng bằng PoC.
Hình 3. Thời gian ra token đầu tiên (TTFT) khi phải tính lại prefill so với khi nạp KV cache đã lưu, theo blog kỹ thuật của Cloudian (07/2026). Thanh thể hiện tỷ lệ thời gian; chấm chuyển động minh họa độ dài chờ của người dùng.

Một thiết kế kiểm chứng của Supermicro (08/2026) cho kết quả cùng chiều: chạy gpt-oss-120b trên máy chủ 4× RTX PRO 6000, đặt toàn bộ KV cache ở tầng G4 trên IBM Storage Scale ECE chạy trên các node storage Supermicro Petascale, TTFT của một request 130K token giảm từ 32,14 giây (không cache) xuống dưới 0,6 giây. NVIDIA cũng lưu ý offload hiệu quả nhất khi cache vượt bộ nhớ GPU và lợi ích tái sử dụng lớn hơn chi phí truyền dữ liệu. Nghĩa là nếu request hầu như không lặp lại ngữ cảnh, thêm tầng lưu trữ KV cache sẽ không đem lại nhiều.

6. Chọn tầng lưu trữ KV cache theo khối lượng công việc

Không phải hệ thống inference nào cũng cần đủ năm tầng. Ba câu hỏi dưới đây giúp xác định điểm dừng hợp lý (Hình 4).

Chọn tầng lưu trữ KV cacheKhôngCóKhôngCóKhôngCóNgữ cảnh có lặp lạigiữa các request?KV cần giữ lại vượtRAM của một node?Nhiều node GPU cầndùng chung ngữ cảnh?chat nhiều lượt, RAG chung prefix, agentsố phiên × độ dài ngữ cảnhđịnh tuyến request theo KV, agent dàiG1 + G2 là đủprefix cache trong GPU và RAM, chưa cần tầng riêngTăng G2: RAM lớn cho cache CPUcache CPU ít nhất bằng cache GPUThêm G3: NVMe cục bộ dung lượng lớnnhanh, chi phí thấp, nhưng gắn với một nodeThêm G3.5 / G4 dùng chungNVMe/TCP hoặc S3 over RDMA, giữ lịch sử phiên
Hình 4. Cách chọn tầng lưu trữ KV cache. Đây là gợi ý tham khảo, cần xác nhận bằng số liệu thực tế: tỷ lệ tái sử dụng ngữ cảnh, số phiên đồng thời, độ dài ngữ cảnh và số node GPU.
  • Chatbot hỏi đáp ngắn, ít lặp lại: G1 và G2 với prefix caching của engine là đủ.
  • Trợ lý tri thức nội bộ, RAG với tài liệu dùng chung: thêm G2 lớn và G3 NVMe cục bộ để giữ prefix của các tài liệu phổ biến.
  • Agent nhiều bước, nhiều node GPU, người dùng quay lại phiên cũ: cần tầng dùng chung để node nào nhận request cũng nạp được ngữ cảnh, kèm G4 để lưu lịch sử dài hạn.

7. Gợi ý kiến trúc storage cho inference nhiều tầng

Với hạ tầng inference nhiều node GPU, storage cho inference nên được thiết kế như một hệ nhiều tầng, mỗi tầng dùng sản phẩm phù hợp nhất thay vì một hệ thống làm mọi việc. Với danh mục CSC phân phối, một kiến trúc tham khảo gồm:

Kiến trúc tham khảo cho lưu trữ KV cache (cần sizing và PoC)
Tầng Thành phần gợi ý Điểm đáng chú ý
G1–G3 Máy chủ GPU Supermicro với RAM lớn và NVMe cục bộ Cấu hình RAM, NVMe theo nguyên tắc cache CPU ≥ cache GPU, cache đĩa ≥ cache CPU
Flash dùng chung Lightbits NVMe/TCP trên máy chủ Supermicro Block storage phân tán chạy trên Ethernet tiêu chuẩn, không cần NIC đặc biệt; Lightbits công bố độ trễ dưới mili giây và ra mắt Inferra, engine điều phối KV cache, tháng 09/2026
Object dùng chung Cloudian HyperStore với S3 over RDMA Có plugin RDMA cho NIXL đã thử nghiệm với Dynamo KVBM; Cloudian là đối tác của nền tảng NVIDIA CMX
Điều phối NVIDIA Dynamo KVBM hoặc LMCache, trên vLLM / TensorRT-LLM / SGLang Quyết định chính sách offload, định tuyến request về nơi có sẵn KV

Cách tiếp cận software-defined storage (SDS) giúp doanh nghiệp không bị khóa vào một hãng: tầng flash và tầng object chạy trên máy chủ x86 tiêu chuẩn, mở rộng độc lập theo nhu cầu. Lightbits Inferra là sản phẩm mới công bố; các thông số như số phiên đồng thời tăng tới 16 lần là con số của hãng chưa kèm điều kiện thử nghiệm, nên cần PoC trước khi đưa vào thiết kế. Lightbits hiện chưa nằm trong danh sách đối tác NVIDIA CMX công bố 01/2026. Tham khảo thêm RDMA cho S3 và giải pháp storage cho AI và HPC của CSC.

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

KV cache là gì và vì sao cần lưu trữ riêng?

KV cache là các cặp key, value mô hình tạo ra khi đọc ngữ cảnh. Khi ngữ cảnh dài và được dùng lại nhiều lần, KV cache vượt bộ nhớ GPU; lưu nó ở RAM, NVMe hoặc storage dùng chung giúp tránh tính lại prefill và giảm thời gian ra token đầu tiên.

Một token chiếm bao nhiêu dung lượng KV cache?

Tính bằng 2 × số lớp × số KV head × head_dim × byte. Với Llama 3.1 70B ở BF16 là khoảng 320 KiB/token, tức khoảng 40 GiB cho một phiên 128K token.

G1, G2, G3, G4 trong lưu trữ KV cache là gì?

Đây là cách NVIDIA Dynamo phân tầng: G1 bộ nhớ GPU, G2 RAM CPU, G3 NVMe cục bộ, G4 storage từ xa. NVIDIA bổ sung G3.5 là flash dùng chung qua Ethernet trong nền tảng CMX.

Khi nào cần tầng lưu trữ KV cache dùng chung?

Khi nhiều node GPU cần truy cập cùng ngữ cảnh, khi agent chạy nhiều bước hoặc người dùng quay lại phiên cũ, và tổng KV cần giữ vượt dung lượng RAM và NVMe của từng node.

Object storage S3 có đủ nhanh cho KV cache không?

Với RDMA, S3 có thể phục vụ KV cache cho ngữ cảnh dài. Trong thử nghiệm của Cloudian, nạp KV cache 120K token qua S3/RDMA cho P95 TTFT 7,59 giây so với 158,86 giây khi tính lại. Kết quả cần được kiểm chứng bằng PoC.

Đọc thêm về storage cho AI