Bỏ qua tới nội dung chính
OpenArchLabOpen Architecture — From Models to Systems

Giới thiệu khóa học

LLM Training (Text): đi theo một vòng huấn luyện mô hình ngôn ngữ từ dữ liệu đến checkpoint

Một mô hình ngôn ngữ lớn (LLM, large language model) sinh văn bản bằng cách đoán từng token kế tiếp. Token là một mảnh văn bản nhỏ, như một từ hay một phần của từ, đã được đổi thành số. Huấn luyện là chỉnh các con số bên trong mô hình, gọi là trọng số (weights), để lần đoán sau ít sai hơn lần trước.

Khóa này đi theo đúng vòng đó trên một sơ đồ 22 ô: lấy dữ liệu, cho mô hình tính ra điểm số (forward), đo sai số (loss), tính hướng sửa (backward), cập nhật trọng số, lặp lại, rồi lưu checkpoint (bản lưu trọng số) để đem đi suy luận, tức dùng mô hình đã huấn luyện để sinh văn bản. Bạn cần phần này để hiểu một mô hình ngôn ngữ ra đời như thế nào trước khi học cách phục vụ nó.

Khóa học gồm

  • Một sơ đồ 22 ô, mã từ 1A đến 5C, vẽ vòng huấn luyện từ văn bản thô đến checkpoint; mỗi ô mở một bài học riêng.
  • Cột 1 đến 3 là vòng lặp thật: chuẩn bị dữ liệu và nhãn, forward qua Transformer (mạng xếp chồng nhiều lớp attention và mạng truyền thẳng), rồi học từ sai số bằng loss, gradient và AdamW (bộ tối ưu đổi gradient thành bước sửa cho từng trọng số).
  • Hai kỹ thuật tiết kiệm bộ nhớ gắn vào vòng lặp: ZeRO (chia trọng số, gradient và trạng thái của AdamW cho nhiều GPU, tức chip tính toán song song) và recompute (bỏ bớt kết quả trung gian của forward rồi tính lại khi cần).
  • Năm phương pháp huấn luyện thay thế nhau: pretraining (học nền từ kho văn bản rất lớn), SFT (supervised fine-tuning: học từ cặp hỏi đáp mẫu), LoRA (chỉ học hai ma trận nhỏ gắn thêm), distillation (mô hình nhỏ học theo mô hình lớn) và preference (học từ cặp câu được chọn và câu bị loại, như DPO và RLHF).
  • Băng 5 dùng checkpoint để suy luận: prompt thành token ID, prefill (đọc cả prompt một lượt), decode (sinh từng token), rồi ra văn bản.
  • Tab 02 là một bài lab NumPy chạy ngay trong trình duyệt, huấn luyện một LLM thu nhỏ qua 13 giai đoạn khớp với các ô này.

Học xong, bạn có thể

  • Kể đúng thứ tự một bước huấn luyện, dữ liệu → forward → loss → backward → cập nhật → lặp, và chỉ ra từng bước ở ô nào.
  • Giải thích vì sao văn bản tự sinh ra đáp án: mỗi vị trí lấy token đứng ngay sau nó làm nhãn, nên không cần ai gán nhãn.
  • Phân biệt loss (một con số đo sai số), gradient (hướng sửa của từng trọng số) và AdamW (quyết định sửa bao nhiêu).
  • Nói ZeRO và recompute tiết kiệm bộ nhớ mà không đổi toán học của huấn luyện.
  • So sánh năm phương pháp huấn luyện: mỗi phương pháp dùng lại cột 1 đến 3 và chỉ đổi dữ liệu, mặt nạ hoặc hàm loss.
  • Chỉ ra checkpoint được dùng lại ở suy luận ra sao (ô 5A đến 5C) và kiểm chứng bằng số trong bài lab.

Phạm vi: khóa chỉ dạy huấn luyện mô hình văn bản, tức mô hình sinh văn bản bằng cách đoán token kế tiếp; khóa không dạy huấn luyện trên ảnh hay âm thanh. Kiến trúc đa phương thức nằm ở bài Text-only / multimodal của LLM Foundations, còn DeepSeek-V4.1-Flash, Qwen-Image-2.1 và Qwen3-Omni mổ xẻ từng mô hình đa phương thức nhưng chỉ ở mức kiến trúc và suy luận.

Cách đọc sơ đồ kiến trúc

  1. Bắt đầu ở 1A, góc trên bên trái, rồi đi xuống cột 1: 1A đổi văn bản thành token ID, 1B tạo đáp án (token kế tiếp) cho mỗi vị trí, 1C là nhánh riêng của SFT thêm mẫu hội thoại và mặt nạ loss.
  2. Theo mũi tên từ 1B sang cột 2: 2A → 2B → 2C → 2D biến token ID thành logits, tức điểm số của mọi token trong từ vựng ở mỗi vị trí.
  3. Theo mũi tên từ 2D sang cột 3: 3A chấm điểm bằng loss, 3B tính gradient ngược lại, 3C cho xem gradient từng lớp, 3D (AdamW) sửa trọng số, 3E lặp, đánh giá và lưu checkpoint.
  4. Mũi tên đứt nét next batch từ 3E quay về cột 1 để lấy batch (nhóm tài liệu xử lý cùng lúc) kế tiếp với trọng số mới; vòng này lặp hàng nghìn lần. Mũi tên load weights đi xuống băng 5: 5A → 5B → 5C dùng checkpoint với trọng số đóng băng, nghĩa là không còn cập nhật, để nhận prompt, prefill, decode rồi trả văn bản.
  5. Cột 4 không phải bước kế tiếp. 4A và 4B là kỹ thuật tiết kiệm bộ nhớ gắn vào vòng ở cột 3; 4C đến 4G là năm phương pháp huấn luyện thay thế nhau, mỗi phương pháp dùng lại cột 1 đến 3 và chỉ đổi dữ liệu, mặt nạ hoặc loss. Thứ tự các cột là thứ tự để học, còn thứ tự chạy thật đi theo mũi tên.
  6. Di chuột, hoặc nhấn Tab, lên một ô để đọc pop-over năm phần: nhận gì, làm gì và vì sao, ra gì, ví dụ, lưu ý. Bấm ô để mở bài học. Nút Trọng tâm làm sáng một nhóm ô; Tắt overlay (cạnh Vừa khung) ẩn các khung ô và pop-over để đọc ảnh gốc, bấm lại để bật. Sau khi đọc sơ đồ, sang Tab 02 để chạy bài lab.

Hai mũi tên sang phải (từ 1B sang cột 2 và từ 2D sang cột 3) được vẽ chạm cạnh cột chứ không chạm đúng ô. Ô nhận dữ liệu thật là 2A và 3A; xem mục Nhận gì trong pop-over của ô.

Trọng tâm:
100%
Thứ tự đọc: bắt đầu ở 1A và đi xuống cột 1 (1A → 1B), sang cột 2 (2A → 2B → 2C → 2D), sang cột 3 (3A → 3B → 3C → 3D → 3E). Mũi tên đứt nét next batch quay về cột 1 để lặp; mũi tên load weights đi xuống băng 5 (5A → 5B → 5C). Cột 4 không phải bước kế tiếp: 4A, 4B tiết kiệm bộ nhớ cho vòng huấn luyện, còn 4C đến 4G là các phương pháp huấn luyện thay thế nhau.
22 Ô TRÊN SƠ ĐỒ (1A → 5C) · Bấm vào ô trên hình hoặc chọn thẻ bên dưới để đọc bài học tương ứng
1A1A · Corpus → Token IDsĐiểm bắt đầu: biến kho văn bản thô thành các dãy số nguyên (token ID) mà mô hình đọc được.1B1B · Next-Token TargetsDịch chuỗi đi một vị trí để mỗi vị trí có đáp án là token đứng ngay sau, kèm mặt nạ nhân quả.1C1C · Chat Template & Response MaskNhánh của SFT: ghép cặp hỏi đáp theo mẫu hội thoại và chỉ chấm loss trên câu trả lời.2A2A · Embedding + AttentionTra ID ra vector rồi cho mỗi vị trí lấy thông tin từ các vị trí trước bằng attention.2B2B · MLP / FFNMạng truyền thẳng xử lý riêng từng vị trí: mở rộng chiều, lọc bằng cổng phi tuyến rồi thu về.2C2C · Norm & ResidualChuẩn hóa biên độ vector và cộng đường tắt residual quanh mỗi khối con, lặp N lớp.2D2D · LogitsĐổi vector cuối thành một điểm số cho từng token trong từ vựng; đây là kết quả của forward.3A3A · Cross-Entropy LossChấm điểm bảng logits so với đáp án và gói thành một con số loss duy nhất.3B3B · Backward PassLan truyền ngược từ loss qua các lớp để biết mỗi tham số nên tăng hay giảm bao nhiêu.3C3C · Per-Layer GradientsGom gradient theo từng lớp và đo độ lớn để thấy mỗi lớp nhận tín hiệu sửa mạnh hay yếu.3D3D · AdamW UpdateAdamW đổi gradient thành bước cập nhật riêng cho từng tham số rồi sửa trọng số.3E3E · Loop · Eval · CheckpointVòng điều phối: lặp bước huấn luyện, đánh giá định kỳ, lưu checkpoint, rồi quay lại lấy batch kế.4A4A · ZeRO ShardingChia trọng số, gradient và trạng thái bộ tối ưu cho nhiều GPU để mỗi GPU chỉ giữ một phần.4B4B · Activation RecomputeBỏ bớt kết quả trung gian của forward rồi tính lại khi backward cần, đổi thêm phép tính lấy bộ nhớ.4C4C · PretrainingPhương pháp nền: chạy vòng cột 1 đến 3 với nhãn là token kế tiếp trên kho văn bản rất lớn.4D4D · SFTFine-tuning có giám sát: học từ cặp yêu cầu và câu trả lời mẫu, chỉ chấm câu trả lời.4E4E · LoRA / QLoRAĐóng băng trọng số gốc và chỉ học hai ma trận nhỏ hạng thấp gắn thêm.4F4F · DistillationMô hình nhỏ (student) học khớp phân phối xác suất của một mô hình lớn (teacher).4G4G · Preference (DPO / RLHF)Dạy mô hình nghiêng về câu trả lời tốt hơn bằng các cặp câu được chọn và câu bị loại.5A5A · Prompt → Token IDsĐiểm vào của suy luận: nhận prompt, kiểm tra rồi đổi thành token ID bằng đúng tokenizer của checkpoint.5B5B · Prefill & DecodePrefill đọc cả prompt một lượt, rồi decode sinh từng token với KV cache.5C5C · OutputChọn token từ logits, kiểm tra điều kiện dừng và ghép các token thành văn bản trả về.

Vì sao cột 4 không phải bước tiếp theo?

Vòng huấn luyện thật chỉ gồm cột 1, 2, 3 lặp đi lặp lại. Cột 4 trả lời hai câu hỏi khác: 4A và 4B hỏi "làm sao vòng này vừa vào bộ nhớ GPU", còn 4C đến 4G hỏi "dạy mô hình bằng dữ liệu và loss nào". Chọn pretraining thì dùng kho văn bản lớn, chọn SFT thì dùng cặp hỏi đáp và mặt nạ ở 1C, chọn LoRA thì chỉ học một phần nhỏ trọng số, chọn distillation thì học từ mô hình lớn, chọn preference thì học từ cặp câu tốt và kém.

Thực hành toàn trình trong một bài Lab duy nhất (Tab 02)

Cả 22 ô hội tụ về một bài Lab NumPy chạy trực tiếp trong trình duyệt ở Tab 02, đi qua 13 giai đoạn từ dữ liệu, forward, loss, backward, AdamW, ZeRO và recompute tới SFT, LoRA, distillation, DPO và suy luận từ checkpoint. Mở Tab 02 · Bài Lab tổng hợp ↗

Nguồn công bố tham chiếu

Open Architecture — From Models to Systems OpenArchLab
Danh sách bài học (24)
  1. Chuẩn bị dữ liệu để huấn luyện dự đoán token kế tiếp
  2. Tạo câu hỏi và đáp án cho mỗi vị trí trong chuỗi
  3. Hàm mất mát: model gán bao nhiêu xác suất cho đáp án đúng
  4. Tính gradient để biết tham số cần thay đổi ra sao
  5. AdamW: cập nhật tham số từ gradient
  6. Vòng huấn luyện, đánh giá và lưu trạng thái tiếp tục
  7. Chuẩn hóa vector và đường cộng residual trong transformer
  8. Query, key và value kết hợp context như thế nào
  9. Mạng truyền thẳng và cổng kích hoạt sau attention
  10. Chia trạng thái huấn luyện để giảm bộ nhớ mỗi worker
  11. Tính lại biểu diễn trung gian để tiết kiệm memory training
  12. Bước training: forward từ token đến điểm số
  13. Bước inference: tiếp nhận prompt và yêu cầu sinh
  14. Bước inference: chuyển prompt thành mã token
  15. Bước inference: xử lý prompt và chọn token đầu tiên
  16. Bước inference: vòng sinh và bổ sung context
  17. Bước inference: kết thúc và trả văn bản
  18. Gradient đi qua một lớp transformer
  19. Pretraining và continued pretraining · học nền tảng rồi học tiếp
  20. Fine-tuning (SFT) · dạy tiếp model đã học bằng cặp yêu cầu – trả lời mẫu
  21. LoRA / QLoRA · học một cặp ma trận nhỏ thay vì sửa toàn bộ trọng số
  22. Knowledge distillation · model nhỏ học từ tín hiệu của model lớn
  23. Response / sequence distillation · fine-tune student trên câu trả lời của teacher
  24. Preference training · dạy model ưu tiên câu trả lời tốt hơn (reward model, PPO, DPO)