چیت‌شیت

مقایسه‌ی فرمت‌های کوانتیزه‌سازی

Quantization Formats Compared

انتخاب فرمت وزن بر اساس سخت‌افزار، موتور و بار کاری. بیت‌ها، حافظه، دستورات و تله‌هایی که به دقت لطمه می‌زنند.

  • ۱۲ بخش
  • ۴ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. مقایسه‌ی فرمت‌های محیط عملیاتی در کنار هم
  2. چه زمانی استفاده کنیم؟
  3. چیدمان بیت‌ها
  4. کوانتیزه‌سازی و واکوانتیزه‌سازی
  5. سنجش مدل Llama 3 70B
  6. مقایسه‌ی PTQ و QAT
  7. حساسیت، از کم به زیاد
  8. بودجه‌ی HBM: مدل 70B با AWQ
  9. کوانتیزه‌سازی و سرویس‌دهی
  10. پایه‌ی QLoRA در 4-bit
  11. عیب‌یابی
  12. پرسش و پاسخ

مقایسه‌ی فرمت‌های محیط عملیاتی در کنار هم

مقایسه
فاکتورGGUF Q4_K_MGPTQAWQFP8
بیت‌ها4-54-848
نقطه‌ی ایده‌آلپردازنده‌ی CPU، دستگاه‌های لبه، لپ‌تاپ‌هااجرای Multi-LoRA روی vLLMمحیط عملیاتی GPU در دیتاسنتردیتاسنترهای Hopper/Ada/Blackwell
موتورهاllama.cpp, OllamavLLM, TGIvLLM (Marlin-AWQ), TGIvLLM, TRT-LLM, SGLang
سرعت مدل 7B در vLLM~93 tok/s~712 tok/s~741 tok/sعددی اعلام نشده
بهره‌ی کرنلهیچ روی GPUMarlin: 2.6x در برابر غیر MarlinMarlin-AWQ: 10.9x در برابر حالت سادهبومی روی هسته‌ی تنسور Hopper
کیفیتنزدیک به BF16 در 4-5 بیتنیازمند پاس کالیبراسیونبهترین Pass@1 در INT4تقریباً بدون اتلاف کیفیت

چه زمانی استفاده کنیم؟

نکته‌ها
  • سرویس‌دهی روی CPU یا لبه: GGUF Q4_K_M.
  • سرویس‌دهی روی GPU، چت‌های معمول، بدون LoRA: فرمت AWQ.
  • سرویس‌دهی روی GPU همراه با multi-LoRA: فرمت GPTQ با Marlin.
  • بار کاری استدلالی: FP8.
  • دیتاسنتر Blackwell با کیفیت اعتبارسنجی‌شده: NVFP4 + FP8 KV.
  • فاین‌تیون روی یک GPU مصرفی: QLoRA با پایه‌ی NF4.
  • اگر مطمئن نیستید: ارزیابی 1000 نمونه‌ای روی هر فرمت کاندید اجرا کنید.

چیدمان بیت‌ها

مفهوم‌ها
FP32
شامل 1 علامت، 8 توان، 23 مانتیس. استفاده برای انباشت‌گر.
BF16
شامل 1 علامت، 8 توان، 7 مانتیس. دامنه‌ی یکسان با FP32.
FP16
شامل 1 علامت، 5 توان، 10 مانتیس. بیشینه مقدار ~65,504.
FP8 E4M3
شامل 1 علامت، 4 توان، 3 مانتیس. وزن‌ها و اکتیویشن‌های استنتاج.
FP8 E5M2
شامل 1 علامت، 5 توان، 2 مانتیس. گرادیان‌های آموزش.
INT8
256 مقدار از -128 تا 127. نیازمند یک ضریب مقیاس.
INT4
16 سطح. نیازمند GPTQ یا AWQ برای حفظ کیفیت.
NVFP4
فرمت 4-bit FP با یک ضریب مقیاس به ازای هر بلوک. معماری Blackwell.

کوانتیزه‌سازی و واکوانتیزه‌سازی

کد
python
def quantize_symmetric(tensor, num_bits=8):
    qmin = -(2 ** (num_bits - 1))                 # -128 در 8 بیت
    qmax = 2 ** (num_bits - 1) - 1                # 127 در 8 بیت
    abs_max = np.max(np.abs(tensor))              # به ازای هر تنسور: یک مقیاس
    if abs_max == 0:
        return np.zeros_like(tensor, dtype=np.int32), 1.0
    scale = abs_max / qmax
    quantized = np.clip(np.round(tensor / scale), qmin, qmax).astype(np.int32)
    return quantized, float(scale)

def dequantize_symmetric(quantized, scale):
    return quantized.astype(np.float64) * scale   # خطا حداکثر مقیاس / 2

zero_point = int(np.round(qmin - t_min / scale))  # آفست نامتقارن

سنجش مدل Llama 3 70B

مقایسه
فاکتورFP16FP8GPTQ INT4AWQ INT4
اندازه140GB70GB35GB35GB
پرپلکسیتی (WikiText-2)3.123.144.324.18
MMLU79.5%79.3%77.8%78.1%
توکن بر ثانیه (A100)38557275

مقایسه‌ی PTQ و QAT

مقایسه
فاکتورPTQQAT
هزینهدقیقه‌ها تا چند ساعتیک دور آموزش کامل
کیفیت در INT8عالی (کمتر از 0.1% افت)عالی
کیفیت در INT4خوب با GPTQ/AWQ (1-3% افت)بهتر (کمتر از 1% افت)
کیفیت در INT2ضعیفقابل استفاده برای برخی وظایف
داده‌های کالیبراسیون128-1024 نمونهمجموعه داده کامل آموزش

حساسیت، از کم به زیاد

گام‌به‌گام
  1. وزن‌هاگاوسی نزدیک به صفر. INT4 با GPTQ یا AWQ به خوبی کار می‌کند.
  2. اکتیویشن‌هادامنه‌ی گسترده‌تر با مقادیر پرت. از INT8 با احتیاط استفاده کنید.
  3. کش کلید-مقدارخطاها در طول توکن‌های بعدی جمع می‌شوند. از FP8 یا INT8 استفاده کنید.
  4. لاجیت‌های اتنشنسافت‌مکس خطا را تقویت می‌کند. آن‌ها را روی FP16 نگه دارید.

بودجه‌ی HBM: مدل 70B با AWQ

معماری
وزن‌ها~35 GB INT4کش کلید-مقدار~20 GB, 128 x 2kاکتیویشن‌ها~5 GBH100 80GBمجموع ~60 GB

کوانتیزه‌سازی و سرویس‌دهی

کار و کد
وظیفهکد
تبدیل به GGUFpython llama.cpp/convert_hf_to_gguf.py <model> --outtype f16 --outfile <f16>.gguf
ساخت Q4_K_Mllama.cpp/build/bin/llama-quantize <f16>.gguf <out>.gguf Q4_K_M
سرویس‌دهی GGUFllama.cpp/build/bin/llama-server -m <out>.gguf -c 4096 -ngl 99
پیکربندی GPTQGPTQConfig(bits=4, group_size=128)
کالیبراسیون GPTQmodel.quantize(calibration_texts[:128], batch_size=1)
مرحله‌ی دستورالعمل AWQAWQModifier(duo_scaling="both")
اسکیمای AWQQuantizationModifier(ignore=["lm_head"], scheme="W4A16_ASYM", targets=["Linear"])
سرویس‌دهی AWQ یا GPTQvllm serve <model> --max-model-len 8192

پایه‌ی QLoRA در 4-bit

کد
python
bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,                      # پایه‌ی فریز شده در 4-bit
    bnb_4bit_quant_type="nf4",              # سطوح در چندک‌های نرمال
    bnb_4bit_compute_dtype=torch.bfloat16,
    bnb_4bit_use_double_quant=True,         # ثابت‌های مقیاس به fp8
)
model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-3.1-8B",
    quantization_config=bnb_config,
    device_map="auto",
)
model = get_peft_model(model, lora_config)  # آموزش تطبیق‌دهنده‌ها در fp16

عیب‌یابی

عیب‌یابی
  • افت چند امتیازی HumanEval Pass@1

    علت
    کالیبراسیون روی متن عمومی وب انجام شده
    راه‌حل
    کالیبراسیون با داده‌های درون‌دامنه‌ای
  • اتمام حافظه‌ی HBM پس از مدل 4-bit

    علت
    کش کلید-مقدار در حالت FP16/FP8 مانده است
    راه‌حل
    بودجه‌بندی وزن‌ها، کش کلید-مقدار و اکتیویشن‌ها
  • افت ~3-5 امتیازی بنچمارک MATH

    علت
    استفاده از AWQ INT4 روی مدل استدلالی
    راه‌حل
    عرضه با FP8 یا BF16
  • سرعت ~93 tok/s روی مدل 7B در vLLM

    علت
    موتور اجرایی GGUF اشتباه است
    راه‌حل
    سرویس‌دهی GGUF با llama.cpp
  • فروپاشی امتیازات اتنشن

    علت
    کش کلید-مقدار در FP4
    راه‌حل
    نگه‌داشتن کش کلید-مقدار در FP8
  • فرمت INT4 ساده مدل را خراب می‌کند

    علت
    انباشته شدن خطاهای گرد کردن
    راه‌حل
    استفاده از GPTQ یا AWQ همراه با کالیبراسیون
  • اختلاف پرپلکسیتی بیشتر از 2.0

    علت
    مشکلی رخ داده است
    راه‌حل
    بررسی متد و ضرایب مقیاس
  • عدم وجود LoRA روی NVFP4

    علت
    هنوز LoRA پشتیبانی نمی‌شود (اوایل 2026)
    راه‌حل
    استفاده از GPTQ-Int4 در vLLM

پرسش و پاسخ

پرسش و پاسخ
اختلاف پرپلکسیتی مناسب چقدر است؟
زیر 0.5 عالی است.
چند نمونه کالیبراسیون برای GPTQ نیاز است؟
128 نمونه معمول است.
پیکربندی معمول Blackwell چیست؟
وزن‌ها و اکتیویشن‌های NVFP4، کش کلید-مقدار FP8، انباشت‌گر اتنشن FP32.
AWQ یا GPTQ؟
ردپای 4-bit یکسان است. بر اساس پشتیبانی LoRA انتخاب کنید.
فرمت GGUF Q4_K_M برای 70B؟
حدود 40GB. سرعت 10 تا 15 توکن در ثانیه روی M3 Max با 64 گیگابایت حافظه.