Thủ thuật
Giải mã DeepSeek-V4.1-Flash: Công nghệ nén KV Cache đột phá chỉ với 890 byte mỗi token
(giờ Việt Nam)
Tóm tắt AI
Bài viết phân tích kỹ thuật chuyên sâu về DeepSeek-V4.1-Flash, làm rõ cách thức CED và CSA2 tối ưu hóa bộ nhớ KV Cache, đồng thời đánh giá đây là bước nhảy vọt về kiến trúc tương đương thế hệ V5.
Bản dịch AI
TL;DR
Khi DeepSeek-V4.1 Flash được phát hành, tôi đã nghĩ đó có thể chỉ là một phiên bản lặp lại sau huấn luyện (post-training)... nhưng sau một thời gian sử dụng, tôi nhận thấy nó đạt tốc độ gần 420 Tokens/s, và sau đó Cui thông báo tất cả các mô hình DeepSeek-V4 Pro sẽ bị gỡ bỏ... đột nhiên tôi cảm thấy đây không phải là chuyện nhỏ... cho đến khi Báo cáo kỹ thuật DeepSeek-V4.1-Flash: Pushing the Limits of KV Cache Compression[1] được công bố đầy đủ, tôi mới nhận ra nó nên được gọi là DeepSeek-V5 Flash...
Như tiêu đề bài báo đã nêu, mục đích của DeepSeek-V4.1 Flash là đẩy việc nén KVCache đến giới hạn. Lý do chính là các Long-horizon Agent Workflows khiến ngữ cảnh (Context) ngày càng dài, trong khi các lệnh gọi công cụ (tool calls) khác nhau tạo ra áp lực tính toán tiền nạp (prefill) rất lớn. Áp lực lưu trữ của KVCache trong HBM và SSD ngoài là rất cao, tất cả đều là những lý do khiến việc mở rộng (Scaling) trở nên bất khả thi. Do đó, một loạt các tối ưu hóa đã được thực hiện trên kiến trúc mô hình, đặc biệt là trong việc nén KVCache và tối ưu hóa tính toán Prefill.
Cuối cùng, trên cơ sở duy trì khả năng hoàn thành tác vụ chất lượng cao của mô hình, KVCache được nén thêm 4 lần:
Ngoài ra, cách viết gốc của bài báo hơi phức tạp, đặc biệt là phần mô tả về CED. Trên thực tế, nếu chúng ta vẽ lại sơ đồ tập trung vào KVCache và kết hợp với góc nhìn kiến trúc máy tính, mọi thứ dường như trở nên rõ ràng ngay lập tức. Nó có thể được coi là một dạng kiến trúc Recursive Transformer, một cách sửa đổi Q và tái sử dụng KV trong quá trình đệ quy.
Về kiến trúc Recursive Transformer, bạn có thể tham khảo On the Future Transformer: Loops Are Not What You Need. Tiếp theo, chúng tôi sẽ thực hiện giải thích và phân tích chi tiết theo cấu trúc chương của báo cáo kỹ thuật. Bài viết này là phần đầu tiên trong loạt bài, phân tích chi tiết kiến trúc mô hình, và nội dung quan trọng hơn nằm ở Chương 3.
1. Tổng quan
1.1 Tại sao cần nén KVCache
Đầu tiên, báo cáo nêu rõ rằng trong những năm gần đây, các Long-horizon Agents đã khiến việc xử lý ngữ cảnh siêu dài trở thành khối lượng công việc ngày càng quan trọng của mô hình. Việc hỗ trợ loại khối lượng công việc này không chỉ đòi hỏi xử lý hiệu quả các chuỗi dài mà còn yêu cầu lưu trữ bền vững, tái sử dụng và truyền tải KVCache lớn. Do đó, quản lý KVCache đã trở thành một năng lực cơ bản của việc triển khai mô hình, đồng thời mang lại những thách thức đáng kể về tính toán, lưu trữ và truyền thông.
Sau đó, báo cáo giới thiệu kiến trúc DeepSeek-V4, xử lý bằng cách kết hợp Sparse Attention bao phủ toàn bộ ngữ cảnh với Sliding Window Attention (SWA) bao phủ cửa sổ cục bộ. Mặc dù những tiến bộ liên quan đến Sparse Attention đã giảm đáng kể chi phí tính toán cho việc xử lý chuỗi dài, nhưng lưu trữ bền vững và di chuyển dữ liệu dần trở thành những nút thắt cổ chai nổi bật hơn. Trong các ngữ cảnh dài, việc sử dụng Global KV Cache sẽ chiếm ưu thế, và việc được lưu trữ bền vững để tái sử dụng tiền tố (prefix reuse) sẽ chiếm dụng nhiều dung lượng bộ nhớ Host và dung lượng SSD, đồng thời đặt ra yêu cầu cao về băng thông kết nối cho việc di chuyển KVCache. Những điều này hạn chế thông lượng dịch vụ, tăng chi phí triển khai và cuối cùng cản trở việc triển khai và thúc đẩy các tác nhân (agents) hướng tới các khoảng tác vụ dài hơn và các kịch bản ứng dụng rộng hơn.
Do đó, việc giảm thêm dấu chân bộ nhớ đệm key-value là rất quan trọng để giảm bớt các nút thắt về lưu trữ và truyền thông cũng như giảm chi phí phục vụ ngữ cảnh dài. DeepSeek-V4.1-Flash là một mô hình đa phương thức hỗn hợp chuyên gia (multimodal mixture-of-experts) được thiết kế để nén KVCache mạnh mẽ hơn. DeepSeek-V4.1-Flash có quy mô tham số 552B, hỗ trợ đầu vào đa phương thức nguyên bản và hỗ trợ ngữ cảnh lên tới 1 triệu token. Nó áp dụng kiến trúc Causal Encoder-Decoder (CED), trong đó Global KVCache của Decoder thu được bằng cách chiếu các trạng thái ẩn cuối cùng của Encoder. Thiết kế này giúp mô hình kích hoạt 8B tham số mỗi token trong giai đoạn Prefill và 16B tham số trong giai đoạn Decoding, đặc biệt hiệu quả về chi phí cho các kịch bản Agent ưu tiên đầu vào. Mặc dù DeepSeek-V4.1-Flash lớn hơn đáng kể so với DeepSeek-V4-Flash, nhưng ở cùng độ dài chuỗi, dung lượng lưu trữ KVCache khi chạy của nó chỉ bằng khoảng 1/4 so với phiên bản sau, và dung lượng lưu trữ KVCache bền vững chỉ bằng khoảng 1/8. Ngoài ra, hiệu suất tổng thể của DeepSeek-V4.1-Flash vượt trội hơn DeepSeek-V4-Flash.
Những nén này cho KVCache chủ yếu đến từ việc tối ưu hóa chung về kiến trúc mô hình, độ chính xác của bộ nhớ đệm và chiến lược triển khai. Đối với DSv4, đây là mô hình với SWA làm xương sống và được tăng cường bởi global compressed attention (CSA/HCA). Dựa trên góc nhìn này, nhóm DeepSeek đã thực hiện một loạt các tối ưu hóa. Đầu tiên, đáng chú ý là họ đã từ bỏ cấu trúc tỷ lệ nén cao dựa trên khối như HCA, thay vào đó thực hiện nhiều tối ưu hóa hơn trên CSA, hình thành CSA2. Các tối ưu hóa chính nén KV Cache từ ba chiều:
Kết hợp với lượng tử hóa FP4, mức tăng lưu trữ của KV chính toàn cục và Indexer là khoảng 890 byte mỗi token.
1.2 Tổng quan về kiến trúc mô hình
Kiến trúc mô hình tổng thể như sau:
Bài báo báo cáo rằng các tham số xương sống là khoảng [giá trị], các tham số Engram là khoảng [giá trị], và các tham số được kích hoạt mỗi token cho prefill và decode lần lượt là khoảng [giá trị] và [giá trị]. Cốt lõi là sử dụng CED để giảm tính toán Prefill ngữ cảnh dài, sử dụng CSA2 để giảm chi phí attention và KV cache, sau đó kết hợp bộ nhớ điều kiện Engram với giải mã suy đoán DSpark.
Mô hình có tổng cộng [số lượng] lớp, chiều ẩn [kích thước], và kích thước từ vựng [kích thước]. Mỗi lớp chứa attention và MoE, được tổ chức thông qua các kết nối dư mHC. Toàn bộ cơ chế attention được chia thành hai mô-đun, Encoder và Decoder, tạo thành kiến trúc Causal Encoder-Decoder (CED). Chìa khóa của CED là KV toàn cục của Decoder đến từ biểu diễn cuối của Encoder, và các lớp Decoder tiếp theo chia sẻ các KV này. Do đó, hầu hết các vị trí của một prompt dài chỉ cần đi qua 20 lớp đầu tiên,
CSA2 chính trong đó áp dụng cơ chế cửa sổ trượt cục bộ + truy xuất thưa thớt toàn cục + tái sử dụng KVCache liên lớp. Kích thước cửa sổ trượt là 128, attention sử dụng Q heads, chia sẻ một KV latent [kích thước]-chiều, trong đó RoPE là [kích thước]-chiều và NoPE là [kích thước]-chiều. Q sử dụng phép chiếu hạng thấp (low-rank projection) với hạng [hạng], và phép chiếu đầu ra được chia thành các nhóm, mỗi nhóm có hạng [hạng]. Các tham số liên quan của toàn bộ mô hình như sau:
Trong đó:
Về CED và CSA2, chúng tôi sẽ giới thiệu chi tiết trong Chương 2. Cuối cùng, khi ngữ cảnh tăng lên, tính toán cần thiết của DeepSeek V4.1 Flash tăng gần như tuyến tính trong phạm vi 1M, và chi phí tính toán thấp hơn nhiều so với các thế hệ mô hình trước đó.
2. Kiến trúc mô hình
2.1 Kiến trúc đa phương thức
Đường dẫn thị giác của DeepSeek-V4.1-Flash có thể được tóm tắt là: mã hóa thị giác hoàn chỉnh trên lưới patch hình ảnh mịn hơn, sắp xếp lại các đặc trưng liền kề thành các vector rộng hơn và ít hơn, sau đó chiếu chúng vào không gian đầu vào của xương sống ngôn ngữ. Trong đó:
Toàn bộ quy trình xử lý được hiển thị trong hình dưới đây. ViT trước tiên hoàn thành tương tác nội bộ hình ảnh trên các đặc trưng độ phân giải cao, sau đó đưa chúng vào LLM thông qua sắp xếp lại không gian và chiếu nén.
Hình trên lấy một hình ảnh vuông 1008 x 1008 pixel sau khi tiền xử lý và đệm (padding) làm ví dụ:
Tiền xử lý hình ảnh: Cần lưu ý rằng nó không thực hiện nhận dạng văn bản như OCR. Sau khi tệp được tải, nó được giải mã trực tiếp qua load_image và chuyển đổi sang RGB. Sau đó, nó kiểm tra diện tích pixel tối thiểu. Nếu diện tích hình ảnh gốc dưới [giá trị], nó sẽ tăng tỷ lệ kích thước mục tiêu tương ứng. Sau đó, nó căn chỉnh hai cạnh lên bội số của vision_patch_size=14, và lấp đầy các vùng trống đã căn chỉnh bằng màu xám RGB. Và lưu ý rằng nó kiểm tra xem phạm vi hình ảnh mở rộng có vượt quá ngân sách vision_max_n_token=1024 hay không. Khi vượt quá ngân sách, nó tính toán lại một canvas mục tiêu nhỏ hơn dựa trên tỷ lệ khung hình.
Gọi kích thước pixel sau tiền xử lý là [kích thước], độ dài cạnh patch là [độ dài], và hệ số hợp nhất không gian là [hệ số]. Mã nguồn trước tiên làm cho độ dài cạnh pixel thành một bội số nguyên của [giá trị]:
Aligner cho phép lưới patch không chia hết cho 3, vì nó đệm các số không ở bên phải và bên dưới của lưới đặc trưng:
Lưới thị giác hợp nhất và số lượng token nội dung của nó là:
Và những gì hàm tiền xử lý cục bộ thực sự lập ngân sách là:
Trong đó, một IMAGE_NEW_LINE cho mỗi hàng, cộng với IMAGE_START và IMAGE_END.
Đối với "hỗ trợ độ phân giải đầu vào lên tới khoảng 1344 × 1344 pixel" của bài báo, về cơ bản nó bị giới hạn bởi vision_max_n_token=1024. Ví dụ, theo [giá trị] của bài báo, [giá trị], và sau đó số lượng token sau khi lấy mẫu xuống (downsampling) tiếp theo là 1024, nhưng xét đến việc thêm các thẻ trong phạm vi sẽ vượt quá ngân sách vision_max_n_token=1024, hình ảnh này sẽ được thu nhỏ xuống [kích thước], tức là [số lượng] token, cộng với 31 thẻ NL và 2 thẻ START/END, tổng cộng là 994 token.
Và các độ phân giải màn hình phổ biến như [độ phân giải] sẽ được thu nhỏ xuống [kích thước], tổng cộng là 968 token.
Sau đó, hình ảnh được chuẩn hóa theo các kênh RGB như sau:
Tiếp tục với hình ảnh làm ví dụ, mã nguồn sau đó chia hình ảnh thành các khối không chồng lấp. Nếu tọa độ hàng-cột của một khối hình ảnh là [tọa độ], và tọa độ nội khối là [tọa độ], giá trị nó lấy ra là [giá trị]. Nó trước tiên duyệt qua các cột trong một hàng, sau đó đi vào hàng tiếp theo, thu được các khối hình ảnh với hình dạng [hình dạng]. Việc chia thành các khối viết lại các tọa độ không gian thành số khối và tọa độ nội khối.
Patch Embedding: Tất cả các số của mỗi khối, sau đó làm phẳng mỗi khối, và tất cả các khối chia sẻ cùng một lớp tuyến tính với bias. Cuối cùng, một ma trận được thu được. Lưu ý rằng bài báo giải thích lý do tại sao phép tích chập (convolution) cần được thay thế bằng phép chiếu tuyến tính, lý do chính là để đảm bảo khả năng tương thích với trình tối ưu hóa Muon.
DeepSeek-ViT: Tiếp theo, 32 lớp xử lý ViT được thực hiện để cung cấp cho chúng ngữ cảnh nội bộ hình ảnh. Cả đầu vào và đầu ra cuối cùng đều là [kích thước]. Mỗi lớp trước tiên thực hiện RMSNorm trên các đặc trưng hiện tại, sau đó tính toán attention và cộng lại phần dư; sau đó chuẩn hóa lại, thực hiện mạng chuyển tiếp SwiGLU, và cộng lại phần dư. Sau 32 lớp, có thêm một RMSNorm ở cuối tháp thị giác.
Lấy attention của một trong các lớp làm ví dụ, một lớp tuyến tính trước tiên tạo ra Q, K, V từ các đặc trưng đã chuẩn hóa, với tổng chiều rộng đầu ra là [chiều rộng]. Ba thành phần này lần lượt được tổ chức thành [cấu trúc], tức là 16 đầu (heads), mỗi đầu 64 chiều. Trước khi tính điểm, 2D RoPE xoay Q và K theo tọa độ hàng-cột ban đầu, và không xoay V. Attention giải quyết giao tiếp chéo vị trí, trong khi SwiGLU tiếp theo chủ yếu thực hiện chuyển đổi kênh trong mỗi vị trí. Nó trước tiên chiếu tới [kích thước] chiều và chia thành hai nhánh, áp dụng SiLU cho nhánh cổng (gating branch), nhân nó theo phần tử với nhánh kia, và sau đó chiếu ngược lại 1024 chiều. Bằng cách này, một lớp đồng thời chứa hai loại xử lý: "lấy thông tin từ các vị trí khác" và "tổ chức lại các đặc trưng tại vị trí cục bộ".
Sắp xếp lại không gian: Nó tải 9 đặc trưng liền kề vào cùng một vector rộng, và áp dụng lấy mẫu xuống. Cách tiếp cận cụ thể như sau:
MLP 2 lớp: Được sử dụng để tạo token cho LLM, căn chỉnh hidden_dim = 5120.
Bài viết được AI dịch và tổng hợp tự động từ Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung). Liên kết bài gốc ở phía trên. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.