Bài 1 chốt được model nào đáng tự host trong 2026: gpt-oss, Qwen 3, DeepSeek R1, Gemma 3, Llama 4, Mistral. Câu hỏi tiếp theo bạn sẽ hỏi tôi là “trên máy tôi chạy được con nào, nhanh tới đâu”. Bài này trả lời.

Tôi sẽ đi qua ba category hardware đại diện cho ba pattern phổ biến nhất hiện nay. Apple Silicon (M3 Max là sample chính), CUDA discrete GPU (RTX 4090 đỉnh consumer, Quadro K620 đại diện edge case), và CPU-only (Xeon E5-2686 v4 trên homelab của tôi). Mỗi pattern có ngưỡng practical riêng. Sau khi đọc xong bạn sẽ biết với budget hoặc hardware sẵn có, bạn chạy được model size nào ở tốc độ chấp nhận được.

Lưu ý: số liệu là snapshot tháng 5, 2026 dựa trên benchmark public mới nhất kèm dữ liệu thật tôi đo trên homelab. Tooling (llama.cpp, vLLM, Ollama) cập nhật liên tục, các con số có thể di chuyển vài chục phần trăm theo từng release patch. Khi đọc số, tập trung vào tier khác biệt (1B vs 7B vs 70B), không bám chi tiết tiểu số.

Methodology: đo cái gì, đo thế nào

Trước khi nhảy vào số, làm rõ định nghĩa. Benchmark LLM thường lẫn lộn ba metric:

Generation tok/s (output throughput): tốc độ model sinh token mới sau khi đã nhận prompt. Đây là số quan trọng nhất với chat và agent loop, vì user cảm nhận trực tiếp.

Prompt eval tok/s (prefill throughput): tốc độ model nuốt prompt vào để chuẩn bị generate. Quan trọng với long context (RAG, codebase QA) hơn là chat ngắn.

Time to first token (TTFT): độ trễ từ lúc gửi prompt đến token đầu tiên hiện ra. Bằng prefill_tokens / prompt_eval_speed + một chút overhead. Quan trọng cho UX interactive.

Trong bài này tôi tập trung generation tok/s với context vừa phải (512 prompt, 512 output). Đây là pattern gần workload chat thực tế nhất. Số prompt eval tôi nhắc khi có chênh lệch đáng kể (Apple Silicon prefill thường yếu hơn so với generation, CUDA thì cân bằng).

Quantization quy về Q4_K_M cho tier baseline. Q4_K_M là sweet spot: chất lượng gần FP16 (loss perplexity vài phần trăm), kích thước giảm 4 lần. Khi cần so sánh chất lượng tôi sẽ chú thêm Q8 hoặc FP16 riêng.

Runner mặc định là llama.cpp với backend tương ứng (Metal trên Mac, CUDA trên NVIDIA, OpenBLAS trên CPU). vLLM nhắc đến khi nói throughput batch hoặc production. Lý do chọn llama.cpp làm baseline: cùng codebase, cùng quantization format (GGUF), so sánh fair giữa các hardware.

Cuối cùng, ngưỡng “chấp nhận được”. Tôi dùng quy ước sau, lấy reference từ tốc độ đọc của con người (~5-10 từ Việt một giây):

Tốc độCảm nhậnUse case
> 50 tok/sTức thì, output chạy nhanh hơn mắt đọcProduction, agent loop, batch
20-50 tok/sMượt, đọc theo đượcChat, code assistant
10-20 tok/sChậm nhưng dùng đượcOne-shot query, không real-time
5-10 tok/sKhó chịu nhưng OK cho task ngắnQuick test, không demo
< 5 tok/sRất khó dùngCuối tuần thử nghiệm

Giờ đi qua từng category.

Apple Silicon: unified memory thay đổi luật chơi

Apple Silicon M-series có một thứ NVIDIA không có dễ dàng: unified memory bandwidth lớn dùng chung CPU và GPU. M3 Max 64GB có 400 GB/s memory bandwidth, M4 Max nâng lên 546 GB/s. Để so sánh, RTX 4090 có 1008 GB/s VRAM bandwidth, nhanh hơn 2.5 lần, nhưng VRAM giới hạn 24GB. M3 Max 128GB chứa được model 70B ở Q4 trong khi RTX 4090 nghẽn ở 32B.

Số liệu tôi tổng hợp từ benchmark public 2026 và thread llama.cpp Apple Silicon (M3 Max 64GB, llama.cpp Metal backend):

ModelQuantGeneration tok/sMemory dùng
Llama 3.1 8BQ4_K_M66~5 GB
Gemma 3 4BQ4_K_M90+~3 GB
gpt-oss 20B (MoE)MXFP430-40~12 GB
Qwen 3 32B (dense)Q4_K_M12-15~20 GB
Llama 3.3 70BQ4_K_M5~40 GB

Số 5 tok/s trên 70B của M3 Max 64GB là điểm đáng chú ý. Model fit trong RAM nhưng tốc độ chạm đáy vì memory bandwidth bị share với KV cache lớn. M3 Max 128GB hoặc M4 Max nhúc nhích lên 8-12 tok/s, M2 Ultra (800 GB/s) đạt khoảng 12-15 tok/s.

Điểm mạnh Apple Silicon:

  • Chạy được model 70B trong consumer hardware. Mac mini M4 Max 64GB giá khoảng 2500 USD, ngang nửa giá một RTX 5090.
  • Tooling chín. llama.cpp Metal backend cải thiện 2 lần throughput từ giữa 2024 đến đầu 2026, gần như xoá khoảng cách phần mềm so với CUDA cho small model.
  • Tiêu thụ điện thấp. M3 Max dưới full load khoảng 60-80W, so với 350-450W của RTX 4090.
  • Portable. Laptop chạy được 13B-32B model mọi lúc mọi nơi.

Điểm yếu:

  • Prefill chậm hơn generation đáng kể. Với long context (5K+ token), TTFT có thể vài giây.
  • Không có TensorRT-LLM hoặc vLLM PagedAttention. Batch inference yếu, không phù hợp serving nhiều user.
  • Không có ecosystem GPU compute rộng. PyTorch trên Metal vẫn còn nhiều rough edge.

Pattern dùng phù hợp: dev cá nhân, code assistant, agent một user, một concurrent request. Không phù hợp serving production multi-user.

Một quirk tôi gặp khi đo M3 Max: số tok/s phụ thuộc mạnh vào nhiệt độ. Sau khi chạy liên tục 10 phút, throttling kích hoạt và throughput tụt 15-20%. Nếu bạn benchmark thì warm up 1-2 phút, rồi đo trên cửa sổ 30 giây, lặp 3 lần lấy trung bình. Cũng nên đóng các app nặng (Docker Desktop, Chrome nhiều tab) vì chúng share GPU memory. Đây là điểm Mac yếu so với rig CUDA dedicated cooling.

CUDA discrete: RTX 4090 thước đo, RTX 3090 sweet spot value

NVIDIA tier consumer (4090, 3090, 4080, 4070) là hardware dominate self-host hiện nay. Lý do: VRAM bandwidth cao (1008 GB/s trên 4090), CUDA ecosystem đầy đủ, vLLM/TensorRT-LLM hỗ trợ native, quantization format tối ưu nhất nằm ở đây.

Tổng hợp benchmark từ Home GPU LLM Leaderboard và bài đo của community (Q4_K_M, llama.cpp CUDA backend, context ngắn):

ModelRTX 5090 32GBRTX 4090 24GBRTX 3090 24GBRTX 4060 Ti 16GBRTX 3060 12GB
Llama 3.1 8B190113-135955545
Gemma 3 12B~12080-907035OOM
gpt-oss 20B (MoE)70-9045-5535-45OOMOOM
Qwen 3 32B (dense)5830-4525-35OOMOOM
Llama 3.3 70B Q4OOM (cần 2 GPU)OOMOOMOOMOOM
Llama 3.3 70B Q23518-2010OOMOOM

Vài quan sát quan trọng:

RTX 4090 24GB nghẽn ở 32B dense. Qwen 3 32B Q4 weights chiếm khoảng 18-20GB, fit weight nhưng KV cache cộng dồn đẩy tổng RAM vượt 24GB ở context dài. Workaround: dùng context 4K thay vì 32K, hoặc move sang model MoE active params nhỏ (gpt-oss 20B chỉ 3.6B active).

RTX 3090 vẫn cực value năm 2026. Cùng VRAM 24GB như 4090, bandwidth 936 GB/s (vs 1008 của 4090), throughput chỉ kém 20-30%. Giá secondhand chỉ bằng 1/3 4090.

70B model cần multi-GPU. Llama 3.3 70B Q4 không nhét vừa 24GB. Phải dùng Q2 (chất lượng tụt rõ), hoặc 2x 24GB GPU tensor parallel, hoặc thẳng tay nhảy lên A100 80GB.

vLLM ăn đứt llama.cpp khi batch. Một benchmark Qwen 3.6 27B trên 4090 cho thấy llama.cpp ở 80-90 tok/s single request, vLLM với PagedAttention đạt 154 tok/s single và nhân 3-4 lần khi concurrent 8 user. Nếu serving nhiều user, vLLM là lựa chọn rõ ràng.

Số liệu trên là Q4_K_M generation. Khi đổi sang FP8 hoặc NVFP4 trên Blackwell (RTX 5090, B200), throughput nhảy thêm 30-60% so với Q4_K_M cùng model. Nhưng cần driver mới và CUDA 12.4+. Nếu bạn vừa upgrade GPU, kiểm tra version tooling trước khi đo.

Điểm mạnh CUDA:

  • Throughput tối đa trên model fit-VRAM. Không ai cãi với 1008 GB/s.
  • Production-ready với vLLM, TensorRT-LLM, batch inference, PagedAttention.
  • Hỗ trợ quant format mới (NVFP4, AWQ, GPTQ) tốt hơn các backend khác.

Điểm yếu:

  • Trần VRAM cứng. 24GB không lên thẳng 70B, phải nhân tiền cho multi-GPU.
  • Tiêu thụ điện. 350-450W full load, idle vẫn 30-50W.
  • Driver, CUDA version, kernel version match: setup phức tạp hơn Mac.

CUDA legacy: Quadro K620 và edge case GPU cũ

Có một trường hợp đặc biệt tôi muốn nhắc vì chính tôi gặp: homelab gắn Quadro K620 (Maxwell 2014, 2GB VRAM). Đây là edge case “có GPU nhưng coi như không có”.

Lý do K620 thực tế là zero giá trị cho LLM 2026:

  • VRAM 2GB. Llama 8B Q4 cần 5GB. Gemma 3 1B Q4 cần khoảng 800MB, fit nhưng KV cache cộng dồn dễ tràn.
  • Compute capability 5.0 Maxwell. Nhiều CUDA kernel mới của llama.cpp và vLLM yêu cầu CC 6.0+. Một số quant format (NVFP4, FP8) yêu cầu Hopper (CC 9.0+).
  • Bandwidth 29 GB/s. Bằng 3% của RTX 4090.

Trên homelab tôi, nvidia-smi không nhận K620 vì driver cũ không cài sạch trên kernel 6.8. Kết quả: Ollama log report inference compute id=cpu library=cpu, total_vram="0 B". Practically đây là CPU-only inference.

Bài học: nếu bạn có GPU cũ hơn Pascal (1000-series) hoặc dưới 6GB VRAM, đừng cố push LLM lên. Stick với CPU-only path hoặc nâng cấp lên RTX 3060 12GB (sweet spot value tier).

CPU-only: tier thực dụng nhưng có giới hạn

CPU-only inference là realistic hơn nhiều người nghĩ, miễn là model đủ nhỏ. Modern Xeon hoặc Threadripper với DDR5 RAM 8 channel có thể đạt 6-10 tok/s cho 7B Q4.

Trường hợp tôi đo trực tiếp: homelab Xeon E5-2686 v4 (18 core, 36 thread, AVX2 không AVX-512, DDR4-2400) với llama.cpp CPU backend. Đây là CPU 2016, đại diện tier “second-hand server cheap” mà nhiều người homelab dùng.

ModelQuantGeneration tok/sRAM
Gemma 3 1BQ4_K_M12-151 GB
Phi-3-mini 3.8BQ4_K_M8-103 GB
Gemma 3 4BQ4_K_M6-83 GB
Llama 3.1 8BQ4_K_M2-45 GB
Gemma 3 12BQ4_K_M1-28 GB
Qwen 3 32B (dense)Q4_K_M< 0.520 GB

Ngưỡng practical với CPU-only Xeon E5 era: tối đa 4B model cho agent loop (nhiều turn), tối đa 7B-8B cho one-shot chat (một request là xong). Lên 12B đã rất chậm, 32B+ không có ý nghĩa.

CPU đời mới hơn (Xeon Sapphire Rapids 2023, Threadripper 7000) với AVX-512 và DDR5 nhanh hơn rõ rệt. Số liệu public cho thấy DDR5 dual-channel chạy 7B Q4 đạt 6-10 tok/s, gấp 2-3 lần DDR4 cùng số core. Nhưng vẫn không bằng GPU rẻ nhất.

Điểm mạnh CPU-only:

  • Không cần thêm hardware. Dùng máy có sẵn.
  • Tiêu thụ điện ổn định. Server đã chạy 24/7 cho NAS, container, etc, thêm LLM idle không thay đổi nhiều.
  • Tooling đơn giản. Không cần CUDA, không cần driver match.

Điểm yếu:

  • Trần 7B chấp nhận được, 4B cho agent loop. Không thể chạy reasoning model nặng.
  • Throughput thấp, không phù hợp serving production.
  • Latency cao, không real-time được.

Pattern dùng phù hợp: agent batch chạy offline, summarization định kỳ, classification, single-user RAG với model nhỏ. Không phù hợp chat real-time hoặc multi-user.

Một mẹo squeeze thêm throughput từ CPU: pin process vào physical core thay vì hyperthread. Trên Xeon 18-core/36-thread của tôi, set -t 18 (thread = physical core) thay vì -t 36 lại nhanh hơn 10-15%. Lý do: HT context switch overhead lớn hơn benefit cho workload memory-bound như LLM inference. Cũng nên bật NUMA awareness nếu chạy dual-socket: numactl --cpunodebind=0 --membind=0 llama-server ... giữ memory và compute trên cùng một NUMA node, tránh penalty cross-socket.

Quantization impact: Q4 vs Q8 vs FP16

Quantization là cách giảm precision weight để tiết kiệm VRAM/RAM và tăng throughput. Trade-off là chất lượng. Số liệu chung cho thấy:

QuantBit/weightKích thước (vs FP16)ThroughputChất lượng
FP1616100%1x (baseline)Baseline
Q8_0850%1.5-2xGần baseline, loss < 1%
Q5_K_M5.535%2.5-3xLoss 1-2%
Q4_K_M4.528%3-4xLoss 2-4%, sweet spot
Q3_K_M3.522%4-5xLoss 5-10%, rõ
Q2_K2.616%5-6xLoss > 10%, model dumb đi

Sweet spot 2026 vẫn là Q4_K_M cho hầu hết model. Q5_K_M nhỉnh hơn chất lượng nhưng VRAM cộng dồn, gặp model fit-just-in-VRAM thì không có chỗ. Q8 dành cho khi VRAM dư thoải mái và muốn chất lượng tối đa.

Format mới 2026:

  • MXFP4 (Microscaling FP4): OpenAI ship gpt-oss native ở định dạng này. 4-bit nhưng có scaling block, chất lượng gần Q8. Cần Hopper hoặc Ada Lovelace để chạy efficient.
  • NVFP4 (NVIDIA FP4): tối ưu cho Blackwell (5090, B100). 4-bit với hardware acceleration.
  • AWQ (Activation-aware Weight Quant): 4-bit có aware activation distribution, throughput vLLM rất cao. Hỗ trợ NVIDIA tốt, kém ở CPU và Metal.

Recommendation: bắt đầu Q4_K_M (GGUF) làm baseline. Nếu chạy CUDA và cần production throughput, chuyển sang AWQ qua vLLM. Nếu chạy gpt-oss thì giữ MXFP4 gốc.

Cost per token: tự host vs cloud, khi nào ăn

Sau khi biết throughput, câu hỏi tiếp theo: tự host có rẻ hơn API không. Tôi tính cho ba scenario hardware ở chế độ self-host 24/7.

Giả định: model 7B Q4_K_M, throughput 50 tok/s (RTX 4090) hoặc 6 tok/s (CPU-only Xeon), điện 0.15 USD/kWh, hardware amortize trong 36 tháng.

Scenario A: RTX 4090 mua mới (1600 USD).

  • Amortize: 1600 / 36 = 44.4 USD/tháng.
  • Điện: 400W trung bình x 24h x 30 ngày = 288 kWh, x 0.15 = 43.2 USD/tháng.
  • Tổng: khoảng 87.6 USD/tháng.
  • Throughput: 50 tok/s x 86400s = 4.32M token/ngày, x 30 = 130M token/tháng (giả sử utilization 100%, thực tế 20-30%).
  • Cost per million token (full utilization): 87.6 / 130 = 0.67 USD/M token output.
  • Cost per million token (30% utilization thực tế): 2.24 USD/M token.

Scenario B: M3 Max 64GB Mac Studio (3200 USD).

  • Amortize: 3200 / 36 = 88.9 USD/tháng.
  • Điện: 80W trung bình x 24h x 30 = 57.6 kWh, x 0.15 = 8.6 USD/tháng.
  • Tổng: khoảng 97.5 USD/tháng.
  • Throughput: 66 tok/s (Llama 8B Q4). 30% utilization: 51M token/tháng.
  • Cost per million token: 1.91 USD/M token.

Scenario C: Homelab Xeon E5 second-hand, không thêm hardware.

  • Amortize: 0 (đã có sẵn).
  • Điện: ~150W trung bình x 24h x 30 = 108 kWh, x 0.15 = 16.2 USD/tháng. (Thực tế nếu server đã chạy 24/7 cho mục đích khác, marginal cost gần như 0.)
  • Throughput: 3 tok/s (Llama 8B Q4). 30% utilization: 2.3M token/tháng.
  • Cost per million token: 7.0 USD/M token (cao vì throughput thấp).

So với cloud API 2026:

  • DeepSeek V3.2: 0.27 USD/M input, ~0.5 USD/M output.
  • Gemini Flash: 0.15 USD/M input, ~0.6 USD/M output.
  • OpenAI GPT-4o-mini: ~0.6 USD/M output.
  • Claude Haiku: ~1.25 USD/M output.

Kết luận khô khan: với model 7B-8B mạnh sẵn có trên cloud rẻ, tự host khó cạnh tranh thuần về chi phí trừ khi volume rất lớn (10M+ token/ngày sustained). Crossover point cho RTX 4090 vs market average (2 USD/M token) khoảng 23M token/tháng theo phân tích cộng đồng.

Lý do tự host vẫn hợp lý:

  • Data sensitivity, compliance (medical, legal, internal codebase).
  • Cost ổn định, không tăng theo usage.
  • Offline workflow, không phụ thuộc internet.
  • Custom fine-tune trên data riêng.
  • Low latency (TTFT từ máy local thấp hơn API cloud xa).
  • Privacy của user cuối (chat client không gửi data đi).

Nếu bạn không có một trong các lý do trên, dùng cloud API rẻ hơn và tỉnh táo hơn nhiều.

Chọn hardware nào theo budget

Cuối cùng, kê đơn cụ thể:

Budget < 500 USD: dùng cái có sẵn. CPU-only với RAM 16GB+, chạy Gemma 3 1B-4B hoặc Phi-3-mini cho agent loop, Llama 3.1 8B cho one-shot. Không cần mua thêm GPU. Đây cũng là pattern homelab “miễn phí” tôi đang chạy.

Budget 500-1000 USD: RTX 3060 12GB hoặc RTX 4060 Ti 16GB. Chạy được hầu hết model 7B-12B ở 45-55 tok/s. Sweet spot value cho dev cá nhân.

Budget 1000-2000 USD: RTX 3090 24GB second-hand hoặc RTX 4090 mới. Chạy được 32B (MoE active params nhỏ như gpt-oss), 13B-14B dense thoải mái với context dài. 3090 secondhand value vô địch.

Budget 2000-3500 USD: Mac Studio M4 Max 64-128GB hoặc 2x RTX 3090. Chạy 70B model với context vừa. Mac có ưu thế portable, im lặng, RAM 128GB rẻ hơn nhiều so với equivalent VRAM. 2x 3090 nhanh hơn nhưng setup phức tạp.

Budget 5000+ USD: workstation 2-4 GPU. 2x RTX 4090, hoặc 1x RTX 5090 nếu cần Blackwell. Production-grade, có thể serve multi-user.

Trường hợp đặc biệt: cần serving production multi-user. Bỏ qua consumer GPU. Đi thẳng A100/H100 cloud hourly. Cost per token thấp hơn nhiều khi batch tốt.

Nguyên tắc chung: chọn hardware có VRAM/RAM đủ chứa model size bạn muốn ở Q4, không cần size lên Q8 hay FP16. Bandwidth quan trọng hơn raw compute cho LLM inference. Đừng mua RTX 5090 chỉ vì nó mới nhất, nếu workload thực tế của bạn chỉ chạy 8B model thì RTX 3060 đã đủ.

Bước tiếp

Bài 3 series sẽ đi vào runner: Ollama, LM Studio, vLLM, llama.cpp. Mỗi cái mạnh ở pattern khác nhau (dev nhanh, GUI cho non-tech, production throughput, foundation linh hoạt). Sau khi đã biết hardware nào chạy được model nào ở tốc độ nào, bài sau giúp chọn runtime serve model đó tới application.

Trước khi đi tiếp, action item cho bạn: chạy llama-bench (đi kèm llama.cpp) trên hardware sẵn có với một GGUF model bạn quan tâm. Số đo trên máy thật của bạn luôn quan trọng hơn benchmark public, vì RAM speed, CPU cooling, background workload đều ảnh hưởng. Số bài này là baseline, máy bạn có thể chệch 20-30%.

Sources tham khảo: Mustafa.net LLM tokens per second benchmarks 2026, Home GPU LLM Leaderboard (awesomeagents.ai), GitHub llama.cpp Apple Silicon discussion #4167, TokenMix Llama 3.3 70B 2026, Effloow self-host vs cloud cost analysis 2026, AIEEV self-hosting GPU breakeven 2026.