𝗟𝘂̛𝗼̛̣𝗻𝗴 𝘁𝘂̛̉ 𝗵𝗼́𝗮 𝗞𝗩 𝗖𝗮𝗰𝗵𝗲 𝗰𝗵𝗼 𝗰𝗮́𝗰 𝗟𝗟𝗠 𝗰𝗵𝗮̣𝘆 𝘁𝗿𝗲̂𝗻 𝘁𝗵𝗶𝗲̂́𝘁 𝗯𝗶̣ (𝗢𝗻-𝗗𝗲𝘃𝗶𝗰𝗲 𝗟𝗟𝗠𝘀)

Chạy Llama 3.2 3B trên một thiết bị Android với 2 GB RAM là một thử thách lớn. Hầu hết các nhà phát triển chỉ tập trung vào trọng số mô hình (model weights). Đây là một sai lầm. "Kẻ sát nhân" bộ nhớ thực sự chính là KV cache.

KV cache tăng dần khi bạn trò chuyện. Nếu bạn sử dụng độ chính xác FP16 tiêu chuẩn, cache sẽ ngốn hàng trăm megabyte. Điều này khiến ứng dụng của bạn bị crash chỉ sau vài lượt hội thoại.

Bạn có thể khắc phục điều này bằng ba bước cụ thể.

  1. Sử dụng Lượng tử hóa Độ chính xác Hỗn hợp (Mixed-Precision Quantization) Key và value không cần cùng một mức độ chính xác. Key cache xử lý tốt độ chính xác thấp, nhưng value cache thì không.

Cách tiếp cận này giúp giảm 62% kích thước cache của bạn. Với ngữ cảnh 2048 token, bạn sẽ giảm từ 224 MB xuống còn 84 MB. Điều này diễn ra mà không cần thay đổi trọng số mô hình.

  1. Triển khai Cơ chế Loại bỏ Cửa sổ Trượt (Sliding Window Eviction) Bạn không thể giữ mọi token trong bộ nhớ hoạt động. Hãy sử dụng một cửa sổ trượt để chỉ giữ lại 1536 token gần nhất. Giữ lại 64 token đầu tiên làm mốc (anchors) để bảo toàn system prompt.

  2. Sử dụng Flash Spilling Khi các token rời khỏi cửa sổ trượt, hãy chuyển chúng sang bộ nhớ flash. Sử dụng các tệp ánh xạ bộ nhớ (memory-mapped files) trên Android. Bộ nhớ UFS 4.0 hiện đại đủ nhanh để nạp (page) dữ liệu này ngược lại bộ nhớ mà không gây trễ.

Kết quả thu được rất đáng kể. Trên Snapdragon 8 Gen 3:

Tránh những sai lầm sau:

Hãy lập ngân sách bộ nhớ trước khi xây dựng các tính năng.

Nguồn: https://dev.to/software_mvp-factory/kv-cache-quantization-for-on-device-llms-kf