Tool
AutoFollowDown
ชุดเครื่องมือเดียวสำหรับบีบอัดโมเดล AI ด้วย Quantization, Pruning และ Knowledge Distillation พร้อม benchmark จริง
สรุปประเด็นสำคัญและการใช้งานจาก README ของ peetwan/autofollowdown
ประเด็นสำคัญ
Quantization
ลดความละเอียด (precision) ของน้ำหนักโมเดล เช่น int8 เพื่อให้ขนาดเล็กลงและเร็วขึ้น
Pruning
ตัดน้ำหนักที่สำคัญน้อยออก (เช่น sparsity 50%) เพื่อให้โมเดลเบาลง
Knowledge Distillation
เทรนโมเดลเล็กให้เลียนแบบโมเดลใหญ่ เพื่อคงความแม่นยำในขนาดที่เล็กลง
- ▸API เดียวที่ครอบคลุมทั้ง 3 เทคนิคบีบอัดโมเดล
- ▸Benchmark จริง: วัดผลกระทบจริงต่อขนาด, latency และความแม่นยำ
- ▸"No mocks" — ทุกการทำงานแก้ไขน้ำหนักจริง และทุกตัวเลขมาจากการรันโมเดลจริง
- ▸มีเครื่องมือ diagnose สำหรับคนที่รันโมเดลบนฮาร์ดแวร์จำกัดไม่ได้
- ▸รองรับหลาย backend: PyTorch, NNI, llm-compressor, NVIDIA ModelOpt, torchao, bitsandbytes, HQQ
- ▸ใช้ได้กับ PyTorch modules, Hugging Face model IDs และไฟล์ ONNX
การใช้งาน
ติดตั้ง (Installation)
ต้องการ Python ≥ 3.9 และ PyTorch ≥ 2.1
pip install "git+https://github.com/peetwan/autofollowdown"
# สำหรับ demo / examples
pip install "autofollowdown[examples] @ git+https://github.com/peetwan/autofollowdown"Diagnose (เริ่มที่นี่ถ้ารันไม่ได้)
วิเคราะห์ว่าทำไมโมเดลรันไม่ได้ และควรบีบอัดอย่างไร
# เริ่มที่นี่ถ้ารันโมเดลไม่ได้ / ไม่พอ VRAM
autofollowdown diagnose meta-llama/Llama-3.1-8B --problem won't-fit --vram 8
autofollowdown diagnose Qwen/Qwen3-0.6B --device raspberry-pi-5บีบอัด + Benchmark (CLI)
คำสั่งเดียวจบ: บีบอัด วัดผล และบันทึก
autofollowdown auto # offline demo
autofollowdown compress facebook/opt-125m -o small.pt # บีบอัด + benchmark + บันทึกขอคำแนะนำ (Recommend)
ให้เครื่องมือแนะนำวิธีตามเป้าหมาย (accuracy / size)
autofollowdown recommend Qwen/Qwen3-0.6B --goal accuracy
autofollowdown advise <model> --goal size
autofollowdown gpu Qwen/Qwen3-0.6B # วางแผน memory สำหรับ GPU ฟรีPython API
คำสั่งเดียว + เลือกอัตโนมัติ
from autofollowdown import compress_and_benchmark
study = compress_and_benchmark(model, eval_loader=test_loader)
study.show() # แสดงตารางเปรียบเทียบ
study.export(study.recommended, "small.pt") # บันทึกตัวที่ดีที่สุดควบคุมทีละขั้น
from autofollowdown import ModelCompressor
import copy
ModelCompressor(my_model) \
.prune(sparsity=0.5, method="unstructured") \
.quantize(method="int8", approach="dynamic") \
.export("compressed.pt", format="pt")Auto-picker (เลือก backend ที่ดีที่สุด)
from autofollowdown import explain, recommend, auto_compress
explain(my_model) # จัดอันดับ backend + เหตุผล
compressed, chosen = auto_compress(my_model) # รัน backend ที่ดีที่สุดที่มีตัวอย่างผลลัพธ์
ผลจากการรัน offline demo (เปรียบเทียบขนาด / ความเร็ว / ความแม่นยำ)
| Model | Size MB | Sparsity | Acc | Size× | Speed× | ΔAcc |
| baseline | 1.077 | 0.0% | 90.4% | — | — | — |
| int8 dynamic | 0.303 | 0.0% | 90.4% | 3.56× | 0.60× | +0.0% |
| prune 50% | 1.077 | 50.0% | 91.6% | 1.00× | 1.07× | +1.1% |
| prune+quantize | 0.303 | 18.4% | 91.6% | 3.56× | 0.60× | +1.1% |ทดสอบตัวอย่าง
python3 examples/benchmark_digits.py --epochs 8 # CNN บน digits dataset
python3 examples/benchmark_llm.py --model facebook/opt-125m # LLM perplexity