MODULE 05 / LESSON 39

Quantization در RAG — کاهش هزینه و افزایش سرعت با فشرده‌سازی مدل‌ها و Vectorها

وقتی یک RAG را به Production می‌بریم، همیشه با یک Trade-off مواجه هستیم: Quality ↔ Speed ↔ Cost مدل‌های بزرگ: کیفیت بالا دارند اما حافظه زیاد مصرف می‌کنند GPU قوی می‌خواهند هزینه اجرا بالا است یکی از تکنیک‌های اصلی برای حل این…

نویسنده: محمد ابوطالبی۷۷۶ واژهماژول ۵: Production

وقتی یک RAG را به Production می‌بریم، همیشه با یک Trade-off مواجه هستیم:

Quality  ↔  Speed  ↔  Cost

مدل‌های بزرگ:

  • کیفیت بالا دارند
  • اما حافظه زیاد مصرف می‌کنند
  • GPU قوی می‌خواهند
  • هزینه اجرا بالا است

یکی از تکنیک‌های اصلی برای حل این مشکل:

Quantization

است.


1. Quantization چیست؟

به زبان ساده:

Quantization یعنی کاهش دقت عددی مدل یا Vectorها برای کوچک‌تر شدن حجم، با کمترین افت کیفیت.

یعنی:

به جای ذخیره اعداد با دقت بالا، از نسخه فشرده‌تر استفاده می‌کنیم.


مثال ساده:

فرض کنید یک عدد داریم:

0.736482918

با دقت کامل ذخیره می‌شود.

اما می‌توانیم تقریب بزنیم:

0.74

حجم کمتر:

  • حافظه کمتر
  • محاسبه سریع‌تر

اما کمی خطا داریم.


2. تشبیه با فشرده‌سازی تصویر

یک تصویر معمولی:

24 bit per pixel

کیفیت عالی.

اما حجم زیاد.


فشرده کنیم:

12 bit

حجم نصف می‌شود.


یا:

6 bit

حجم خیلی کمتر.

اما:

  • رنگ‌ها خراب‌تر می‌شوند
  • Artifact ایجاد می‌شود

Quantization دقیقاً همین کار را با:

  • وزن‌های LLM
  • Vectorهای Embedding

انجام می‌دهد.


3. Quantization در LLM

یک LLM شامل میلیاردها Parameter است.

مثلاً:

Llama
70B parameters

هر Parameter معمولاً:

16 bit

است.


حجم تقریبی:

70B × 16 bit

خیلی بزرگ است.


با Quantization:

حالت اصلی:

FP16

هر عدد:

16 بیت


بعد از Quantization:

INT8

یا:

INT4

یعنی:

FP16

↓

INT8

↓

INT4

4. اثر Quantization روی LLM

مثال:

مدل:

70B FP16

نیاز:

140GB VRAM

نسخه:

70B INT4

ممکن است:

35GB VRAM

نیاز داشته باشد.


نتیجه:

✅ GPU ارزان‌تر
✅ مصرف RAM کمتر
✅ سرعت بیشتر
✅ امکان اجرای Local


هزینه:

کمی افت کیفیت.


مثلاً:

قبل:

MMLU:
80%

بعد:

MMLU:
78%

5. Quantization در Embedding Vectorها

در RAG فقط LLM مهم نیست.

Vector Database هم حجم زیادی دارد.


فرض:

Embedding Model:

768 dimensions

هر dimension:

float32

یعنی:

32 bit

حجم یک Vector:

768 × 32 bit

تقریباً:

3 KB

اگر:

100 میلیون Vector داشته باشیم:

300 GB

فقط برای Vectorها.


اینجا Quantization خیلی مهم می‌شود.


6. Integer Quantization برای Vectorها

روش رایج:

تبدیل:

float32

به:

int8

یعنی:

به جای:

0.234523
-0.45322
0.98231

داریم:

34
-52
112

حجم:

از:

32 bit

می‌رسد به:

8 bit

یعنی:

4 برابر کوچک‌تر.


مثال:

قبل:

Vector size:

3 KB

بعد:

750 bytes

برای میلیون‌ها Vector:

صرفه‌جویی عظیم.


7. Integer Quantization چگونه کار می‌کند؟

فرض کنیم یک Dimension داریم.

مقادیر:

-1.0 تا 1.0

چون INT8:

256 مقدار دارد:

0 تا 255

این Range را تقسیم می‌کنیم:

[-1,1]

↓

256 بخش

مثلاً:

-1.0  → 0

0     → 128

1.0   → 255

بعد هر مقدار Float تبدیل می‌شود به نزدیک‌ترین Integer.


برای بازسازی:

نیاز داریم:

  • Minimum value
  • Step size

را نگه داریم.


8. تأثیر روی Retrieval

سؤال مهم:

آیا Search خراب می‌شود؟

معمولاً:

نه خیلی.


مثلاً:

Recall@K:

قبل:

92%

بعد:

89%

یعنی:

کمی افت.

اما:

  • حافظه کمتر
  • Search سریع‌تر

9. Binary Quantization

نسخه شدیدتر:

به جای:

32 bit

استفاده کنیم:

1 bit

هر مقدار فقط:

0
یا
1

است.


حجم:

32 برابر کمتر

مثال:

قبل:

768 dimensions × 32 bit

بعد:

768 dimensions × 1 bit

مزیت:

سرعت بسیار بالا.


عیب:

افت کیفیت بیشتر.


روش ترکیبی:

مرحله اول:

Binary Search

سریع:

1-bit vector

بعد:

دقیق:

Original vector

برای Re-ranking.


10. Matryoshka Embeddings

یک تکنیک پیشرفته‌تر.

اسم آن از:

عروسک‌های روسی Matryoshka

گرفته شده.


ایده:

Vector طوری آموزش داده می‌شود که:

بخش‌های اول Vector مهم‌تر باشند.


مثلاً:

یک Vector:

1000 dimensions

اما:

First 100 dimensions

بیشترین اطلاعات را دارند.


پس می‌توانیم:

حالت کامل:

1000 dimensions

یا:

سریع:

100 dimensions

استفاده کنیم.


مثال:

Retrieval سریع:

100 dim vector

بعد برای چند نتیجه برتر:

1000 dim vector

یعنی:

دو مرحله‌ای:

Fast Search

↓

Accurate Re-score

11. Quantization در RAG Pipeline

یک معماری واقعی:

                 Documents

                     |

              Embedding Model

                     |

          Quantized Embeddings

                     |

             Vector Database

                     |

             ANN Search


                     |

              Retrieved Docs


                     |

             Quantized LLM


                     |

                Response

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

مناسب:

✅ Dataset بزرگ
✅ میلیون‌ها Document
✅ GPU محدود
✅ Local Deployment
✅ کاهش هزینه Cloud


کمتر لازم است:

❌ Prototype کوچک
❌ چند هزار Document
❌ نیاز به بیشترین Accuracy ممکن


13. پیشنهاد عملی برای RAG Production

معمولاً این ترتیب خوب است:

مرحله اول

مدل اصلی:

FP16

تست کیفیت.


مرحله دوم

Quantization:

INT8

مقایسه:

  • Accuracy
  • Latency
  • Cost

مرحله سوم

اگر لازم بود:

INT4

برای Embedding:

اول:

INT8 Quantization

را امتحان کنید.


جمع‌بندی نهایی

Quantization یعنی:

کم کردن دقت عددی برای کاهش حجم و افزایش سرعت، با افت کیفیت کم.

در RAG دو جای مهم استفاده می‌شود:

بخش هدف
LLM Quantization کاهش VRAM و هزینه اجرای مدل
Embedding Quantization کاهش حجم Vector Database و افزایش سرعت Search

تکنیک‌های مهم:

  • FP16 → INT8 → INT4 برای LLM
  • Float32 → INT8 برای Vector
  • Binary Quantization برای فشرده‌سازی شدید
  • Matryoshka Embeddings برای Vectorهای قابل کوچک‌سازی

در سیستم‌های Production بزرگ، Quantization یکی از مهم‌ترین ابزارها برای تبدیل یک RAG آزمایشی به یک سرویس سریع و اقتصادی است.