Đọc ngày 2026-08-03

Kế hoạch hôm nay

Mục tiêu cần hiểu

  • Hiểu production model cần benchmark theo accuracy, latency, memory và model size.
  • Biết cách tạo performance benchmark để so sánh các model cùng một tiêu chí.
  • Nắm knowledge distillation là cách huấn luyện student model nhỏ từ teacher model lớn.
  • Hiểu distillation có thể áp dụng khi fine-tuning hoặc pretraining.

Câu hỏi dẫn đường

  • Production model cần cân bằng những yếu tố nào?
  • Latency, memory và accuracy mâu thuẫn với nhau ra sao?
  • Benchmark đơn giản nên đo gì trước?

Gợi ý trả lời câu hỏi dẫn đường

  1. Production model cần cân bằng quality, latency, throughput, memory footprint, model size, chi phí phần cứng và độ ổn định khi chạy trên runtime thật.
  2. Latency, memory và accuracy thường mâu thuẫn vì kỹ thuật làm model nhanh/gọn hơn có thể làm mất thông tin hoặc thêm lỗi xấp xỉ. Ví dụ student nhỏ hơn giảm latency nhưng có thể kém teacher; quantization giảm memory nhưng có thể giảm accuracy.
  3. Benchmark đơn giản nên đo trước quality metric chính, latency trung bình, p95 latency, model size/memory footprint, batch size, runtime/hardware và input benchmark cố định.

Ghi chú trong khi đọc

  • Creating a performance benchmark là bước đầu để biến tối ưu production thành việc đo được, thay vì chỉ cảm giác model “nhanh hơn”.
  • Benchmark nên đo ít nhất: quality metric như accuracy/F1, latency trung bình, p95/p99 latency, memory footprint, model size và runtime/hardware.
  • Cần warmup model trước khi đo vì lần chạy đầu có thể chậm do load model, compile graph, cache hoặc khởi tạo runtime.
  • Sau mỗi kỹ thuật tối ưu như Knowledge Distillation, Quantization, Pruning hoặc ONNX Runtime, phải đo lại bằng cùng input/cùng điều kiện để đọc trade-off.
  • Making models smaller via Knowledge Distillation: dùng teacher model lớn sinh logits/soft labels, rồi train student model nhỏ học theo phân phối dự đoán đó.
  • Knowledge distillation for fine-tuning: teacher đã fine-tune tốt trên task sẽ sinh soft labels/logits để student nhỏ học task đó cùng với hard labels.
  • Soft labels hữu ích vì chúng chứa mức độ “phân vân” của teacher giữa các class, không chỉ class đúng như hard label.
  • Temperature làm mềm phân phối của teacher; nếu phù hợp, student học được quan hệ giữa các class tốt hơn.
  • KL Divergence dùng để đo khoảng cách giữa hai phân phối xác suất: teacher distribution và student distribution. Trong distillation, giảm KL nghĩa là student dự đoán giống teacher hơn.
  • Knowledge distillation for Pretraining: teacher pretrained lớn chạy trên corpus thô/unlabeled, sinh logits hoặc soft targets để student nhỏ học năng lực ngôn ngữ tổng quát trước khi fine-tune downstream.
  • Khác với fine-tuning distillation, pretraining distillation không bị khóa vào một task cụ thể; mục tiêu là tạo một base/student model nhỏ hơn nhưng vẫn giữ nhiều representation nền của teacher.
  • Creating a Knowledge Distillation Trainer: kế thừa Trainer, thêm teacher_model, rồi override compute_loss để trộn hard-label loss với distillation loss từ teacher logits.
  • Teacher trong distillation trainer nên chạy eval() và torch.no_grad(); student mới là model nhận gradient.
  • Loss trực giác: loss = alpha * hard_label_loss + (1 - alpha) * T^2 * KL(student_soft_logits, teacher_soft_logits).
  • Choosing a Good Student Initialization: nên khởi tạo student từ checkpoint đã pretrained nếu có thể, thay vì random, vì student đã có representation nền trước khi học theo teacher.
  • Student tốt không chỉ là model nhỏ; nó cần đủ capacity, tokenizer/input format tương thích và output logits cùng không gian nhãn/vocabulary với teacher hoặc task.
  • Khi tạo distillation trainer, cần chỉnh một vài hyperparameters mặc định như num_train_epochs, weight_decay và learning_rate; đây là phần của training design, không chỉ là chi tiết code.
  • learning_rate quá cao có thể phá representation pretrained của student; quá thấp thì student học teacher chậm. weight_decay giúp giảm overfit vào dataset hoặc lỗi của teacher.
  • Finding Good Hyperparameters with Optuna: dùng hyperparameter search để chạy nhiều trial, mỗi trial chọn một bộ learning_rate, weight_decay, num_train_epochs, alpha, temperature, rồi evaluate student trên validation metric.
  • Optuna giúp giảm thử tay, nhưng best_params vẫn phải benchmark lại theo quality/latency/memory vì validation metric không tự đảm bảo production trade-off.
  • Benchmarking Our Distilled Model: sau khi train student, phải so sánh teacher, baseline student và distilled student trên cùng benchmark để đọc quality drop đổi lấy latency/memory gain.
  • Distilled model đáng dùng khi quality còn đủ tốt và lợi ích production rõ ràng; không bắt buộc phải ngang teacher tuyệt đối nếu tốc độ/bộ nhớ cải thiện đủ nhiều.
  • Có 4 kỹ thuật bổ trợ lẫn nhau để tăng tốc độ dự đoán (inference speed) và giảm bộ nhớ (memory footprint) cho Transformer model:
    1. Knowledge Distillation
    2. Quantization
    3. Pruning
    4. Tối ưu hoá đồ thị (graph optimization) với định dạng ONNX và ONNX Runtime (ORT).

Viết lại bằng lời của tôi

  • Benchmark là “thước đo trước khi sửa”. Nếu chưa biết model hiện tại chạy bao lâu, tốn bao nhiêu memory và đúng đến đâu, mình không thể biết distillation/quantization/ONNX có thật sự giúp hay chỉ đổi một vấn đề này lấy vấn đề khác.
  • Distillation là cách “rút gọn hành vi” của model lớn sang model nhỏ. Teacher cho student xem không chỉ đáp án đúng, mà cả phân phối niềm tin trên các đáp án khác.
  • Trong fine-tuning, distillation giống như thêm một người hướng dẫn vào quá trình học: nhãn thật nói đáp án đúng, teacher nói thêm các đáp án gần đúng và mức độ tự tin.
  • Trong pretraining, distillation giống như cho model nhỏ học lại “cách nhìn ngôn ngữ” của model lớn trên dữ liệu chưa gán nhãn. Student chưa học một task cụ thể, mà học nền biểu diễn để sau này fine-tune rẻ hơn.
  • Distillation trainer là cách nhét ý tưởng teacher-student vào training loop có sẵn: mình không cần viết lại toàn bộ vòng lặp train, chỉ cần thay loss sao cho student vừa nghe nhãn thật vừa nghe phân phối mềm của teacher.
  • Khởi tạo student tốt là đòn bẩy thầm lặng của distillation. Nếu student đã pretrained, teacher đang chỉnh một nền đã biết ngôn ngữ; nếu student random, teacher phải dạy gần như từ đầu nên cần nhiều dữ liệu và dễ tụt quality.
  • Hyperparameters trong distillation giống như núm chỉnh độ mạnh của quá trình học: epoch là học bao lâu, learning rate là bước đi lớn cỡ nào, weight decay là mức kìm overfit, còn alpha/temperature quyết định student nghe teacher theo cách nào.
  • Optuna là cách biến việc chọn hyperparameters từ “đoán vài giá trị” thành một vòng thử nghiệm có metric. Nhưng metric phải đúng: nếu chỉ tối ưu accuracy mà bỏ latency/memory, kết quả có thể không phải cấu hình tốt cho production.
  • Benchmark distilled model là bước chốt hạ: teacher cho mốc chất lượng, student chưa distill cho mốc model nhỏ, distilled student cho biết distillation có thật sự mua được tốc độ/bộ nhớ bằng mức giảm quality chấp nhận được không.
  • KL divergence là thước đo độ lệch giữa hai niềm tin xác suất. Nếu teacher và student phân bổ xác suất giống nhau, loss distillation nhỏ; nếu student bỏ qua class mà teacher cho là quan trọng, loss tăng.
  • Bốn phương pháp chính để tối ưu hoá mô hình Transformer khi đưa vào thực tế là chưng cất tri thức (distillation), lượng tử hoá (quantization), cắt tỉa (pruning) và tối ưu hoá bằng ONNX. Mấu chốt là giảm bộ nhớ và tăng tốc độ suy luận.

Điều chưa rõ

  • Không còn câu hỏi mở lớn cho phần ngày 03-08. Cần review lại ngày 05-08 để chắc chắn phân biệt được benchmark, distillation loss, Optuna và distilled-model trade-off.

Việc cần làm