Đến nội dung chính
Kỹ thuật AI

Model Optimization: Quantization và Pruning

Giảm bộ nhớ hoặc chi phí tính toán nhưng luôn đo lại chất lượng và latency trên runtime đích.

Mức giải thích

Model optimization là một bài toán trade-off. Ít bit hoặc nhiều trọng số bằng 0 có thể giảm tài nguyên trong điều kiện phù hợp, nhưng không tự bảo đảm nhanh hơn trên mọi phần cứng.

Mục tiêu học tập

  • Phân biệt quantization và pruning.
  • Tính một ví dụ symmetric quantization nhỏ.
  • Thiết kế so sánh quality–memory–latency đúng điều kiện.

Dùng ít mức số hơn

Uniform affine quantization ánh xạ số thực qua scale và zero point rồi round/clamp về integer range. Post-training quantization dùng model đã học và có thể cần calibration data; quantization-aware training mô phỏng ảnh hưởng quantization trong quá trình học.

Weight-only, activation quantization, per-tensor và per-channel có trade-off khác nhau. Calibration cần đại diện input hợp lệ và không dùng test để chọn cách lượng tử hóa rồi báo test như độc lập.

Bỏ trọng số hoặc cấu trúc

Unstructured pruning tạo sparsity ở trọng số riêng lẻ; structured pruning bỏ channel, head hoặc block theo phương pháp. Fine-tuning sau pruning có thể cần để phục hồi chất lượng. Mask trong framework và artifact cuối là hai trạng thái cần phân biệt.

Tài liệu PyTorch minh họa pruning bằng mask và reparameterization. Một layer đã gắn mask chưa tương đương một sparse inference engine; kiểm tra cách export và runtime xử lý nó.

Đo trade-off thay vì chỉ nhìn kích thước

Cố định hardware, batch, input shape, threading và warm-up. Báo file size khác với peak memory. Giữ bộ quality regression theo subgroup và các trường hợp threshold-sensitive trước khi phát hành artifact tối ưu.

Workflow & kiến trúc

Quantization giảm độ chính xác số; pruning bỏ trọng số hoặc cấu trúc. Hai hướng có thể kết hợp nhưng đều phải đo lại chất lượng và latency trên phần cứng đích.
01Baseline FP
02Quantize / prune
03Đánh giá quality
04Đo target runtime
Workflow minh họa · Các bước cần được điều chỉnh theo bài toán thực tế.

Ứng dụng & giới hạn

  • Thử giảm footprint của model trên thiết bị đích.
  • Phân tích numerical error và operator support trước export.

Điểm mạnh

Có thể giảm tài nguyên khi precision, sparsity và kernels được phối hợp đúng.

Giới hạn cần nhớ

Có thể giảm chất lượng; compression không bảo đảm latency thấp và cần đánh giá lại theo phần cứng.

Thử trong một project nhỏ

LEARN BY DOING

Thêm một outlier 10.0 vào weights và quan sát scale đổi thế nào. Giải thích vì sao sai số của weight nhỏ có thể tăng và vì sao chưa thể suy ra accuracy.

PYTHON · VÍ DỤ MINH HỌA
weights = [-0.9, -0.1, 0.2, 0.8]
scale = max(abs(w) for w in weights) / 127
quantized = [max(-127, min(127, round(w/scale))) for w in weights]
restored = [q*scale for q in quantized]
error = max(abs(a-b) for a,b in zip(weights, restored))
assert error <= scale/2 + 1e-12
print({"integers": quantized, "max_rounding_error": error})

Symmetric uniform quantization trên bốn weights tự chọn, zero point 0 và range −127…127; không đo speedup hoặc chất lượng model.

Nguồn tham khảo

  1. ONNX Runtime — Quantize ONNX models
  2. PyTorch — Pruning tutorial
  3. Han, Mao & Dally — Deep Compression (2016)

KEEP EXPLORING

Đọc tiếp để nối các ý tưởng.