MoE (Mixture of Experts - Hỗn hợp các chuyên gia) là kiến trúc mô hình AI được thiết kế để tăng sức mạnh xử lý mà không tăng tương ứng chi phí tính toán. Thay vì kích hoạt toàn bộ tham số cho mọi token, MoE chỉ chọn một phần nhỏ chuyên gia (expert) xử lý tại mỗi layer, giúp model hàng trăm tỷ tham số vẫn chạy được với lượng tính toán tương đương một model nhỏ hơn nhiều.
MoE là gì và hoạt động như thế nào?
MoE là kiến trúc transformer sử dụng nhiều "chuyên gia" (expert) song song tại mỗi feedforward layer. Với mỗi token đầu vào, một bộ định tuyến (Router) sẽ chọn top-K expert phù hợp nhất để xử lý. Ví dụ, nếu model có 8 expert và top-K = 2, mỗi token chỉ được gửi đến 2 trong số 8 expert.
Ba thành phần cốt lõi của MoE
- Expert: Mỗi expert là một feedforward network riêng biệt. Model Mixtral 8x7B có 8 expert trên mỗi layer, tổng cộng hàng trăm expert trên toàn bộ layers.
- Router (Top-K): Một mạng nhỏ học cách chọn K expert phù hợp nhất cho mỗi token. Router chiếm dung lượng rất nhỏ nhưng quyết định hiệu quả của cả hệ thống.
- Gate: Tính toán trọng số cho mỗi expert được chọn, đảm bảo tổng trọng số bằng 1 để cân bằng đầu ra.
Dense Model vs MoE Model: Khác biệt cốt lõi
Hiểu rõ sự khác nhau giữa Dense và MoE là nền tảng để tính toán tài nguyên chính xác khi chạy AI local.
Dense Model hoạt động thế nào?
Trong Dense model (transformer truyền thống), mọi tham số đều tham gia tính toán cho mọi token. Một model 30B tham số sẽ thực sự sử dụng 30B tham số để tạo mỗi token mới. Điều này đảm bảo chất lượng đồng đều nhưng tốn kém về mặt tính toán.
MoE Model tiết kiệm tính toán ra sao?
MoE tách biệt hai khái niệm quan trọng:
- Total Parameters (Tổng tham số): Tổng số tham số của toàn bộ model, bao gồm tất cả expert và router.
- Active Parameters (Tham số hoạt động): Số tham số thực sự tham gia tính toán cho mỗi token. Active = Tham số shared + (K/N × Tham số expert).
Công thức tính tham số MoE chuẩn xác
Để so sánh công bằng giữa các kiến trúc, bạn cần nắm công thức tính active parameters:
Công thức Active Parameters trong MoE:
Active Params = Shared Params + (Top-K / Total Experts) × Expert-Only Params
Công thức tính VRAM/RAM cho Weights:
VRAM (Weights) = Total Parameters × Bytes per Parameter × Loading Multiplier
Trong đó:
- Bytes per Parameter: 2 bytes cho FP16, 4 bytes cho FP32, 1 byte cho INT8 (nén)
- Loading Multiplier: Thường ~1.2-1.5x do bộ nhớ cho trạng thái optimizer, activations tạm thời
KV Cache là gì và tại sao MoE không giảm được nó?
KV Cache lưu trữ Key-Value vectors từ các layers đã xử lý để tránh tính lại cho context đã thấy. Đây là thành phần tiêu tốn bộ nhớ lớn khi chạy local với context dài.
KV Cache phụ thuộc vào đâu?
KV Cache KHÔNG phụ thuộc vào tổng số tham số hay kiến trúc MoE/Dense. Nó phụ thuộc vào:
- Layers: Số lượng transformer layers trong model (thường 24-96 layers)
- KV Heads: Số lượng heads chuyên xử lý KV (thường bằng 1/4 đến 1/8 số attention heads)
- Head Dimension (head_dim): Kích thước mỗi head, thường là 128 hoặc 256
- Context Length: Độ dài context tối đa model hỗ trợ
- Batch Size: Số lượng requests xử lý đồng thời
Công thức tính KV Cache chính xác
KV Cache (bytes) = 2 × Layers × KV Heads × Head Dim × Context × Batch × Bytes per float
Số 2 đại diện cho Key và Value. Với FP16 (2 bytes/float):
KV Cache = 2 × Layers × KV Heads × Head Dim × Context × Batch × 2 bytes
Ví dụ: Model 30B với 32 layers, 8 KV heads, head_dim=128, context=4096, batch=1:
KV Cache = 2 × 32 × 8 × 128 × 4096 × 1 × 2 = ~512 MB
Lưu ý quan trọng: MoE chỉ tiết kiệm compute/token (chi phí tính toán cho mỗi token sinh ra) nhưng KHÔNG giảm KV Cache vì KV được tính qua TẤT CẢ layers, bất kể expert nào được kích hoạt. Một model 100B MoE có cùng layers, KV heads, head_dim với model 30B Dense sẽ có cùng KV Cache cho cùng context length.
So sánh thực tế: 30B Dense vs 100B MoE
Bảng dưới đây minh họa sự khác biệt về tài nguyên khi chạy AI local:
| Thông số | 30B Dense (FP16) | 100B MoE (FP16) | 100B MoE (INT8) |
|---|---|---|---|
| Tổng tham số | 30B | 100B | 100B |
| Active params/token | 30B (100%) | ~15-20B (15-20%) | ~15-20B (15-20%) |
| VRAM weights | ~60 GB | ~200 GB | ~100 GB |
| KV Cache (4K ctx) | ~512 MB | ~512 MB | ~512 MB |
| VRAM tổng ước tính | ~70-80 GB | ~210-240 GB | ~110-130 GB |
| Compute/token | 30B FLOPs | 15-20B FLOPs | 15-20B FLOPs |
| GPU tối thiểu | 2× RTX 3090 (24GB) | 4× A100 (80GB) | 2× A100 (80GB) |
| Tốc độ sinh token | ~15-25 tok/s | ~20-35 tok/s | ~18-30 tok/s |
Công thức tính RAM/VRAM tổng hợp cho AI Local
Khi chạy AI local, bạn cần tính tổng các thành phần sau:
VRAM cần thiết = Weights + KV Cache + Activations + Overhead
Chi tiết từng thành phần
- Weights: Total Parameters × Bytes per weight (2 cho FP16, 1 cho INT8)
- KV Cache: 2 × Layers × KV Heads × Head Dim × Context × Batch × 2 bytes
- Activations: Thay đổi theo batch size và sequence length, thường 5-15% thêm cho activations tạm thời
- Overhead: ~2-5 GB cho hệ điều hành và framework (llama.cpp, vLLM, Transformers)
Công thức nhanh cho VRAM
VRAM (GB) ≈ (Total_Params × Bytes_Param) / 1.073741824 + KV_Cache_GB + Activations_GB + 5
Ảnh hưởng thực tế khi chạy AI Local với MoE
Ưu điểm khi dùng MoE cho local inference
- Tốc độ nhanh hơn: Chỉ cần compute cho 15-20% tham số, tốc độ sinh token cao hơn đáng kể so với Dense cùng tổng tham số.
- Chất lượng cao hơn: Model MoE 100B thường đạt chất lượng tương đương hoặc vượt Dense 30-70B trên nhiều benchmark.
- Chi phí/token thấp: Mỗi token sinh ra tốn ít FLOPs hơn, tiết kiệm điện và thời gian.
Nhược điểm và giới hạn thực tế
- VRAM vẫn lớn: Toàn bộ weights (cả active và inactive) phải nằm trong VRAM/RAM. Model 100B MoE cần ít nhất 100-200 GB VRAM dù chỉ dùng 15-20B mỗi lần.
- KV Cache không giảm: Context dài sẽ tiêu tốn bộ nhớ tương đương Dense cùng cấu trúc.
- Tải bộ nhớ không đều: Với multi-GPU setup, cần kiến trúc NVLink/PCIe phù hợp để tránh bottleneck khi truyền dữ liệu expert.
- Tốc độ bộ nhớ (Bandwidth): MoE nhạy cảm với memory bandwidth; nếu VRAM chậm, tốc độ sẽ bị giới hạn bất kể compute mạnh đến đâu.
Giới hạn khi chạy MoE local hiện tại
Với phần cứng phổ biến của người dùng cá nhân và doanh nghiệp nhỏ:
- RTX 3090/4090 (24GB): Chạy được MoE nhỏ (~7-20B active), cần quantization nghiêm ngặt (INT4) cho model 70-100B MoE.
- 1× A100 (80GB): Chạy thoải mái model MoE ~70B ở INT8, với context 4K-8K.
- 2× A100 (80GB): Chạy được MoE 100-200B ở INT8 với context 4K.
- 4× A100 (80GB) hoặc H100 cluster: Mới đủ chạy MoE 100B+ ở FP16 với context dài.
Bảng so sánh nhanh các mô hình phổ biến
| Model | Kiến trúc | Tổng Params | Active Params | VRAM FP16 | VRAM INT8 | VRAM INT4 |
|---|---|---|---|---|---|---|
| Llama 3.1 8B | Dense | 8B | 8B (100%) | 16 GB | 10 GB | 5 GB |
| Llama 3.1 70B | Dense | 70B | 70B (100%) | 140 GB | 88 GB | 44 GB |
| Mixtral 8x7B | MoE | 46.7B | ~12.9B (27.6%) | 94 GB | 58 GB | 29 GB |
| Qwen 1.5 72B | Dense | 72B | 72B (100%) | 144 GB | 90 GB | 45 GB |
| Qwen 2 MoE 57B | MoE | 57B | ~14.3B (25%) | 114 GB | 72 GB | 36 GB |
| DBRX 132B | MoE | 132B | ~36B (27%) | 264 GB | 165 GB | 82 GB |
| DeepSeek V3 236B | MoE | 236B | ~21B (9%) | 472 GB | 295 GB | 148 GB |
Kết luận: Chọn Dense hay MoE cho AI Local?
MoE là lựa chọn tối ưu nếu bạn có đủ VRAM để chứa toàn bộ weights nhưng muốn tốc độ nhanh hơn. Nguyên tắc đơn giản: nếu bạn chạy được model Dense N tỷ tham số, bạn có thể chạy model MoE N tỷ tham số với tốc độ tương đương model Dense N/5 đến N/7.
Tuy nhiên, đừng nhầm lẫn giữa active parameters (yếu tố quyết định tốc độ) và total parameters (yếu tố quyết định VRAM cần thiết). Đặc biệt, hãy nhớ rằng KV Cache phụ thuộc vào cấu trúc layers, không phải kiến trúc MoE hay Dense — đây là sai lầm phổ biến khiến nhiều người chọn sai phần cứng.
Câu hỏi thường gặp
MoE là gì và khác gì so với Dense model?
MoE (Mixture of Experts) là kiến trúc sử dụng nhiều "chuyên gia" (expert) song song, chỉ kích hoạt top-K expert cho mỗi token. Dense model kích hoạt 100% tham số cho mọi token. MoE giữ nguyên tổng tham số nhưng giảm đáng kể compute/token.
Tại sao model MoE hàng trăm tỷ vẫn chạy được local?
Vì MoE chỉ active ~15-25% tham số mỗi lần (tùy model), nên tốc độ sinh token tương đương model Dense nhỏ hơn 5-7 lần. Tuy nhiên, bạn vẫn cần đủ VRAM chứa toàn bộ weights (total parameters), không phải chỉ active parameters.
MoE có giảm được KV Cache không?
Không. KV Cache được tính qua tất cả layers, không phụ thuộc vào việc dùng MoE hay Dense. KV Cache phụ thuộc vào: số layers, KV heads, head_dim, và context length. Model 100B MoE và 30B Dense có cùng KV Cache nếu cấu trúc layers giống nhau.
Tôi có RTX 24GB, nên chọn model MoE hay Dense?
Với 24GB VRAM, bạn nên chọn model ~7-20B tổng tham số ở INT4/INT8. Mixtral 8x7B (MoE, ~47B total, ~13B active) hoặc Llama 3.1 8B (Dense) là lựa chọn phù hợp. Model MoE lớn hơn sẽ không chạy được vì VRAM không đủ chứa total weights.
Công thức tính VRAM cần thiết để chạy AI local là gì?
VRAM cần = (Total Parameters × Bytes per weight) + KV Cache + Activations + Overhead. Ví dụ: Model 70B FP16 cần ~140 GB chỉ cho weights, chưa kể KV Cache. Nén INT8 giảm xuống ~88 GB, INT4 xuống ~44 GB.

