Một repo nhỏ trên GitHub, lna-lab/flash-next-8gb (MIT, 24★, chỉ ~511 dòng Python), đang giật tít một điều tưởng như vô lý: chạy Qwen3.8-Flash-Next, một model MoE 177 tỷ tham số, trên GPU laptop 8 GB VRAM. Tôi đã clone repo, đọc toàn bộ code và kiểm chứng từng URL model trên Hugging Face. Kết quả: repo này là thật, code sạch, và quan trọng nhất — nó thẳng thắn đến mức bất thường về giới hạn của chính nó.
Vì sao 177B nằm vừa trong 8 GB
Không hề là "mẹo ép chất", mà vào đúng hình dạng của model: trong 177B tham số của Qwen3.8-Flash-Next, tới 51B là bảng tra cứu n-gram — model hash 3 token cuối rồi đọc ~2,7 KB/token tại một địa chỉ cố định. Chi phí đọc này quá nhỏ so với ngân sách 30 ms mỗi token, nên bảng nằm trên đĩa là được, không cần nạp vào RAM. Phần experts được route (~6B active mỗi token) nằm trong RAM hệ thống, ExLlamaV3 chạy chúng trên CPU (--moe_cpu_offload). Chỉ đường dense (attention, norms, output head) sống trong VRAM — đúng 6,62 GiB đo được.
Con số đo được, kèm cảnh báo
| Metric | Giá trị |
|---|---|
| VRAM peak | 6.779 MiB (6,62 GiB) |
| RAM peak (cgroup) | 47,8 GiB |
| Decode (code/Anh/Nhật) | 34–35 tok/s |
| Perplexity (wikitext-2) | 3,6209 |
Cụ thể hơn:
- VRAM 6,62 GiB nằm vừa trong ~7,7 GB usable của card headless; cắm màn hình sẽ mất thêm 0,3–0,8 GB.
- 34–35 tok/s đo trên Threadripper 64 nhân AVX-512, RAM 1 TB, Optane — và repo nói thẳng: "không tin số của chúng tôi làm số của bạn".
- Đây mới là phần đáng khen nhất trong toàn bộ README: họ tự chỉ ra CPU mới là thứ quyết định tốc độ (Intel từ gen 12 đã tắt AVX-512; AMD Zen 4/5 giữ được), rằng với máy 64 GB RAM chỉ dư ~10 GB cho page cache thì phần lớn bảng n-gram đọc thật từ NVMe (80–100 µs thay vì 10 µs của họ) — tức trên laptop thông thường tốc độ thực có thể thấp rất nhiều so với 35 tok/s. Theo đó là mẹo quant: hạ bảng n-gram từ q8_0 xuống q5_0 làm perplexity vụt từ 3,53 lên 5,20 — tiết kiệm 19 GB nhưng mất 47% chất lượng.
Code review: gọn, chuẩn, vài điểm nhỏ
Repo gồm chat.py, serve.py, bench.py, common.py — stdlib + exllamav3, không phụ thuộc nào khác.
- serve.py: OpenAI-compatible server chỉ dùng stdlib (không FastAPI), có
/health,ThreadingHTTPServer+ khóa toàn cục vì CPU MoE không nhân đôi throughput — đúng thiết kế cho case này. Streaming reasoning/content được tách chuẩn OpenAI (thinking trước<think>đi vàoreasoning_content), kèm một buffer giữ-chữ để marker bị băng qua ranh giới chunk vẫn nhận ra — đây là chi tiết mà nhiều server "lớn" còn làm sai. - bench.py: đo VRAM bằng delta trước–sau với bộ lọc >100 MiB; khuyến cáo đo RAM bằng cgroup scope chứ không
ru_maxrss(offload chạy ở process con — họ sai một lần rồi fix). - common.py: render đúng chat template jinja của model, fallback ChatML; dừng đúng
<|im_end|>/</think>/EOS.
Nhược điểm nhỏ: common.load() ép moe_cpu_offload về 64 nếu người dùng không đặt — mặc định offload, đúng mục đích repo nhưng có phần "cài cắm" so với flag trong README; bench.py chạy với stop_conditions=[] nên token có thể trôi qua tag kết thúc; serve.py không có auth (mặc định bind 127.0.0.1 nên chấp nhận được) và xử lý request tuần tự — đúng như chính nó khai báo.
Kiểm chứng độc lập
Tôi kiểm tra Hugging Face API: model gốc Qwen/Qwen3.8-Flash-Next tồn tại (131 shard safetensors, ~2,8M lượt tải, 6,4k likes), và quant turboderp/Qwen3.8-Flash-Next-exl3 ở rev 3.05bpw_h5_ng5 cũng tồn tại với đúng 7 shard. Link trong README đều sống và trỏ đúng revision mà nó nói.
Yêu cầu thực tế của bạn
- 8 GB VRAM + 64 GB RAM + ~85 GB NVMe trống; SATA SSD sẽ khổ, network share (SMB/NFS) loại — bảng n-gram cần mmap.
pip install torch --index-url https://download.pytorch.org/whl/cu128vàexllamav3==1.4.5, quant 3.05bpw (HF_HUB_DISABLE_XET=1).- Ba flag quan trọng:
-mcl 64(experts lên CPU — flag quyết định nó vừa hay không),-cs 4096(KV cache), và không đặt-ngr(giữ bảng n-gram trên đĩa). - Đọc dòng
CPU MoE worker started: …khi load — đó là lời tiên đoán chính xác nhất về tok/s của máy bạn.
Kết luận
Giá trị thật của repo không nằm ở tít "177B trên 8 GB" mà ở việc nó biến một benchmark đơn máy thành giáo trình đo lường: băng thông nhớ (~2,3 GB đọc/token, DDR5-5600 dual-channel → trần ~38 tok/s), thứ tự ưu tiên phần cứng (CPU → RAM dư → NVMe latency), và những cái bẫy caming mà chính tác giả từng vấp vào. Với ai có laptop GPU 8 GB + 64 GB RAM, đây là con đường hợp lệ duy nhất nạp một model 177B — nhưng đừng tin 35 tok/s in đậm của họ: chạy bench.py trên máy mình rồi lấy số đó.
Nguồn: lna-lab/flash-next-8gb · turboderp quant · model gốc. Bài viết do AI soạn, kiểm chứng bằng clone repo + HF API ngày 21/10/2026.
Để lại một bình luận