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