Bỏ qua tới nội dung chính
OpenArchLabOpen Architecture — From Models to Systems

Giới thiệu bài lab

Lab DeepSeek-V4.1-Flash: chạy thử một lượt suy luận thu nhỏ từ 1A đến 6B bằng NumPy

Bài lab là một script Python dùng NumPy (thư viện tính toán trên mảng số) chạy ngay trong trình duyệt. Nó dựng lại cả 10 khối 1A đến 6B của sơ đồ kiến trúc ở kích thước thu nhỏ: vector 8 chiều thay vì 5120, 5 lớp thay vì 40. Rồi nó cho một prompt nhỏ [1, 2, 3, 4] chạy qua, trong đó vị trí 1 là một token ảnh, và in từng bảng số.

Đọc mô tả thì dễ gật đầu mà khó biết mình đã hiểu chưa. Khi thấy số thật, ví dụ tổng mỗi hàng và mỗi cột của ma trận Sinkhorn (phép chuẩn hóa lặp để ma trận 4×4 có tổng hàng và cột đều bằng 1) đúng 1.000000, hay sáu khoản bộ nhớ cộng ra 890 byte mỗi token, bạn tự kiểm chứng được cơ chế trong bài kiến trúc hoạt động thế nào.

Bài lab gồm

  • Sơ đồ 4 cột có khung tương tác ở đầu trang, để biết mỗi bảng số thuộc khối nào.
  • Bảng ánh xạ 1:1 cho từng mã 1A đến 6B: lab dựng gì và nhìn số nào để kiểm chứng.
  • Trình chạy trực tiếp với mã deepseek-v41-flash.py sửa được, và các nút Chạy cell, Dừng, Đặt lại.
  • Output khoảng 180 dòng chia thành các khối [1A] đến [6B], mỗi khối có lời giải thích, bảng số, Quan sát và Kết luận, rồi mục [KIỂM TRA & THỬ NGHIỆM] với ngưỡng sai số in rõ.
  • Trang bài đọc Lab đầy đủ (liên kết ở thanh công cụ) có hướng dẫn chi tiết và 4 bài tập kèm đáp án.

Làm xong, bạn có thể

  • Giải thích vì sao vector tại vị trí ảnh bị thay hẳn bằng vector gộp 3×3 (phủ đè, không cộng) và vì sao Engram bỏ qua cặp token chạm ảnh.
  • Giải thích vì sao KV chỉ nằm ở lớp nguồn (lớp 1 và 3 trong lab) mà lớp 2 và 4 vẫn attention được.
  • Đọc nhật ký của Compressor: prefill 4 token phát 2 latent, decode token lẻ trả None cho tới khi đủ cặp.
  • Tự cộng 256 + 64 + 480 + 32 + 10 + 48 ra 890 byte mỗi token.
  • Nói được lab chứng minh gì (cơ chế tính đúng ở cỡ nhỏ) và không chứng minh gì (chất lượng ngôn ngữ, tốc độ GPU).

Phạm vi: lab chỉ chạy suy luận (forward) của một mô hình thu nhỏ và không có bước huấn luyện; trọng số là số ngẫu nhiên cố định bằng seed 41, nên chạy lại cho ra đúng các số cũ, nhưng token đoán ra và điểm confidence không mang nghĩa ngôn ngữ. Muốn học huấn luyện, hãy xem khóa LLM Training (Text), vốn chỉ dạy mô hình văn bản; huấn luyện mô hình đa phương thức chưa có bài nào trên site.

Cách dùng bài lab

  1. Xem sơ đồ 4 cột ở đầu trang: rê chuột hoặc bấm vào khung để mở pop-over, các nút lọc theo cột làm mờ khung của những cột còn lại, và nút Ẩn khung overlay cho bạn đọc ảnh gốc.
  2. Đọc bảng ánh xạ bên dưới: cột thứ ba cho biết lab dựng gì ở mỗi mã, cột thứ tư cho biết nhìn số nào để kiểm chứng.
  3. Đọc cấu hình thu nhỏ ở đầu mã và đầu output: DEMO_PROMPT = [1, 2, 3, 4] là 4 mã token (mỗi mã chỉ định danh một mục trong bảng từ vựng, không tự mang nghĩa), IMAGE_POS = [1] đánh dấu token ảnh, hai bước decode thêm token 5 rồi 2.
  4. Với mỗi khối, dự đoán trước rồi bấm Chạy cell. Đọc theo thứ tự prefill (xử lý cả 4 token một lượt), decode (thêm từng token mới và dùng lại cache), rồi [KIỂM TRA & THỬ NGHIỆM].
  5. Đọc từng khối từ [1A] đến [6B] và đối chiếu số in ra với cột Cách đọc số liệu của bảng ánh xạ; đừng chỉ nhìn chữ PASS mà bỏ qua bảng số.
  6. Sửa một hằng số trong ô mã rồi chạy lại, ví dụ đổi HC_SINKHORN_ITERS từ 20 xuống 1 và xem sai lệch của ma trận Sinkhorn vượt ngưỡng 1e-6; nút Đặt lại khôi phục mã gốc.

Đọc kết quả đúng cách: PASS chỉ cho biết phép kiểm chứng cụ thể đó đạt ở cỡ nhỏ. Với trọng số chưa huấn luyện, argmax (token có điểm cao nhất) và confidence không phải dự đoán có nghĩa, đừng đọc chúng như vậy.

Sơ đồ luồng dữ liệu 4 cột · 10 thành phần (1A → 6B)

Kiến trúc DeepSeek-V4.1-Flash & Ánh xạ 1:1 với Bài Lab tổng hợp

Bắt đầu từ 1A ở góc dưới Cột 1 đi lên 1B → 2A, sang Cột 2 (3A → 3B → 3C), qua Cột 3 (4A ↔ 6A) và kết thúc ở Cột 4 (5A → 6B). Di chuột hoặc bấm vào từng khối để xem pop-over và đối chiếu với Lab.

Sơ đồ luồng dữ liệu 4 cột của kiến trúc DeepSeek-V4.1-Flash gồm 10 thành phần từ 1A đến 6B
1A1 · Input, Engram & 4× mHC Stream
E[ids]: [B, T, 5120] · Image Patches 3×3 → DeepSeek-ViT (2D-RoPE) + Aligner → [B, N_img, 5120]

1A · Multimodal Input & Aligner 3×3

Điểm xuất phát ở đáy Cột 1: nhúng token chữ E[ids] và gộp mỗi ô 3×3 patch ảnh từ DeepSeek-ViT (2D-RoPE) phủ đè vào vị trí ảnh.

Bắt đầu đọc sơ đồ từ góc dưới bên trái (1A): các token văn bản được tra bảng E[ids] thành khối vector [B, T, 5120] (ở lab là [4, 8]). Nếu đầu vào có ảnh, DeepSeek-ViT (32 lớp, xoay vị trí 2D-RoPE) mã hóa các patch rồi Aligner gộp mỗi cụm 3×3 patch thành 1 vector (giảm 9 lần số token ảnh) và ghi đè trực tiếp lên span <|deepseek_image|> trước khi đẩy luồng ẩn đi lên 1B.

BẢNG ÁNH XẠ 1:1 · MỖI KHỐI KIẾN TRÚC Ở TAB 01 ĐƯỢC DỰNG VÀ KIỂM CHỨNG TRONG LAB NHƯ THẾ NÀO?
Mã Thành phần ở Tab 01 (bấm để mở bài) Lab NumPy dựng gì (`deepseek-v41-flash.py`) Cách đọc số liệu & phép kiểm chứng
1A Đầu vào Văn bản & Hình ảnh (ViT + Aligner 3×3) ↗ Tra bảng E[ids] ra vector (4, 8) và gộp ô 3×3 patch ảnh phủ đè trực tiếp lên vị trí ảnh (IMAGE_POS = [1]). Đối chiếu vector tại vị trí 1 đã bị thay hoàn toàn bởi vector gộp 3×3 (phủ đè, không cộng).
1B Bộ nhớ có điều kiện Engram (N-gram XOR-Prime) ↗ Đánh dấu vị trí ảnh DEAD = -1, băm cặp 2-gram qua số nguyên tố tại lớp 1 và nhân cổng σ(signed_sqrt(dot)). Cặp (3, 4) rơi vào bucket 9 và cộng vào hc_pre của lớp 1; mọi cặp chạm vị trí ảnh 1 đều bị DEAD chặn.
2A Single-Pass mHC (4 làn Residual & Sinkhorn 4×4) ↗ Mở rộng trạng thái thành 4 làn (4, 4, 8), gộp hc_pre (4, 8) trước lớp con và trộn hc_post bằng ma trận Sinkhorn 4×4. Kiểm chứng (1): sau 20 vòng lặp Sinkhorn, tổng mỗi hàng và mỗi cột của comb bằng 1.000000 (sai lệch 2.22e-16 < 1e-6).
3A Causal Encoder–Decoder (CED: L0..2 → L3..4) ↗ 5 lớp thu nhỏ với COMPRESS_RATIOS = (0, 2, 2, 1, 1); L1 giữ KV nén của Encoder, L3 giữ Global KV dùng chung cho Decoder L4. Kiểm chứng (3): L2 đọc nguyên mảng KV của L1 và L4 đọc nguyên mảng Global KV của L3 mà không tính lại.
3B CSA2 Compressor (Gộp r=2 & 3 chế độ Full/Reindex/Reuse) ↗ Gộp mỗi cặp r = 2 token bằng softmax(wgate(x)); bước decode lẻ giữ tạm trong kv_state và trả None cho đến khi đủ cặp. Prefill 4 token phát 2 latent (end 1, 3); decode bước 1 (pos 4 lẻ) trả None, bước 2 (pos 5 chẵn) phát latent thứ 3 (end 5).
3C Ring SWA (2 slot) & Hierarchical Sparse Indexer ↗ Bộ đệm vòng window_kv_cache giữ 2 token gần nhất kết hợp Indexer chấm điểm relu(q·k)/√d × w chọn index_topk = 1 vị trí nén. Các lớp không phải nguồn tái sử dụng trực tiếp chỉ mục top-k do lớp nguồn (L1, L3) phát hành.
4A Multi-Head Latent Attention (MLA, Inverse RoPE & W_O nhóm) ↗ Q hạ chiều (8 → 4 → 2×4), KV 1 head (1×4) chỉ xoay RoPE 2 chiều cuối, thêm cột attn_sink, xoay ngược RoPE ở đầu ra và chiếu W_O 2 nhóm. Kiểm chứng (2) & (4): giữ nguyên tính nhân quả khi đổi token cuối và decode trên cache khớp tính lại toàn chuỗi (0.00e+00 < 1e-9).
5A Fine-Grained MoE (Cổng sqrtsoftplus, tách bias & SwiGLU Clamp) ↗ Điểm thô gate = √softplus(scores); chọn top-2/4 chuyên gia theo scores + bias (có bias_vl ở vị trí ảnh), nhân theo gate thô và kẹp SwiGLU [-10, 10]. Đổi bias_vl làm đổi chỉ số chuyên gia được chọn tại vị trí ảnh nhưng công thức tính trọng số nhân vẫn lấy từ gate thô.
6A Ngân sách KV 890 bytes/token (FP4 E2M1 & SWA Bounded Replay) ↗ Tính đơn giá bộ nhớ tại 4 lớp nguồn [2, 8, 14, 20] với tỷ lệ nén (2, 2, 2, 1), FP4 E2M1 + scale E4M3/16 cho KV và E8M0/32 cho Indexer K. Cộng chính xác 6 hạng mục đơn giá (256 + 64 + 480 + 32 + 10 + 48) ra đúng 890 B/token và đối chiếu tỷ lệ giảm với GQA/MHA.
6B Đầu ra LM Head & DSpark Speculative Decoding ↗ Gộp 4 làn mHC ra logits (4, 8), nối trung bình lớp đích (3, 4) vào DSpark kết hợp MarkovHead (hạng 4) và ConfidenceHead vẽ 3 token nháp. Quan sát chuỗi 3 token nháp được sinh bán tự hồi quy kèm điểm confidence của từng vị trí.

Trình chạy Lab trực tiếp · deepseek-v41-flash.py

deepseek-v41-flash.pyPYTHON
Python outputSẵn sàng.

Nguồn công bố & mã nguồn tham chiếu

Open Architecture — From Models to Systems OpenArchLab
Danh sách bài học (11)
  1. Lab tổng hợp DeepSeek-V4.1-Flash — chạy toàn trình 1A → 6B bằng NumPy
  2. 1A · Đầu vào đa phương thức · Embedding, DeepSeek-ViT và Aligner 3×3
  3. 1B · Bộ nhớ có điều kiện Engram · Tra cứu bảng băm N-gram 196B
  4. 2A · Single-Pass mHC · 4 làn Residual song song và chuẩn hóa Sinkhorn
  5. 3A · Kiến trúc CED 20+20 · Khối mã hóa nhân quả và KV toàn cục dùng chung
  6. 3B · Compressed Sparse Attention 2 · Nén gộp token và 3 chế độ Full, Reindex, Reuse
  7. 3C · Cửa sổ trượt vòng (Ring SWA) và Bộ chọn chỉ mục phân cấp (Hierarchical Indexer)
  8. 4A · Multi-head Latent Attention · latent K/V dùng chung, RoPE nửa sau và W_O nhóm
  9. 5A · MoE fine-grained · tách vai trò chọn và nhân ở cổng chuyên gia
  10. 6A · Ngân sách KV FP4 · 890 bytes mỗi token
  11. 6B · LM head và DSpark · vẽ token nháp trước khi verify