تحسين ذاكرة التخزين المؤقت KV: كفاءة الذاكرة لنماذج اللغة الكبيرة في الإنتاج
آخر تحديث: 11 ديسمبر 2025
تحديث ديسمبر 2025: الاستدلال التقليدي يهدر 60-80% من ذاكرة التخزين المؤقت KV بسبب التجزئة. تقنية PagedAttention من vLLM تقلل الهدر إلى أقل من 4%، مما يتيح مضاعفة الإنتاجية 2-4 مرات. نموذج 70B مع سياق 8K يتطلب حوالي 20GB من ذاكرة التخزين المؤقت لكل طلب، وحوالي 640GB لدفعة من 32. ذاكرة التخزين المؤقت KV الآن غالباً ما تتجاوز أوزان النموذج في استهلاك الذاكرة. تقنيات التحسين تتيح سياقات أطول ودفعات أكبر على العتاد الحالي.
أنظمة استدلال نماذج اللغة الكبيرة تهدر 60-80% من ذاكرة التخزين المؤقت KV المخصصة بسبب التجزئة والتخصيص المفرط.¹ هذا الهدر يترجم مباشرة إلى انخفاض الإنتاجية، وارتفاع التكاليف، وقيود مصطنعة على أطوال السياق. تقنية PagedAttention، التي قدمتها vLLM، خفضت هدر ذاكرة التخزين المؤقت KV إلى أقل من 4%، مما أتاح تحسينات في الإنتاجية بمقدار 2-4 مرات غيرت اقتصاديات الاستدلال في الإنتاج.² فهم تقنيات تحسين ذاكرة التخزين المؤقت KV يساعد المؤسسات على تعظيم استخدام GPU وخدمة المزيد من المستخدمين من البنية التحتية الحالية.
إدارة ذاكرة التخزين المؤقت KV أصبحت العنق الزجاجي الحرج لنشر نماذج اللغة الكبيرة في الإنتاج. استهلاك الذاكرة ينمو خطياً مع طول التسلسل وحجم الدفعة، مستنفداً بسرعة حتى وحدات GPU ذات الذاكرة العالية مثل H100 وH200. إتقان تقنيات تحسين ذاكرة التخزين المؤقت يتيح سياقات أطول، ودفعات أكبر، واستدلالاً أكثر فعالية من حيث التكلفة على نطاق واسع.
لماذا يهم التخزين المؤقت KV
نماذج Transformer تحسب الانتباه على جميع الرموز السابقة عند توليد كل رمز جديد. بدون التخزين المؤقت، توليد 1,000 رمز يتطلب إعادة حساب الانتباه من الصفر 1,000 مرة—مما يزيد التكلفة تربيعياً مع طول التسلسل.
حل التخزين المؤقت KV: تخزين موترات المفاتيح والقيم من الرموز السابقة، وإعادة استخدامها لحسابات الانتباه اللاحقة. كل رمز جديد يحسب الانتباه مقابل القيم المخزنة بدلاً من إعادة توليدها.
التأثير على الذاكرة: نموذج بـ 70 مليار معامل يولد 8,192 رمزاً بحجم دفعة 32 يتطلب تقريباً 40-50GB من ذاكرة التخزين المؤقت KV وحدها—غالباً ما يتجاوز أوزان النموذج نفسها.³
مشكلة التوسع: ذاكرة التخزين المؤقت KV تنمو وفقاً للمعادلة:
Memory = batch_size × seq_length × num_layers × 2 × hidden_dim × precision_bytes
لنموذج Llama 3.1-70B مع FP16: - ذاكرة التخزين المؤقت لكل رمز: حوالي 2.5MB - سياق 8K: حوالي 20GB لكل طلب - دفعة من 32: حوالي 640GB إجمالي ذاكرة التخزين المؤقت KV
PagedAttention: التحسين الأساسي
أحدثت تقنية PagedAttention من vLLM ثورة في إدارة ذاكرة التخزين المؤقت KV من خلال معاملة ذاكرة GPU مثل الذاكرة الافتراضية لنظام التشغيل:⁴
كيف تعمل
التخصيص التقليدي: حجز كتل ذاكرة متجاورة لأقصى طول تسلسل ممكن. سياق أقصى 4K يخصص ذاكرة مؤقتة بقيمة 4K حتى لطلبات من 100 رمز، مما يهدر 97.5% من الذاكرة المحجوزة.
التخصيص المُجزأ: تقسيم ذاكرة التخزين المؤقت KV إلى كتل ذات حجم ثابت (صفحات). تخصيص الصفحات عند الطلب مع نمو التسلسلات. تحرير الصفحات عند اكتمال التسلسلات.
جدول الكتل: مثل جداول صفحات نظام التشغيل، تحافظ PagedAttention على تعيينات بين مواضع التسلسل المنطقية ومواقع الذاكرة الفعلية. التسلسلات ترى ذاكرة مستمرة بينما يظل التخزين الفعلي غير متجاور.
التأثير على الأداء
- هدر الذاكرة: 60-80% ← أقل من 4%
- الإنتاجية: تحسين 2-4 مرات مقارنة بالتخصيص التقليدي
- تجزئة الذاكرة: تم القضاء عليها فعلياً⁵
التنفيذ في vLLM
from vllm import LLM, SamplingParams
# PagedAttention مفعّلة افتراضياً
llm = LLM(
model="meta-llama/Llama-3.1-70B-Instruct",
tensor_parallel_size=4,
gpu_memory_utilization=0.90, # استخدام 90% من ذاكرة GPU
max_model_len=32768,
)
vLLM تدير تلقائياً تخصيص الصفحات وإلغاء تخصيصها ومشاركة الذاكرة دون تكوين صريح.
التخزين المؤقت للبادئات ومشاركة الذاكرة
تتيح PagedAttention مشاركة الذاكرة بكفاءة عبر الطلبات ذات البادئات المشتركة:
موجهات النظام المشتركة: عندما تستخدم طلبات متعددة موجهات نظام متطابقة، يتم مشاركة الصفحات الفعلية التي تخزن تلك الرموز بدلاً من تكرارها.
التخزين المؤقت التلقائي للبادئات: التخزين المؤقت التلقائي للبادئات (APC) من vLLM يكتشف البادئات المشتركة عبر الطلبات ويشارك كتل ذاكرة التخزين المؤقت KV تلقائياً:
llm = LLM(
model="meta-llama/Llama-3.1-8B-Instruct",
enable_prefix_caching=True,
)
التأثير في الإنتاج: التطبيقات ذات موجهات النظام المتسقة أو السياق المتكرر (RAG مع مستندات مشتركة، أمثلة few-shot) ترى توفيراً كبيراً في الذاكرة وتقليلاً في زمن الاستجابة. معدلات إصابة ذاكرة التخزين المؤقت بنسبة 87%+ قابلة للتحقيق مع موجهات منظمة جيداً.⁶
تكميم ذاكرة التخزين المؤقت KV
ضغط قيم ذاكرة التخزين المؤقت KV يقلل متطلبات الذاكرة على حساب تدهور طفيف في الدقة:
ذاكرة التخزين المؤقت KV بصيغة FP8
وحدات GPU من Hopper وBlackwell تدعم ذاكرة التخزين المؤقت KV الأصلية بصيغة FP8:
# ذاكرة التخزين المؤقت KV بصيغة FP8 في vLLM
llm = LLM(
model="meta-llama/Llama-3.1-70B-Instruct",
kv_cache_dtype="fp8",
)
FP8 تخفض ذاكرة التخزين المؤقت KV إلى النصف مقارنة بـ FP16 مع تأثير ضئيل على الجودة لمعظم التطبيقات. هذا التحسين يصبح ضرورياً للاستدلال على السياقات الطويلة حيث تهيمن ذاكرة التخزين المؤقت على استهلاك الذاكرة.
ذاكرة التخزين المؤقت KV بصيغة INT4
دعم تجريبي لذاكرة التخزين المؤقت KV بـ 4 بت يقلل الذاكرة أكثر:⁷ - تقليل الذاكرة: 4 مرات مقارنة بـ FP16 - التأثير على الجودة: يعتمد على المهمة، يتطلب تقييماً - الأفضل لـ: تطبيقات السياق الطويل المقيدة بالذاكرة
اختيار التكميم
| الدقة | توفير الذاكرة | التأثير على الجودة | حالة الاستخدام |
|---|---|---|---|
| FP16 | الأساس | لا شيء | الافتراضي، الحرج للجودة |
| FP8 | 50% | ضئيل | استدلال الإنتاج |
| INT8 | 50% | منخفض | النشر الحساس للتكلفة |
| INT4 | 75% | متوسط | القيود الشديدة على الذاكرة |
استراتيجيات إخلاء ذاكرة التخزين المؤقت
عندما يتجاوز ضغط الذاكرة السعة المتاحة، تحدد سياسات إخلاء ذاكرة التخزين المؤقت أي الرموز يتم إسقاطها:
انتباه النافذة المنزلقة
الاحتفاظ فقط بالرموز الأخيرة في ذاكرة التخزين المؤقت، وإسقاط السياق الأقدم:
# نافذة منزلقة مفاهيمية
def sliding_window_cache(kv_cache, window_size):
if len(kv_cache) > window_size:
kv_cache = kv_cache[-window_size:]
return kv_cache
بسيطة لكن فعالة للتطبيقات حيث يهم السياق الأخير أكثر. النافذة المنزلقة المعمارية (مثل Mistral) تنفذ هذا أصلاً.
الإخلاء المبني على الانتباه
إزالة الرموز ذات أدنى درجات انتباه، مع الاحتفاظ بالسياق المهم:
PagedEviction (2025): خوارزمية إخلاء على مستوى الكتل مصممة لـ PagedAttention تحدد وتزيل الكتل منخفضة الأهمية دون تعديل نواة CUDA.⁸
التخزين المؤقت الموجه بالإنتروبيا: تخصيص ميزانية ذاكرة التخزين المؤقت بناءً على إنتروبيا انتباه الطبقة—الطبقات ذات أنماط الانتباه الأوسع تتلقى المزيد من ذاكرة التخزين المؤقت، والطبقات المركزة تتلقى أقل.⁹
Streaming LLM
للتوليد بطول غير محدود، يحافظ Streaming LLM على: - رموز "حوض الانتباه" الأولية (أول 4-8 رموز) - الرموز الأخيرة ضمن النافذة المنزلقة - إسقاط السياق الأوسط
هذا النهج يتيح توليداً غير محدود نظرياً بذاكرة ثابتة، على الرغم من تدهور الجودة للمهام التي تتطلب تبعيات بعيدة المدى.
تفريغ ذاكرة التخزين المؤقت KV
عندما تثبت ذاكرة GPU أنها غير كافية، يتم تفريغ ذاكرة التخزين المؤقت إلى مستويات تخزين أبطأ:
التفريغ إلى CPU
نقل ذاكرات التخزين المؤقت للتسلسلات غير النشطة إلى ذاكرة النظام RAM:
# تكامل LMCache للتفريغ
from lmcache import LMCacheEngine
cache_engine = LMCacheEngine(
backend="cpu",
max_gpu_cache_size="20GB",
cpu_cache_size="100GB",
)
تأثير زمن الاستجابة: نقل CPU-GPU يضيف 10-50 مللي ثانية لكل استرجاع من ذاكرة التخزين المؤقت. مناسب لأحمال العمل الدفعية أو عندما تمنع قيود ذاكرة GPU الخدمة على الإطلاق.
الأداء: LMCache مع vLLM يحقق تقليلاً في زمن الاستجابة 3-10 مرات مقارنة بإعادة الحساب من خلال التخزين المؤقت في ذاكرة CPU بدلاً من إعادة التوليد.¹⁰
التفريغ إلى القرص
للحالات القصوى، التخزين المؤقت إلى تخزين NVMe: - زمن الاستجابة: 100-500 مللي ثانية لكل استرجاع - حالة الاستخدام: سياقات طويلة جداً ستكون مستحيلة بخلاف ذلك - غير مناسب للتطبيقات التفاعلية
التخزين المؤقت متعدد المستويات
أنظمة الإنتاج غالباً ما تنفذ تخزيناً مؤقتاً متعدد المستويات:
- ذاكرة HBM في GPU: التسلسلات النشطة التي يتم توليدها حالياً
- ذاكرة RAM في CPU: التسلسلات الدافئة النشطة مؤخراً
- SSD NVMe: التسلسلات الباردة لإعادة الاستخدام المحتملة
سياسات الترقية والتخفيض الذكية تنقل ذاكرة التخزين المؤقت بين المستويات بناءً على أنماط الوصول.
التوجيه الواعي بذاكرة التخزين المؤقت KV
الاستدلال الموزع يستفيد من توجيه الطلبات إلى pods التي تحتفظ بذاكرة التخزين المؤقت ذات الصلة:
إطار عمل llm-d
إطار عمل أصلي لـ Kubernetes مع توجيه واعٍ بذاكرة التخزين المؤقت KV:¹¹
# تكوين توجيه ذاكرة التخزين المؤقت في llm-d
routing:
strategy: kv_cache_aware
cache_hit_weight: 0.8
load_balance_weight: 0.2
نتائج الأداء: - معدل إصابة ذاكرة التخزين المؤقت 87% مع أحمال العمل الثقيلة بالبادئات - وقت أسرع للرمز الأول بنسبة 88% لإصابات ذاكرة التخزين المؤقت الدافئة - تقليل كبير في الحسابات المتكررة عبر المجموعة
أنماط التنفيذ
الجلسات الثابتة: توجيه الطلبات من نفس المحادثة إلى نفس pod.
تجزئة البادئة: تجزئة موجهات النظام لتحديد توجيه pod، مما يضمن إصابات ذاكرة التخزين المؤقت للبادئات.
التوجيه الواعي بالحمل: موازنة محلية ذاكرة التخزين المؤقت مقابل استخدام pod لمنع النقاط الساخنة.
دليل التحجيم للإنتاج
تقدير الذاكرة
احسب متطلبات ذاكرة التخزين المؤقت KV قبل النشر:
def estimate_kv_cache_memory(
num_layers: int,
hidden_dim: int,
num_kv_heads: int,
head_dim: int,
max_seq_len: int,
max_batch_size: int,
precision_bytes: int = 2, # FP16
) -> float:
"""تقدير ذاكرة التخزين المؤقت KV بالـ GB"""
per_token = num_layers * 2 * num_kv_heads * head_dim * precision_bytes
total = per_token * max_seq_len * max_batch_size
return total / (1024 ** 3)
# مثال Llama 3.1-70B
memory_gb = estimate_kv_cache_memory(
num_layers=80,
hidden_dim=8192,
num_kv_heads=8, # GQA
head_dim=128,
max_seq_len=8192,
max_batch_size=32,
)
print(f"ذاكرة التخزين المؤقت KV: {memory_gb:.1f} GB")
تخطيط السعة
قاعدة عامة: احجز 40-60% من ذاكرة GPU لذاكرة التخزين المؤقت KV، والباقي لأوزان النموذج والتنشيطات.
مثال H100 80GB: - أوزان النموذج (70B FP16): حوالي 140GB ← 2x GPU مع التوازي الموتري - المتاح لكل GPU لذاكرة التخزين المؤقت: حوالي 30-35GB بعد الأوزان والنفقات العامة - الحد الأقصى للتسلسلات المتزامنة: يعتمد على متوسط طول السياق
أولوية التحسين
- تفعيل PagedAttention: افتراضي في vLLM، مكسب كفاءة كبير
- تفعيل التخزين المؤقت للبادئات: إذا كانت أحمال العمل لديها بادئات مشتركة
- تنفيذ ذاكرة التخزين المؤقت KV بصيغة FP8: عند استخدام وحدات GPU من Hopper/Blackwell
- إضافة التوجيه الواعي بذاكرة التخزين المؤقت: على نطاق المجموعة مع الاستدلال الموزع
- النظر في التفريغ: فقط عندما تثبت ذاكرة GPU أنها غير كافية
المراقبة والملاحظة
تتبع مقاييس ذاكرة التخزين المؤقت KV في الإنتاج:
المقاييس الرئيسية: - استخدام ذاكرة التخزين المؤقت: نسبة ذاكرة التخزين المؤقت المخصصة المستخدمة - معدل إصابة ذاكرة التخزين المؤقت: فعالية التخزين المؤقت للبادئات - معدل الإخلاء: تكرار فيضان ذاكرة التخزين المؤقت - تجزئة الذاكرة: المساحة المهدرة ضمن الكتل المخصصة
نقطة نهاية مقاييس vLLM:
# مقاييس Prometheus متاحة على /metrics
# kv_cache_usage_percent
# kv_cache_total_blocks
# kv_cache_used_blocks
# prefix_cache_hit_rate
حدود التنبيه: - استخدام ذاكرة التخزين المؤقت > 90%: توسيع السعة أو تقليل حجم الدفعة - معدل الإصابة < 50%: مراجعة تكوين التخزين المؤقت للبادئات - معدل إخلاء عالٍ: زيادة تخصيص الذاكرة أو تحسين الموجهات
يمكن للمؤسسات التي تنشر استدلال نماذج اللغة الكبيرة في الإنتاج الاستفادة من خبرة Introl في البنية التحتية لتخطيط سعة GPU والتحسين عبر النشر العالمي.
ضرورة كفاءة الذاكرة
يمثل تحسين ذاكرة التخزين المؤقت KV أحد أعلى التحسينات تأثيراً لنشر نماذج اللغة الكبيرة في الإنتاج. PagedAttention وحدها توفر تحسينات في الإنتاجية 2-4 مرات—ما يعادل مضاعفة أو تربيع استثمار GPU دون تكلفة عتاد إضافية.
مشهد التحسين يستمر في التطور. FastGen من Microsoft أظهر تقليلاً في الذاكرة بنسبة 50% من خلال الضغط التكيفي. التخزين المؤقت الموجه بالإنتروبيا يخصص الميزانية بذكاء عبر الطبقات. التوجيه الواعي بذاكرة التخزين المؤقت يتيح مكاسب كفاءة على نطاق المجموعة كانت مستحيلة سابقاً.
للمؤسسات التي تشغل الاستدلال على نطاق واسع، يجب أن يكون تحسين ذاكرة التخزين المؤقت KV من بين أول التحسينات التي يتم تقييمها. التقنيات تتطلب الحد الأدنى