F · Training Methods & Model Adaptation
Response / sequence distillation · fine-tune student trên câu trả lời của teacher
Model lớn (teacher) viết câu trả lời hoặc chuỗi suy luận, pipeline lọc giữ mẫu đúng, rồi model nhỏ (student) được fine-tune trên chính các mẫu đó.
1Định nghĩa
Response distillation, còn gọi là sequence-level distillation, là hình thức chưng cất tri thức thực dụng nhất với LLM: một mô hình lớn (teacher) được chạy để viết câu trả lời hoặc chuỗi lập luận từng bước cho một tập câu hỏi, pipeline lọc giữ lại các mẫu đúng, rồi dùng chúng làm dữ liệu huấn luyện cho một mô hình nhỏ (student). Student nhận về thứ dễ đọc nhất là văn bản, không cần logits nội bộ của teacher.
Bước huấn luyện student giống hệt một lượt Supervised Fine-Tuning (SFT): cross-entropy chuẩn trên văn bản, chỉ khác là câu trả lời mục tiêu do teacher viết. Ưu điểm lớn là teacher không phải chạy song song với student trên GPU lúc huấn luyện, nên chưng cất được xuyên kiến trúc, ví dụ từ teacher MoE (Mixture of Experts, nhiều chuyên gia con mà mỗi token chỉ dùng một vài) sang student Dense (mọi tham số đều tham gia với mỗi token), và xuyên cả các bộ tokenizer khác nhau vì văn bản được đổi lại thành token bằng tokenizer của student.
Ví dụ đời thường: giống như ôn thi bằng tuyển tập bài văn mẫu điểm 10 và lời giải chi tiết của một giáo viên giỏi. Học sinh không cần ngồi cạnh đọc suy nghĩ trong đầu giáo viên, chỉ cần đọc và luyện viết theo các bài giải đã được tuyển chọn kỹ. Ví dụ dừng lại ở chỗ: nếu tuyển tập có bài giải sai thì học sinh học luôn cái sai, vì cuốn sách không tự biết bài nào sai.
2Luồng
Năm bước đầu là dựng dữ liệu rồi huấn luyện, bước cuối là phục vụ. Khác với chưng cất logits, teacher không cần chạy cùng lúc với student: nó chỉ tạo dataset một lần, nên hai model có thể khác tokenizer và kiến trúc. Chọn từng nút để mở bài liên quan.
- Tạo tập prompt đại diện và tách tập đánh giá
Prompt dùng để sinh dữ liệu và prompt dùng để đánh giá phải là hai tập khác nhau.
- Teacher sinh câu trả lời
Ghi prompt, output và cấu hình sinh; có thể lấy nhiều ứng viên cho mỗi prompt.
- Kiểm tra và lọc chuỗi
Loại trùng, sai và sai định dạng bằng bộ kiểm tra; giữ dữ liệu còn đại diện cho tác vụ.
- Chuẩn bị input và nhãn cho student
Dùng tokenizer và template của student; kiểm tra chuỗi bị cắt cụt và áp mặt nạ câu trả lời.
- Fine-tune student rồi đánh giá độc lập
Bước cập nhật giống SFT; kết quả đo trên prompt chưa thấy bằng đáp án độc lập.
- Phục vụ chỉ student
Teacher không nằm trong đường phục vụ cuối; student chạy như mọi checkpoint.
Mã Mermaid
flowchart TD
step1["Tạo tập prompt đại diện và tách tập đánh giá"]
step2["Teacher sinh câu trả lời"]
step3["Kiểm tra và lọc chuỗi"]
step4["Chuẩn bị input và nhãn cho student"]
step5["Fine-tune student rồi đánh giá độc lập"]
step6["Phục vụ chỉ student"]
step1 --> step2
step2 --> step3
step3 --> step4
step4 --> step5
step5 --> step6 3Giải pháp
Bài toán: có teacher giỏi nhưng không chạy được teacher mọi lúc, cũng không có logits
Nhiều teacher mạnh chỉ truy cập được qua giao diện văn bản (không xuất logits), hoặc có tokenizer khác student, hoặc quá lớn để nạp cạnh student lúc huấn luyện. Response distillation bỏ các ràng buộc đó: teacher chạy một lần để sinh dữ liệu, sau đó phần còn lại là fine-tuning quen thuộc. Đổi lại, student chỉ nhận được một đáp án cho mỗi mẫu chứ không thấy độ phân vân của teacher giữa các lựa chọn, nên mức thông tin mỗi mẫu ít hơn chưng cất logits.
Khái niệm tối thiểu cần nắm trước khi đi vào các bước
Prompt là yêu cầu gửi cho teacher; ứng viên (candidate) là một câu trả lời teacher sinh ra, có thể sinh nhiều ứng viên cho cùng prompt bằng cách lấy mẫu ngẫu nhiên. Bộ kiểm tra (verifier) là phần mềm quyết định một ứng viên đạt hay không, ví dụ so số cuối cùng với đáp án đúng. Tập đánh giá (held-out set) là tập prompt chưa từng dùng để sinh dữ liệu hay cập nhật trọng số. Cách chuyển văn bản thành token, mặt nạ câu trả lời và cross-entropy giống hệt SFT nên không nhắc lại đầy đủ ở đây.
Ví dụ chạy xuyên suốt cả bài
Ta dùng một prompt toán đơn giản, tự chọn để tính được bằng tay: "17 × 6 bằng bao nhiêu?" Đáp án đúng là 102. Teacher sinh bốn ứng viên: A là "17 × 6 = 102.", B là "17 × 6 = 112.", C là "Ta có 17 × 6 = 10 × 6 + 7 × 6 = 60 + 42 = 102." và D lặp lại y hệt A.
Bước 1 · Tạo tập prompt đại diện và tách tập đánh giá
Đầu vào là nguồn câu hỏi của bạn (log sản phẩm, bộ đề, câu hỏi tự viết). Thao tác: chọn prompt đại diện cho cái student sẽ làm lúc phục vụ về tác vụ, độ dài và định dạng, rồi tách ngay một phần làm tập đánh giá không dùng để sinh dữ liệu. Lý do: student chỉ học được từ những gì có trong dữ liệu; nếu prompt đánh giá lọt vào dữ liệu huấn luyện (contamination) thì điểm cuối đẹp giả. Cách kiểm tra: đếm các nhóm tác vụ và độ dài, kiểm tra trùng lặp giữa hai tập.
Bước 2 · Teacher sinh câu trả lời
Chạy teacher trên các prompt của tập huấn luyện với cấu hình sinh đã chọn (temperature, độ dài tối đa), thường lấy nhiều ứng viên cho mỗi prompt. Ghi lại prompt, output và cấu hình sinh để biết sau này student đã học từ đâu. Chi phí sinh thuộc ngân sách huấn luyện, không đổ cho phục vụ. Teacher không nhận gradient ở bước này; nó chỉ decode.
Bước 3 · Kiểm tra và lọc chuỗi
Teacher có thể sinh câu sai, lặp, dài dòng hoặc lỗi định dạng, và student học theo đúng cái đó. Vì vậy cần verifier. Với ví dụ xuyên suốt: verifier so số cuối cùng với 102, giữ A và C, loại B vì 112 sai, và loại D vì trùng A. Trong thực tế verifier có thể là bộ kiểm thử code, bộ chấm đáp án toán, hoặc quy tắc kiểm tra định dạng; còn đánh giá mềm bằng một model khác thì phải ghi rõ tiêu chí.
Cách đọc: đếm số mẫu được giữ và bị loại theo từng nguyên nhân, và kiểm tra các nhóm tác vụ còn đại diện sau khi lọc (loại hết câu khó khiến student chỉ giỏi câu dễ). Có thể trộn mẫu người viết với mẫu của teacher; tỉ lệ tốt phải đo bằng đánh giá chứ không có công thức chung.
Bước 4 · Chuẩn bị input và nhãn cho student
Dữ liệu đã lọc được ghép thành hội thoại qua chat template của student rồi tokenize bằng tokenizer của student, nên teacher và student không cần dùng chung từ điển. Nhãn là câu trả lời đã chọn, với mặt nạ chỉ chấm các token của câu trả lời. Kiểm tra độ dài: ngữ cảnh hoặc output dài của teacher có thể vượt ngân sách của student; chuỗi bị cắt cụt làm hỏng mẫu vì phần đáp án cuối biến mất, nên phải phát hiện và loại hoặc sửa chứ không để nhãn bị cắt âm thầm. Ví dụ minh họa: nếu lời giải của teacher dài 1.800 token nhưng student chỉ có ngân sách 1.024 token thì nhãn cuối bị mất, và model học dừng giữa chừng.
Bước 5 · Fine-tune student rồi đánh giá độc lập
Bước cập nhật giống SFT: forward, cross-entropy có mặt nạ, backward và AdamW trên student. Nếu student fine-tune trên câu trả lời của teacher thì quy trình vừa là response distillation vừa là SFT: hai tên mô tả hai khía cạnh của cùng một lượt huấn luyện, một cái nói nguồn tín hiệu và một cái nói cách cập nhật.
Đánh giá: so student trước và sau trên prompt chưa thấy, bằng đáp án độc lập hoặc bài kiểm thử, theo độ đúng và định dạng, và đo độ trễ cùng độ dài output. Student giống teacher không có nghĩa là đúng. Tính cả chi phí sinh và lọc dữ liệu của teacher vào tổng chi phí.
Phục vụ: chỉ student
Khi triển khai, request chạy trên student, không bắt buộc gọi teacher cho từng câu trả lời. Đường phục vụ giống mọi checkpoint: nạp trọng số, tokenizer và template của student; prefill; decode; dừng và giải mã. Tham khảo phần phục vụ ở bài chưng cất tri thức và bài SFT; điểm cần nhớ là template và token kết thúc phải khớp lúc huấn luyện, và response của student phản ánh những gì nó đã học, kể cả lỗi chép từ teacher.
Kết luận được rút ra và không được rút ra
Có thể kết luận: trên tập đánh giá độc lập đã chọn, student đạt độ đúng và định dạng đo được với chi phí phục vụ nhỏ hơn teacher. Không thể kết luận: student giữ toàn bộ khả năng của teacher. DeepSeek công bố các model DeepSeek-R1-Distill dựa trên Qwen hoặc Llama Dense được fine-tune bằng dữ liệu suy luận từ DeepSeek-R1; ví dụ cho thấy teacher MoE có thể chuyển tín hiệu qua dữ liệu sang student Dense, chứ không phải thu nhỏ trực tiếp từng expert, và cần đọc kết quả của từng checkpoint thay vì giả định.
Thực hành trên Bài Lab tổng hợp
Giai đoạn 11 (Distillation) của Bài Lab tổng hợp nối với giai đoạn 9 (SFT). Hãy tự lọc ví dụ xuyên suốt bằng tay trước, rồi xem lab xử lý dữ liệu teacher thế nào và so độ đúng của student trên tập giữ riêng, không chỉ độ giống teacher.
4Profiling
- Dữ liệu và độ đúng độc lập
Đếm mẫu giữ và loại theo nguyên nhân, trùng lặp, độ dài và nhóm tác vụ; kiểm tra tập đánh giá không lẫn vào dữ liệu huấn luyện.
- Chất lượng và chi phí của student
So student trước và sau trên prompt chưa thấy theo độ đúng và định dạng; đo độ trễ và độ dài output. Tính cả chi phí sinh và lọc dữ liệu bằng teacher.
- Mức đa dạng của dữ liệu teacher
Nếu teacher chỉ tạo một phong cách hẹp, student cũng hẹp theo. Kiểm tra độ đa dạng của câu hỏi và cách trả lời trong tập đã lọc.
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ụ
Lọc bốn ứng viên
Dùng prompt "17 × 6 bằng bao nhiêu?" và bốn ứng viên A, B, C, D. Hãy dự đoán các mẫu còn lại. Đáp án: giữ A và C; loại B vì sai; loại D vì trùng A. Hệ quả: dữ liệu cuối có hai mẫu, một ngắn và một có lời giải từng bước, và student học cả hai kiểu.
Chuỗi bị cắt cụt
Một lời giải dài của teacher bị cắt khi tokenize cho student, mất dòng "= 102". Tự kiểm tra: bước nào lẽ ra phát hiện lỗi, và hậu quả nếu không? Đáp án: bước kiểm tra độ dài và phần nhãn ở bước 4; nếu không phát hiện, student học các lời giải không có đáp án cuối và có thể không biết dừng đúng chỗ.
DeepSeek-R1-Distill
Các checkpoint công khai minh họa fine-tuning student Dense trên dữ liệu teacher. Điều này không đảm bảo student giữ toàn bộ khả năng của teacher; cần đọc kết quả của từng checkpoint.
Tập hỏi đáp cho một ứng dụng
Teacher tạo vài đáp án cho mỗi câu hỏi, pipeline giữ đáp án đã kiểm tra rồi huấn luyện student. Khi triển khai, request chạy student và không bắt buộc gọi teacher để sinh từng câu trả lời. Tự kiểm tra: tại sao điểm cao trên chính các câu hỏi dùng để sinh dữ liệu không chứng minh gì? Đáp án: student có thể chỉ nhớ lại câu trả lời, nên phải đo trên prompt chưa thấy.
6Thuật ngữ
- Response distillation (sequence-level)
- Chuyển giao hành vi bằng văn bản teacher viết ra; student học nó bằng huấn luyện có giám sát, không cần logits của teacher.
- Synthetic training data
- Dữ liệu huấn luyện do model tạo; vẫn cần lọc và kiểm tra, không tự trở thành đáp án đúng.
- Candidate (ứng viên)
- Một trong nhiều câu trả lời teacher sinh cho cùng một prompt; pipeline chọn giữ hoặc loại từng ứng viên.
- Verifier (bộ kiểm tra)
- Chương trình hoặc quy tắc kiểm tra một câu trả lời, ví dụ so đáp án cuối với đáp án đúng hoặc chạy bài kiểm thử code.
- Contamination
- Câu hỏi của tập đánh giá lọt vào dữ liệu huấn luyện, khiến số đo đẹp giả.
- Truncation
- Cắt chuỗi quá dài khỏi ngân sách ngữ cảnh của student; phần nhãn bị cắt làm hỏng mẫu huấn luyện.
- Tokenizer của student
- Văn bản teacher được đổi lại thành token ID bằng tokenizer của student, nên hai model có thể khác từ điển và kiến trúc.
- Mask câu trả lời
- Chỉ token của câu trả lời teacher góp vào loss, còn prompt chỉ làm ngữ cảnh, giống SFT.
- Đánh giá độc lập
- Đo student bằng đáp án đúng hoặc bài kiểm tra bên ngoài trên prompt chưa thấy, không chỉ đo mức giống teacher.
Glossary (6)
- Model weights
- Các tham số số học được học và lưu trong checkpoint.
- Checkpoint
- Bản lưu trạng thái model; phạm vi states phụ thuộc mục đích serving hay resume.
- Tokenizer
- Bộ chuyển đổi văn bản và chuỗi mã token theo bảng từ vựng.
- Logits
- Điểm số chưa chuẩn hóa cho các token ứng viên trước khi chọn token.
- Latency
- Thời gian chờ để nhận một kết quả hoặc một bước kết quả.
- Context
- Chuỗi token trước vị trí hiện tại mà model được phép sử dụng.
