Starphix
Systems Engineering / Sources
The Lab / Sources / Systems Engineering / EdgeAI/Quantization-For-Edge.md

Quantization for Edge

Quantization techniques for deploying AI models on edge and on-device hardware: INT8, INT4, AWQ, GPTQ, GGUF, and runtime selection.

Quantization Techniques

Technique Precision Memory Reduction Quality Loss Best For
FP16 16-bit ~2x vs FP32 Minimal GPU inference, quality-critical
INT8 8-bit ~4x vs FP32 Small Edge GPUs, mobile NPUs
INT4 4-bit ~8x vs FP32 Moderate On-device, tight memory
AWQ 4-bit (activation-aware) ~8x Low LLMs, preserves salient weights
GPTQ 4-bit (gradient-based) ~8x Low LLMs, one-shot calibration
GGUF 4-bit/8-bit (file format) ~8x Low llama.cpp, local/edge inference
QLoRA 4-bit (training) ~8x Minimal Fine-tuning on edge hardware

Decision Guidance

Situation Recommended Approach
Privacy-sensitive data, no cloud Local inference with quantized SLM (1B–7B)
Intermittent connectivity On-device model with cloud fallback
Tight latency budget Quantized SLM locally (no network hop)
Limited device memory INT4 quantization + memory-mapped loading
Quality-critical, edge GPU available INT8 or FP16 on device

Anti-Patterns

Anti-Pattern Fix
Running a 70B model on-device Use a 1B–3B SLM; offload complex tasks to cloud
Sending every prompt to the cloud Local inference first; cloud only for complex tasks
Ignoring thermal throttling Benchmark on target device; account for sustained load
Full-precision weights on mobile Quantize to INT4/INT8; use GGUF or Core ML
No calibration data Use representative dataset for AWQ/GPTQ calibration
  • Local Inference Runtimes — llama.cpp, MLX, ONNX Runtime, Core ML
  • Small Language Models — SLMs, distillation, quantization, edge
  • Inference Optimization — Quantization, speculative decoding
  • Inference — Model serving and inference engines
  • Reliability — Guardrails and failover for local models

Quantization Example: AWQ

from awq import AutoAWQForCausalLM
from transformers import AutoTokenizer

model_path = "meta-llama/Llama-3.1-8B-Instruct"
quant_path = "meta-llama/Llama-3.1-8B-Instruct-AWQ-INT4"

# Load model
model = AutoAWQForCausalLM.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(model_path)

# Configure quantization
quant_config = {
    "zero_point": True,
    "q_group_size": 128,
    "w_bit": 4,
    "version": "GEMM",
}

# Quantize using calibration dataset
model.quantize(tokenizer, quant_config=quant_config, calib_data=calibration_dataset)

# Save quantized model
model.save_quantized(quant_path)
tokenizer.save_pretrained(quant_path)

# Load and run quantized model
model = AutoAWQForCausalLM.from_quantized(quant_path)

Quantization Example: llama.cpp (GGUF)

# Convert and quantize a model for local edge inference
python convert-hf-to-gguf.py \
    --model meta-llama/Llama-3.1-8B-Instruct \
    --outtype f16 \
    --outfile llama-3.1-8b-f16.gguf

# Quantize to INT4 (Q4_K_M = balanced quality/size)
./llama-quantize llama-3.1-8b-f16.gguf llama-3.1-8b-Q4_K_M.gguf Q4_K_M

# Run locally on CPU/edge
./llama-server \
    -m llama-3.1-8b-Q4_K_M.gguf \
    -c 4096 \
    -t 4 \
    --host 0.0.0.0 \
    --port 8080

Sources

  • llama.cpp, MLX, ONNX Runtime, Core ML, TensorFlow Lite, GGUF, AWQ (Lin et al.), GPTQ (Frantar et al.), QLoRA (Dettmers et al.), NVIDIA Jetson, Apple Silicon ML, Qualcomm AI Hub.*

From the Systems Engineering research vault · CC BY 4.0 · all notes · raw markdown