Bài báo · arXiv 2609.18063
Nửa còn lại của bức tường bộ nhớ: Phục vụ mô hình MoE 35B từ SSD với dự đoán định tuyến được huấn luyện
The Other Half of the Memory Wall: Serving 35B MoEs from SSD with Trained Routing Prediction
Tóm tắt trong ba dòng
- 🎯 Các MoE lớp 35B đòi hỏi ~19,5 GB ngay cả ở định dạng int4, vượt quá RAM phổ thông, trong khi việc offload sang SSD thông thường bị nghẽn do độ trễ đĩa vì định tuyến tầng phụ thuộc vào đầu ra tầng trước.
- 🔧 Edge0 stream các expert của MoE từ SSD bằng prerouter trên mỗi tầng giúp dự đoán định tuyến trước một token, áp dụng nguyên lý 'dự đoán làm định tuyến', kết hợp với recovery LoRA song song chưa hợp nhất được chưng cất trên đường dẫn student.
- 📈 Phục vụ một MoE 35B ở tốc độ ~20,4 tok/s trong mức bộ nhớ đỉnh 2,9 GiB trên Mac mini M4 Pro 24 GB, chỉ kém trung bình 3,9 điểm benchmark so với teacher fp16.
Tóm tắt
Suy luận Mixture-of-experts (MoE) trên phần cứng phổ thông bị giới hạn bởi bộ nhớ trọng số: một mô hình lớp 35B chiếm 19,5GB ở định dạng 4-bit, và độ thưa (sparsity) chỉ giảm lượng tính toán trên mỗi token chứ không giảm số byte cần lưu trữ. Việc offload đơn thuần sang SSD không tự giải quyết được vấn đề, vì các chuyên gia (expert) của tầng N+1 phải được chọn trước khi có đầu ra của tầng N, khiến các thao tác đọc không thể bắt đầu đủ sớm để ẩn sau quá trình tính toán. Chúng tôi giới thiệu Edge0, một engine suy luận MoE dạng streaming thu hẹp khoảng cách này bằng một prerouter: một head trên mỗi tầng sẽ dự đoán định tuyến của tầng tiếp theo trước một token, và dự đoán này được sử dụng trực tiếp làm định tuyến, do đó tập hợp chuyên gia được chuẩn bị sẵn hoàn toàn trùng khớp với tập hợp được định tuyến và không có gì bị bỏ rơi. Một recovery LoRA chưa hợp nhất (unmerged), được huấn luyện trên đường dẫn student, bù đắp chất lượng bị mất do lượng tử hóa int4 và việc thay thế định tuyến. Trên một máy đơn 24GB, Edge0 phục vụ một MoE 35B ở tốc độ 20 tok/s trong phạm vi 3GiB bộ nhớ hoạt động đỉnh, trung bình chỉ kém vài điểm so với teacher fp16 trên năm benchmark công khai. Phiên bản 8B cũng chạy trên cùng một framework; framework, checkpoint và adapter đều là mã nguồn mở.
Tóm tắt gốc (tiếng Anh)
Mixture-of-experts (MoE) inference on consumer hardware is bounded by weight memory: a 35B-class model is 19.5GB at 4-bit, and sparsity shrinks the compute per token, not the bytes that must be held. Naive offloading to SSD does not help on its own, because layer N+1's experts must be chosen before layer N's output exists, so the reads cannot start early enough to hide behind compute. We present Edge0, a streaming MoE inference engine that closes the gap with a prerouter: a per-layer head predicts the next layer's routing one token ahead, and the prediction is consumed as the routing itself, so the staged expert set equals the routed set and nothing is dropped. An unmerged recovery LoRA, trained on the student path, pays back the quality lost to int4 quantization and routing replacement. On a single 24GB machine, Edge0 serves a 35B MoE at 20tok/s inside 3GiB of peak active memory, within a few points of its fp16 teacher on average across five public benchmarks. An 8B tier runs on the same framework, and the framework, checkpoints, and adapters are open source.
Hướng dẫn đọc
Vấn đề và động lực
Các mô hình Mixture-of-Experts (MoE) mở rộng tổng số tham số trong khi vẫn giữ số tham số kích hoạt ở mức thấp trên mỗi token (ví dụ: kích hoạt ~3B tham số mỗi token trong mô hình 35B). Tuy nhiên, việc suy luận trên phần cứng phổ thông vẫn bị hạn chế bởi bộ nhớ trọng số tĩnh: một MoE 35B đòi hỏi khoảng 19,5 GB ngay cả khi được lượng tử hóa sang int4. Trên một máy 24 GB, điều này chiếm trọn không gian của hệ điều hành và KV cache, dẫn đến hiện tượng phân trang bộ nhớ (memory paging) nghiêm trọng và làm giảm thông lượng giải mã (ví dụ: chỉ đạt 3,9 tok/s đối với mô hình nằm hoàn toàn trong RAM trên Mac mini M4 Pro).
Việc offload trọng số expert sang SSD giúp giảm dung lượng bộ nhớ, nhưng việc tải theo yêu cầu (on-demand) theo cách thông thường lại tạo ra điểm nghẽn tuần tự hóa cứng: việc lựa chọn expert cho tầng phụ thuộc vào đầu ra của tầng . Các thao tác đọc SSD không thể bắt đầu đủ sớm để ẩn sau quá trình tính toán, khiến quá trình thực thi bị đình trệ do độ trễ đĩa một lần trên mỗi tầng cho mỗi token.
Ý tưởng cốt lõi
- SSD đóng vai trò là tầng lưu trữ trọng số (Weight Tier): Trọng số của các expert MoE được giữ trên SSD ở định dạng int4 và được ánh xạ bộ nhớ (
mmap) vào một vùng đệm streaming nhỏ gọn. Bộ nhớ đỉnh được xác định bởi tập làm việc (working set) đang hoạt động thay vì tổng kích thước tham số của mô hình. - Dự đoán làm định tuyến (Prediction as Routing): Thay vì chờ tầng hoàn thành, một prerouter trên mỗi tầng sẽ dự đoán định tuyến của tầng trước hẳn một token. Quan trọng nhất, mô hình xem dự đoán này chính là định tuyến thực tế tại thời điểm giải mã. Điều này loại bỏ hoàn toàn việc bỏ rơi token (dropped tokens) hoặc tải dự phòng (fallback loads) theo thiết kế, vì tập hợp được chuẩn bị sẵn hoàn toàn trùng khớp với tập hợp được định tuyến.
- Recovery LoRA chưa hợp nhất (Unmerged Recovery LoRA): Lượng tử hóa 4-bit và định tuyến xấp xỉ gây ra suy giảm chất lượng. Edge0 huấn luyện một adapter low-rank trên đường dẫn định tuyến của student thông qua kỹ thuật chưng cất (distillation). Vì việc hợp nhất LoRA vào mô hình gốc int4 rồi lượng tử hóa lại sẽ xóa sạch hầu hết phần delta (chỉ còn giữ lại 18% ở cấp độ logits), Edge0 phục vụ adapter dưới dạng một nhánh delta song song chưa hợp nhất với chi phí tính toán không đáng kể.
Phương pháp
Kiến trúc Prerouter Head
Mỗi prerouter head thuộc sở hữu của tầng chạy tại token trên đầu ra layer norm sau attention và dự đoán định tuyến cho tầng tại token . Các đặc trưng đầu vào nối ghép trạng thái ẩn với hai vector định tuyến one-hot top- (của token hiện tại và token trước đó):
Đối với phiên bản 35B, kích thước này là . Head tính toán:
trong đó là đường dẫn phần dư tuyến tính (linear residual path) được khởi động từ trọng số router của tầng tiếp theo.
Thực thi Adapter chưa hợp nhất
Tầng MoE được phục vụ vẫn giữ nguyên các byte gốc đã lượng tử hóa và chạy delta LoRA song song:
Huấn luyện ba giai đoạn
- Chưng cất Head (Head Distillation): Các prerouter head được huấn luyện để bắt chước quyết định của router thực tế ở tầng tiếp theo của teacher trong khi vẫn đóng băng phần còn lại của mạng.
- SFT trên đường dẫn Student (Student-Path SFT): Các recovery LoRA adapter (được gắn vào các phép chiếu attention, linear-attention và shared-expert, nhưng không gắn vào các streaming expert) được huấn luyện bằng văn bản do teacher tạo ra, đồng thời buộc định tuyến phải đi qua prerouter.
- Chưng cất On-Policy (On-Policy Distillation): Student tạo văn bản dưới sự thực thi của prerouter, teacher gốc fp16 chấm điểm các văn bản được tạo, và các tham số LoRA được tối ưu hóa thông qua phân kỳ Kullback–Leibler ngược với mục tiêu xác suất top- có xét đến phần đuôi (tail-aware).
Kết quả
- Thông lượng & Bộ nhớ (Mac mini M4 Pro, 24 GB):
- edge0-35b (): Đạt tốc độ giải mã 20,4 tok/s chỉ với 2,9 GiB bộ nhớ hoạt động đỉnh từ checkpoint int4 19,5 GB (so với 3,9 tok/s và 18,2 GiB khi nạp toàn bộ vào RAM).
- edge0-8b (): Đạt tốc độ giải mã 28,0 tok/s trong mức bộ nhớ đỉnh 1,5 GiB.
- Gia tốc nạp trước (MacBook M2, 16 GB):
- So với streaming theo yêu cầu thuần túy phản ứng (reactive), cơ chế prefetch bằng prerouter trước 1 token tăng tốc độ giải mã thêm +80% đến +84% trên các độ rộng định tuyến (: từ 4,8 lên 8,6 tok/s; : từ 3,5 lên 6,4 tok/s; : từ 1,8 lên 3,3 tok/s).
- Thời gian luồng chính bị nghẽn do nạp (blocked load time) giảm đáng kể (ví dụ: từ 244,0 ms xuống 101,9 ms mỗi bước ở ).
- Chất lượng mô hình (OpenCompass):
- Trên năm benchmark (AIME 2026, HumanEval, GPQA-Diamond, MMLU-Pro, IFBench), edge0-35b đạt điểm trung bình 79,2 so với 83,2 của mô hình gốc Qwen3.6 fp16 (khoảng cách 3,9 điểm).
- edge0-8b đạt 69,9 so với 72,7 của mô hình gốc Ling 3.0 tiny fp16 (khoảng cách 2,8 điểm).
Hạn chế và câu hỏi mở
- Đồng thời khi phục vụ (Serving Concurrency): Edge0 hoạt động tuần tự hóa FIFO cho các yêu cầu đơn lẻ; việc xử lý theo lô (batching) sẽ làm thay đổi tập làm việc của expert và động lực học caching theo những cách mà các hồ sơ luồng đơn chưa giải quyết được.
- Chi phí xây dựng đồ thị của CPU: Tốc độ giải mã bị giới hạn bởi chi phí phụ trợ của framework phía CPU (~44 ms/bước khi xây dựng đồ thị MLX trên 40 tầng), điều mà các tối ưu hóa SSD không thể giảm bớt.
- Giảm chất lượng ở tác vụ suy luận: Sự suy giảm hiệu năng tập trung chủ yếu vào các benchmark suy luận phức tạp (ví dụ: giảm 6,1 điểm trên AIME đối với 35B và 10,0 điểm đối với 8B).
- Phụ thuộc vào phần cứng: Mức tăng thông lượng tương đối của prerouter phụ thuộc vào độ trễ của đĩa và sẽ giảm đi khi bộ nhớ đệm trọng số đã nóng (warm cache) hoặc khi chạy trên các tầng lưu trữ cực nhanh.
Thuật ngữ chính
- Edge0
- Một engine suy luận MoE dạng streaming phục vụ các mô hình từ SSD bằng cách gối đầu thao tác đọc lên quá trình tính toán thông qua dự đoán định tuyến và bù đắp suy giảm chất lượng bằng recovery LoRA chưa hợp nhất.
- prerouter
- Một neural head nhẹ trên mỗi tầng giúp dự đoán quyết định định tuyến của tầng N+1 trước một token bằng cách sử dụng trạng thái ẩn của tầng N và lịch sử định tuyến gần đây.
- prediction-as-routing
- Nguyên lý thiết kế trong đó tập hợp expert được prerouter dự đoán sẽ được thực thi trực tiếp làm định tuyến thực tế của tầng tại thời điểm giải mã, loại bỏ việc bỏ rơi token hoặc hình phạt do đoán trượt khi chạy.
- recovery LoRA
- Một adapter rank thấp được huấn luyện thông qua chưng cất trên đường dẫn preroute của student và được thực thi như một nhánh song song chưa hợp nhất để bù đắp các lỗi do lượng tử hóa int4 và xấp xỉ định tuyến.
- staged decode
- Một chế độ thực thi expert sử dụng bộ đệm kép với các slot cố định, trong đó các chỉ số expert được ánh xạ qua một bảng slot trên GPU để tránh việc cấp phát bộ nhớ trên từng bước.
- incremental sticky-slot stack (incr_stack)
- Một cơ chế cập nhật tại chỗ các tensor expert xếp chồng liên tục, chỉ ghi lại các slot expert bị thay đổi mỗi bước thay vì phải lắp ráp lại toàn bộ các tensor expert.
- unmerged delta
- Việc thực thi một LoRA adapter song song với các trọng số cơ sở đã lượng tử hóa thay vì hợp nhất chúng vào trọng số, ngăn chặn sự mất mát khả năng thích ứng chi tiết trong quá trình tái lượng tử hóa.
- memory wall (bức tường bộ nhớ)
- Sự chênh lệch giữa thông lượng bộ xử lý và băng thông/dung lượng DRAM, mà trong việc phục vụ LLM cục bộ được chia thành trạng thái KV-cache động và lưu trữ trọng số mô hình tĩnh.
Câu hỏi thường gặp
Tại sao Edge0 lại sử dụng dự đoán làm định tuyến thay vì coi các dự đoán là gợi ý?
Việc coi các dự đoán là gợi ý đòi hỏi các cơ chế dự phòng khi chạy hoặc phải bỏ rơi token khi dự đoán sai. Sử dụng trực tiếp dự đoán làm định tuyến đảm bảo tập hợp expert được chuẩn bị sẵn luôn khớp với tập hợp được định tuyến, chuyển chi phí xấp xỉ sang quá trình huấn luyện ngoại tuyến nơi quá trình chưng cất sẽ phục hồi lại chất lượng.
Tại sao recovery LoRA được phục vụ ở dạng chưa hợp nhất thay vì tích hợp vào trọng số 4-bit?
Các delta trọng số của LoRA có RMS khoảng 10^-3, nhỏ hơn kích thước bước nhảy của lượng tử hóa 4-bit. Việc hợp nhất và lượng tử hóa lại sẽ xóa sạch phần lớn tác dụng của adapter, chỉ còn giữ lại 18% ở cấp độ logits, trong khi một delta song song chưa hợp nhất duy trì được 100% độ chính xác.
Tại sao Edge0 lại dự đoán trước một token thay vì dự đoán trong cùng một token?
Việc dự đoán trong cùng một token đòi hỏi phải xả luồng xử lý (pipeline flush) GPU trên từng tầng, mất từ 30 đến 100 ms mỗi bước—lâu hơn cả thời gian nạp mà nó cố gắng che giấu. Đi trước một token hoàn chỉnh cho phép tất cả các tầng được dàn dựng được dự đoán trong một lần flush duy nhất theo batch, tạo ra toàn bộ thời gian tính toán của một bước giải mã để che giấu I/O của SSD.
Làm thế nào mà Edge0 giải mã nhanh hơn so với baseline nằm hoàn toàn trong bộ nhớ trên máy 24 GB?
Một mô hình 19,5 GB nằm hoàn toàn trong RAM tiêu tốn 18,2 GiB RAM, khiến hầu như không còn chỗ cho hệ điều hành và KV cache, gây ra hiện tượng phân trang bộ nhớ hệ điều hành nghiêm trọng và giảm tốc độ giải mã xuống 3,9 tok/s. Edge0 stream các expert từ SSD trong mức bộ nhớ hoạt động đỉnh ~2,9 GiB, tránh hoàn toàn áp lực bộ nhớ hệ điều hành và chạy ở tốc độ 20,4 tok/s.
Phần giải thích trên trang này do AI viết dựa trên bài báo và có thể có sai sót. Hãy đọc bài báo gốc để biết chi tiết.