Pruning
Định nghĩa
Pruning là kỹ thuật loại bỏ các phần ít quan trọng của model để giảm kích thước, giảm memory footprint hoặc tăng tốc inference.
Vấn đề giải quyết
Transformer có nhiều tham số và phép tính dư thừa so với nhu cầu của một task production cụ thể. Pruning đặt câu hỏi: phần nào của model có thể bỏ đi mà chất lượng vẫn còn chấp nhận được?
Cơ chế trực giác
Model đầy đủ
-> Ước lượng mức quan trọng của weight/head/neuron/block
-> Loại bỏ phần ít quan trọng
-> Đánh giá lại accuracy, latency, memory
-> Fine-tune hoặc hiệu chỉnh nếu cầnWeight pruning
Weight pruning là dạng pruning tác động trực tiếp lên trọng số. Một heuristic phổ biến là magnitude pruning: các weight có trị tuyệt đối nhỏ được xem là ít quan trọng hơn và bị đưa về 0 trước.
W = ma trận trọng số
-> Tính |W|
-> Chọn ngưỡng hoặc tỉ lệ sparsity
-> W nhỏ hơn ngưỡng được đặt thành 0
-> Model trở nên sparse hơnSparsity là tỉ lệ trọng số bằng 0:
sparsity = số weight bằng 0 / tổng số weightSau pruning, thường cần evaluate hoặc fine-tune lại vì việc đưa weight về 0 có thể làm giảm chất lượng. Fine-tuning giúp các weight còn lại thích nghi với cấu trúc sparse mới.
Unstructured và structured pruning
| Kiểu pruning | Đơn vị bị prune | Khi nào đáng chú ý |
|---|---|---|
| Unstructured pruning | Từng weight riêng lẻ | Dễ tạo nhiều số 0, nhưng speedup phụ thuộc sparse kernel |
| Structured pruning | Neuron, attention head, channel, block hoặc layer | Dễ chuyển thành model nhỏ/chạy nhanh hơn, nhưng rủi ro quality lớn hơn |
Điểm mấu chốt cho production: giảm số tham số không đồng nghĩa giảm latency. Nếu runtime vẫn dùng dense computation, các weight bằng 0 không nhất thiết làm phép tính nhanh hơn.
Trade-off
- Có thể giảm size và memory.
- Có thể tăng tốc nếu phần bị prune thật sự được runtime/hardware khai thác.
- Có nguy cơ giảm accuracy nếu loại bỏ quá mạnh.
- Sparse model không tự động nhanh hơn nếu backend inference không tối ưu cho sparsity.
- Structured pruning thường dễ tạo speedup thực tế hơn unstructured pruning, nhưng có thể làm mất capacity mạnh hơn.
- Cần benchmark lại bằng cùng benchmark sau mỗi mức sparsity.
Cách hiểu bằng lời của tôi
Pruning là ép model gọn hơn bằng cách cắt phần ít đóng góp. Nhưng cắt được tham số chưa chắc đã nhanh hơn; phải benchmark trên runtime thật.
Weight pruning có thể hiểu như biến một phần trọng số thành “im lặng”. Nếu hệ thống chạy inference biết bỏ qua các trọng số im lặng đó, model có thể gọn/nhanh hơn. Nếu không, pruning chỉ làm model sparse trên giấy.
Câu hỏi review
- Weight pruning khác quantization ở đâu?
- Magnitude pruning dựa trên giả định gì?
- Sparsity được tính như thế nào?
- Vì sao unstructured pruning chưa chắc tăng tốc inference?
- Vì sao sau pruning thường cần fine-tune lại?