W3 · Training / inference workflow
Vòng huấn luyện, đánh giá và lưu trạng thái tiếp tục
Vòng lặp điều phối cả quá trình huấn luyện: nạp batch, cộng dồn gradient, cập nhật trọng số, đánh giá định kỳ trên tập kiểm định và lưu checkpoint.
1Định nghĩa
Vòng lặp huấn luyện (training loop) là bộ khung lặp đi lặp lại chu trình năm việc trên hàng nghìn batch: lấy batch từ bước dữ liệu, tạo nhãn mục tiêu, chạy forward, tính loss và backward, rồi cập nhật trọng số bằng AdamW. Khi một thiết bị không chứa vừa batch lớn, vòng lặp cộng dồn gradient (gradient accumulation) qua vài micro-batch rồi mới gọi AdamW một lần.
Xen giữa các bước cập nhật, vòng lặp định kỳ dừng việc sửa trọng số để đo loss trên tập kiểm định độc lập và ghi checkpoint xuống đĩa. Cần nhớ: chạy 1.000 hay 100.000 bước chỉ đổi giá trị của các số trong ma trận trọng số đã có, không làm tăng số tham số của mô hình.
Ví dụ đời thường: Vòng lặp huấn luyện giống lịch ôn luyện hằng ngày của một học sinh: làm một xấp bài tập (forward), so đáp án chấm điểm sai (loss), tìm nguyên nhân và sửa cách làm (backward và AdamW). Cuối mỗi tuần làm một đề thi thử chưa từng gặp (kiểm định) và cất sổ ghi chép vào tủ (checkpoint). Khác học sinh, nếu đề thi thử bị rò rỉ vào bài tập hằng ngày thì điểm thi thử không còn đáng tin.
2Luồng
Đây là ô 3E, nơi vòng khép lại. Mũi tên quay ngược lên cột 1 và 2 để lấy batch kế tiếp với trọng số mới. Mũi tên rẽ xuống băng dưới của sơ đồ (ô 5A) mang checkpoint sang phần suy luận.
- Lấy micro-batch và chạy forward, loss
Dùng batch từ ô 1A/1B và trọng số hiện tại.
- Backward và cộng dồn
Chia loss theo số token hợp lệ, cộng gradient của vài micro-batch.
- Cắt chuẩn và AdamW
Cắt gradient nếu cần, đặt learning rate theo lịch rồi cập nhật trọng số.
- Đánh giá định kỳ
Chạy forward không cập nhật trên tập kiểm định, ghi loss kiểm định.
- Lưu checkpoint
Ghi trọng số (và trạng thái tiếp tục nếu cần); bản weights-only chuyển sang suy luận.
Mã Mermaid
flowchart TD
step1["Lấy micro-batch và chạy forward, loss"]
step2["Backward và cộng dồn"]
step3["Cắt chuẩn và AdamW"]
step4["Đánh giá định kỳ"]
step5["Lưu checkpoint"]
step1 --> step2
step2 --> step3
step3 --> step4
step4 --> step5 3Giải pháp
Vị trí trên sơ đồ: ô 3E "Vòng lặp, eval, checkpoint" ở cuối cột 3 · Học từ sai số. Nó bao quanh các ô 1A đến 3D: mỗi lần lặp đi hết cột 1, 2, 3 rồi quay lại. Đồng thời nó là cửa ra của phần huấn luyện: checkpoint được lưu ở đây là thứ mà băng dưới của sơ đồ (Checkpoint → Inference, ô 5A bắt đầu từ tiếp nhận yêu cầu) nạp lại.
Vấn đề cần giải. Một lần cập nhật chỉ cải thiện mô hình rất ít. Cần lặp hàng nghìn lần, biết mình đang tiến bộ thật hay chỉ học thuộc, và lưu kết quả sao cho dùng lại được: hoặc để phục vụ suy luận, hoặc để tiếp tục khi tiến trình bị ngắt.
Khái niệm tối thiểu. Step là một lần cập nhật trọng số. Epoch là một lượt đi hết dữ liệu. Micro-batch là phần batch vừa bộ nhớ. Effective batch = micro-batch nhân số lần cộng dồn nhân số thiết bị. Kiểm định (validation) là dữ liệu chỉ dùng để đo.
Ví dụ có số (minh họa, tính tay). Tập huấn luyện có 1.024 khối, mỗi khối 512 token. Micro-batch = 8 khối, cộng dồn 4 lần, một thiết bị: effective batch = 8 × 4 = 32 khối, tức 32 × 512 = 16.384 token cho mỗi lần cập nhật. Một epoch có 1.024 / 8 = 128 micro-batch và 1.024 / 32 = 32 lần cập nhật. Sau 100 lần cập nhật, mô hình đã đi qua dữ liệu khoảng 100 / 32 ≈ 3,1 epoch.
Một step gồm những gì. (1) Với mỗi trong 4 micro-batch: forward, loss, backward; loss được chuẩn hóa theo số token hợp lệ của cả effective batch để các micro-batch không bị đóng góp sai trọng số. (2) Cắt chuẩn gradient nếu vượt ngưỡng. (3) Đặt learning rate theo lịch (warmup rồi giảm dần). (4) AdamW cập nhật và xóa gradient. (5) Cứ mỗi vài chục step, chạy đánh giá: chỉ forward trên tập kiểm định, không backward, không cập nhật, rồi ghi loss kiểm định. (6) Cứ mỗi vài trăm step, lưu checkpoint.
Cách đọc đồ thị loss. Nếu cả loss huấn luyện và kiểm định cùng giảm: mô hình đang học điều tổng quát. Nếu loss huấn luyện giảm còn kiểm định đi ngang hoặc tăng: dấu hiệu học thuộc dữ liệu huấn luyện, nhưng cần thêm bằng chứng như kiểm tra trùng lặp dữ liệu. Nếu cả hai đi ngang ngay từ đầu: nghi ngờ learning rate, lỗi nhãn hoặc mask. Không kết luận mô hình tốt chỉ vì loss giảm: chỉ biết nó dự đoán token kế tiếp tốt hơn trên dữ liệu kiểu đó.
Hai loại checkpoint. Weights-only: trọng số cùng cấu hình mô hình và tokenizer, đủ để phục vụ suy luận. Resume checkpoint: thêm m và v của AdamW, bước hiện tại, trạng thái lịch learning rate, trạng thái ngẫu nhiên và vị trí trong dữ liệu. Với mô hình một tỉ tham số (minh họa, tùy recipe), trọng số 16 bit chiếm khoảng 2 GB, còn bản để tiếp tục với trọng số chính 32 bit cộng m và v 32 bit lên khoảng 12 GB. Nạp trọng số mà bỏ m, v không tương đương tiếp tục từ checkpoint đầy đủ.
Thực thi. Lưu manifest và tiến độ nhất quán với trạng thái mô hình; checkpoint có thể ghi nền nếu cài đặt bảo đảm ảnh chụp nhất quán. Đừng chỉ xác nhận tệp được ghi: hãy thử nạp lại và tiếp tục vài bước để chắc chắn. Ghi lại thời gian đánh giá và thời gian lưu để thấy chi phí phụ. Đọc thêm về checkpoint và artifact cũng như cách kiểm tra chất lượng sau thay đổi. Các phương pháp khác nhau như pretraining và fine-tuning dùng cùng khung vòng lặp này, chỉ khác dữ liệu và mask.
Để chạy vòng lặp trên mô hình nhỏ, theo dõi loss huấn luyện và kiểm định rồi lưu checkpoint, mở giai đoạn 7 · Vòng lặp, eval, checkpoint của Bài Lab tổng hợp. Trước khi chạy hãy đoán loss kiểm định có thể thấp hơn loss huấn luyện không và vì sao.
4Profiling
- Token và step
Ghi effective batch, số token hợp lệ và số lần cập nhật để so tiến bộ học giữa các lần chạy. Với ví dụ, 16.384 token mỗi cập nhật và 32 cập nhật mỗi epoch. Hai lần chạy chỉ so được khi cùng effective batch, cùng lịch learning rate và cùng dữ liệu; nếu khác, hãy nêu rõ khác điểm nào.
- Kiểm định và chi phí lưu
Đo loss kiểm định, thời gian mỗi lần đánh giá, thời gian mỗi lần lưu checkpoint và thời gian tiếp tục sau khi nạp. Kiểm tra cả việc đánh giá không đổi trọng số (so trọng số trước và sau). Các chi phí này là cố định theo lần, nên chọn tần suất cân bằng giữa an toàn và thời gian.
- Tiếp tục có đúng không
Chạy N bước liền, rồi chạy N/2 bước, lưu, nạp, chạy N/2 bước còn lại; hai đường loss phải trùng trong sai số nếu mọi trạng thái được khôi phục. Nếu lệch, kiểm tra m, v, lịch learning rate, nguồn ngẫu nhiên và vị trí dữ liệu.
Mẹo đo lường: ghim số liệu trên workload thật, ghi cả p50/p95/p99 thay vì chỉ trung bình, và luôn ghi lại điều kiện chạy (batch, cache, đồng thời, phần cứng) trước và sau khi tối ưu. Số đo thiếu điều kiện chạy thì không so sánh được.
5Ví dụ
Tiến trình bị ngắt
Tiến trình dừng ở step 70. Nếu nạp checkpoint ở step 60 chỉ có trọng số, bộ tối ưu bắt đầu lại từ m = 0, v = 0 và learning rate lại từ đầu lịch. Nếu vị trí trong dữ liệu không được khôi phục, một số batch bị lặp hoặc bỏ sót. Do đó cần resume checkpoint đầy đủ và nên kiểm thử đường tiếp tục từ sớm.
Xuất mô hình để phục vụ
Chọn một checkpoint (thường theo loss kiểm định tốt nhất hoặc bản cuối), đóng gói cùng tokenizer và cấu hình; không cần nạp m, v vào dịch vụ suy luận. Tự kiểm tra: vì sao bản có loss kiểm định thấp nhất chưa chắc là bản trả lời hữu ích nhất? Vì loss đo dự đoán token kế tiếp, không đo mức hữu ích, đúng sự thật hay an toàn; cần kiểm tra chất lượng bổ sung.
Tự kiểm tra: đếm bước
Tập có 2.048 khối, micro-batch 16, cộng dồn 2, một thiết bị. Effective batch là bao nhiêu và một epoch có mấy lần cập nhật? Đáp án: 16 × 2 = 32 khối; 2.048 / 32 = 64 lần cập nhật mỗi epoch.
6Thuật ngữ
- Step (update) và epoch
- Một step là một lần cập nhật trọng số; một epoch là một lượt đi qua toàn bộ dữ liệu huấn luyện. Một epoch gồm nhiều step.
- Micro-batch và effective batch
- Micro-batch là phần batch chạy được vừa bộ nhớ; effective batch = micro-batch nhân số lần cộng dồn nhân số thiết bị, là số khối thực sự đóng góp cho một lần cập nhật.
- Gradient clipping
- Thu nhỏ gradient nếu chuẩn tổng của nó vượt một ngưỡng, để một batch bất thường không làm trọng số nhảy xa.
- Validation set
- Dữ liệu chỉ dùng để đo, không dùng cho các cập nhật; đo xong không được dùng ngược lại để sửa trọng số.
- Resume checkpoint
- Bản lưu đủ để tiếp tục huấn luyện: trọng số, m và v của bộ tối ưu, bước, lịch learning rate, trạng thái ngẫu nhiên và vị trí dữ liệu.
- Weights-only checkpoint
- Bản lưu chỉ gồm trọng số (cùng cấu hình và tokenizer) đủ để phục vụ suy luận nhưng không đủ để tiếp tục huấn luyện đang dở.
Glossary (6)
- Model weights
- Các số học được; thứ cần lưu để dùng lại mô hình.
- Tokenizer
- Bộ chuyển văn bản thành token ID; phải lưu cùng checkpoint vì ID chỉ có nghĩa với đúng bảng từ vựng đó.
- Overhead
- Chi phí phụ như thời gian đánh giá và lưu file, không phải phép tính huấn luyện chính.
- Forward pass
- Lượt tính xuôi; khi đánh giá chỉ chạy forward, không backward.
- Backward pass
- Lượt tính gradient; chỉ chạy khi huấn luyện.
- Batch
- Nhóm khối token xử lý cùng lúc trong một lượt tính.
