All posts

Roadmap 30 bài học LLM từ foundation math đến production deployment cho senior dev muốn pivot AI: mental model, tokenization, attention, training, fine-tuning, inference, advanced topics. Hybrid approach: 70% hands-on code + 30% blog.

Read intro: LLM từ zero: Series Plan
  1. [1/30] LLM hoạt động thế nào: mental model cho dev Bạn gõ câu hỏi vào ChatGPT, 3 giây sau nhận được câu trả lời. Ở giữa có gì? Bài viết mở hộp đen: tokenize, embed, attention, sample. Không dùng một công thức toán nào, chỉ mental model cho dev đã quen code nhưng lần đầu đọc kỹ về LLM. ~16 min read
  2. [2/30] Linear algebra cho LLM: vector, matrix, dot product Bài 1 nói mọi thứ bên trong LLM đều là vector và matrix. Vector là gì? Matrix là gì? Tại sao dot product là backbone của attention và RAG? Bài này phá băng math foundation cho dev: chỉ 4 khái niệm, không công thức phức tạp. ~13 min read
  3. [3/30] Calculus cho LLM: gradient, chain rule, backprop intuition Đạo hàm nghe sợ nhưng cốt lõi chỉ là đo độ dốc. Gradient là đạo hàm của hàm nhiều biến. Chain rule là cách chuyền gradient ngược qua nhiều layer. Backprop = chain rule áp dụng có hệ thống. Bài này xây intuition cho dev, không giải bài tập toán. ~10 min read
  4. [4/30] Probability cho LLM: softmax, cross-entropy, perplexity LLM output là xác suất, không phải lựa chọn cứng. Softmax biến logits thành phân phối. Cross-entropy là loss function chuẩn. Perplexity là metric đánh giá model. Bài này giải thích tại sao mấy khái niệm này là trái tim của training và evaluation, với code NumPy minh hoạ. ~11 min read
  5. [5/30] Neural network tối giản: perceptron, MLP từ zero Ghép linear algebra + calculus + probability thành neural network đầu tiên. Từ perceptron 1957 đến MLP đa layer, code 60 dòng NumPy train XOR không cần PyTorch. Sau bài này, bạn hiểu building block gốc của mọi LLM hiện đại. ~12 min read
  6. [6/30] Tokenization: BPE, WordPiece, SentencePiece Bài 1 nói input text biến thành tokens. Nhưng cách biến là gì? BPE, WordPiece, SentencePiece có gì khác nhau? Tại sao tokenizer quyết định nhiều hơn bạn nghĩ - từ cost API đến khả năng model xử lý tiếng Việt. Deep dive cho dev. ~14 min read
  7. [7/30] Build BPE tokenizer từ đầu (theo Karpathy minbpe) Bài 6 giới thiệu BPE. Bài này code từ zero, 150 dòng Python thuần không dependency. Train tokenizer trên Shakespeare, encode/decode, visualize merges. Sau bài này hiểu 100% BPE thay vì chỉ đọc paper thấy abstract. ~12 min read
  8. [8/30] Embeddings: word2vec, contextual, và positional encoding (RoPE) Token ID biến thành vector - đó là embedding. Nhưng vector đó từ đâu? word2vec (2013) dạy model hiểu semantic. Contextual embedding (BERT/GPT) khác word2vec thế nào? Tại sao cần thêm positional encoding, và RoPE làm điều đó cách nào? ~11 min read
  9. [9/30] Attention mechanism: Query, Key, Value intuition Paper 'Attention is All You Need' (2017) là điểm bùng nổ của Transformer. Nhưng Q/K/V từ đâu ra, nghĩa gì, tại sao 3 cái thay vì 1? Bài này giải thích bằng analogy thư viện, không công thức - xây intuition trước khi đến code ở bài 10. ~11 min read
  10. [10/30] Self-attention: code từ đầu bằng NumPy Bài 9 đã xây intuition QKV. Bài này code từ zero một self-attention layer hoàn chỉnh bằng NumPy thuần - 80 dòng, xử lý batch, causal mask, scaling. Verify output matches PyTorch implementation. Sau bài này, attention không còn là hộp đen. ~10 min read
  11. [11/30] Multi-head attention: tại sao chia nhiều head Bài 10 code single-head attention. GPT/Llama có 32-128 heads. Tại sao chia? Mỗi head làm gì khác nhau? Cost tính thêm bao nhiêu? Bài này: intuition + code multi-head bằng NumPy, visualize head specialization (syntax, coreference, long-range). ~13 min read
  12. [12/30] Transformer block: attention + MLP + layer norm + residual Multi-head attention là một nửa Transformer. Nửa còn lại: MLP (feed-forward), layer normalization, residual connection. Bài này ghép 4 thành phần thành 1 block hoàn chỉnh, stack 12 block thành GPT-2, giải thích thứ tự (pre-norm vs post-norm) và tại sao residual quan trọng. ~13 min read
  13. [13/30] nanoGPT: 300 dòng PyTorch tái tạo GPT từ đầu Capstone Part 3. Karpathy nanoGPT là implementation GPT-2 trọn vẹn trong ~300 dòng PyTorch. Bài này walk-through code, train GPT nhỏ trên Shakespeare trong 15 phút CPU, generate text. Sau bài này bạn code được GPT-2 nhỏ không cần HuggingFace. ~12 min read
  14. [14/30] Training loop: forward, backward, optimizer, lr schedule Mở Part 4 của series LLM từ zero. Training loop là phần code mọi research engineer phải viết hàng ngày, nhưng ít dev thực sự hiểu từng dòng. Bài này dissect 5 thành phần: forward pass, loss, backward, optimizer step, lr schedule. Code PyTorch chạy được, không phải pseudo. ~9 min read
  15. [15/30] Scaling laws: Chinchilla, compute-optimal, data efficient Bài 15 series LLM từ zero. Scaling laws là kinh tế học của LLM. Bao nhiêu parameter, bao nhiêu data, bao nhiêu compute là tối ưu? Kaplan 2020, Chinchilla 2022, và những hệ quả của chúng đến Llama-3 hôm nay. Hiểu được scaling laws là biết tính cost trước khi pretrain. ~8 min read
  16. [16/30] Mixed precision FP16 BF16 và gradient checkpointing Bài 16 series LLM từ zero. Train 7B model trên GPU 24GB là khác biệt giữa OOM step đầu và chạy được. Mixed precision cắt memory một nửa, gradient checkpointing cắt thêm 30-40%. Bài này giải thích tại sao FP16 không đủ, BF16 thay thế nó, và checkpointing trade compute cho memory. ~9 min read
  17. [17/30] Distributed training: DP, DDP, FSDP, pipeline parallel Bài 17 series LLM từ zero. Khi model lớn quá 1 GPU, phải chia. Có 4 cách chia: replicate (DP/DDP), shard weights (FSDP/ZeRO), shard layers (pipeline parallel), shard matmul (tensor parallel). Bài này giải thích từng cái và khi nào nên dùng cái nào. ~9 min read
  18. [18/30] LoRA và QLoRA: parameter-efficient fine-tuning Bài 18 series LLM từ zero. Fine-tune full Llama-3-8B tốn 60GB VRAM. LoRA cắt xuống 1.5%, vẫn giữ 95% performance. QLoRA cắt thêm bằng 4-bit quantization, fit 7B model trong 8GB VRAM. Bài này giải thích low-rank decomposition, code triển khai với peft, và khi nào nên dùng cái nào. ~9 min read
  19. [19/30] SFT: supervised fine-tuning với instruction dataset Bài 19 series LLM từ zero. SFT là bước biến một pretrained model thành một instruction-following assistant. Bài này dissect data format, chat template, loss masking, và cách build SFT pipeline thực tế bằng trl library. Code chạy được trên Colab free. ~8 min read
  20. [20/30] DPO và RLHF: alignment với preference data Bài 20 series LLM từ zero. Sau SFT là alignment. RLHF dùng reinforcement learning, DPO bỏ RL bằng một loss đơn giản hơn. Bài này giải thích Bradley-Terry model, KL penalty, reward hacking, và lý do DPO đang dần thay thế PPO trong production. ~9 min read
  21. [21/30] Hands-on fine-tune Llama-3 với dataset tiếng Việt LoRA $20 GPU Bài 21 series LLM từ zero, capstone Part 5. Tutorial step-by-step fine-tune Llama-3-8B với dataset tiếng Việt trên GPU cloud rental ~$20. Tổng hợp LoRA, QLoRA, SFT đã học từ bài 18-19. Sau bài này bạn có một model fine-tuned VN thực của riêng mình. ~9 min read
  22. [22/30] Quantization: INT8, INT4, GGUF, AWQ và BitNet 1.58-bit Llama-3-70B nặng 140GB ở FP16. Sau khi quantize INT4 còn 35GB, chạy được trên một con GPU 48GB hoặc CPU 64GB RAM. Bài viết mở hộp quantization: tại sao nén được, nén kiểu gì, mất gì khi nén, và khi nào nên chọn GGUF vs AWQ vs GPTQ. ~8 min read
  23. [23/30] Serving frameworks: vLLM, llama.cpp, Ollama, bitnet.cpp đối chiếu Cùng một model Llama-3-8B Q4 chạy trên vLLM cho throughput 2000 tokens/s, trên Ollama cho 40 tokens/s. Khác biệt 50 lần không phải vì engine tệ mà vì mục đích khác nhau. Bài viết phân biệt 4 serving framework theo trục concurrency, hardware, ops complexity. ~9 min read
  24. [24/30] KV cache và PagedAttention: tăng throughput inference Inference LLM chậm không phải vì model lớn mà vì mỗi token mới phải tính lại attention với toàn bộ token trước đó. KV cache giải quyết bằng cách lưu kết quả trung gian. PagedAttention giải quyết vấn đề KV cache lãng phí memory. Hai kỹ thuật, ba lần tăng tốc. ~10 min read
  25. [25/30] RAG: retrieval-augmented generation từ vector DB tới prompt Bạn muốn LLM trả lời theo tài liệu công ty mà không fine-tune. Câu trả lời ai cũng nghe: RAG. Nhưng RAG không phải một feature, nó là một pipeline 5 bước, và mỗi bước có hàng tá lỗi có thể xảy ra. Bài viết mở pipeline RAG từ chunking đến prompt construction, kèm code Chroma chạy được. ~10 min read
  26. [26/30] LLM Agents: ReAct, tool use, planning, multi-step reasoning Một LLM trả lời câu hỏi là một thứ. Một LLM tự lên kế hoạch, gọi tool, đọc kết quả, sửa kế hoạch, lặp lại cho đến khi xong nhiệm vụ, là thứ khác hoàn toàn. Bài viết mở mental model agent, ReAct pattern, tool use, kèm code Python loop tối giản. ~10 min read
  27. [27/30] Mixture of Experts (MoE): Mixtral, DeepSeek architecture Mixtral-8x7B có 47 tỷ params nhưng mỗi token chỉ kích hoạt 13 tỷ. DeepSeek-V3 671B nhưng chỉ active 37B mỗi forward pass. Đây là MoE: kiến trúc cho phép scale model lên kích thước khổng lồ mà compute không bùng nổ. Bài viết mở MoE từ ý tưởng đến triển khai. ~9 min read
  28. [28/30] Long context: RoPE scaling, YaRN, ALiBi extrapolation Llama-3 train context 8k. Llama-3.1 hỗ trợ 128k. Gemini quảng cáo 2M. Model không retrain từ đầu, chỉ điều chỉnh cách encode position. Bài viết mở RoPE, RoPE scaling, YaRN, ALiBi, và cách phân biệt context dài thật vs quảng cáo. ~9 min read
  29. [29/30] Reasoning models: o1, R1, chain-of-thought training OpenAI o1 ra 9/2024 đánh bại GPT-4o trong toán và code dù model nhỏ hơn. DeepSeek R1 cuối 2024 open source kèm paper, phơi bày công thức. Reasoning model không phải prompt engineering, mà là cách train mới: thưởng cho việc suy nghĩ trước khi trả lời. ~9 min read
  30. [30/30] Evaluation: MMLU, GSM8K, HumanEval, custom benchmark Một model claim 92% MMLU, model khác 89%. Có nghĩa là model A tốt hơn không? Câu trả lời ngắn: chưa chắc. Bài cuối series mở câu hỏi sống còn của AI engineering: làm sao đánh giá LLM đúng cách, benchmark nào đáng tin, và xây custom benchmark cho use case của bạn. ~10 min read