دانيلا (⁦Dayfing⁩)
العودة إلى المقالات
2,968 كلمة15 د

عتاد تشغيل LLM محليًا في 2026: الذاكرة VRAM وعرض نطاق الذاكرة والتكميم

لتشغيل نموذج لغوي مفتوح الأوزان محليًا، يحتاج الجهاز الذي ينفذ الحسابات إلى ذاكرة سريعة تكفي ثلاثة أمور: الأوزان المكمّمة، وذاكرة KV المؤقتة المناسبة لطول السياق وعدد الطلبات المتزامنة، وهامش لبيئة التشغيل. سعة الذاكرة تحدد النماذج التي يمكن تحميلها، وعرض نطاق الذاكرة يحدد سرعة توليد النص، وقدرة الحوسبة تحدد سرعة قراءة الموجّهات الطويلة. وكقاعدة عامة، تشغّل بطاقة GPU بسعة 16 GB نماذج فئة 8B جيدًا، وتكفي سعة 24 إلى 32 GB لنماذج فئة 32B بتكميم 4 بت، أما نماذج فئة 70B فتحتاج إلى نحو 48 GB أو أكثر، أي بطاقة محطة عمل أو بطاقتين أو جهازًا بذاكرة موحّدة.

معادلة الذاكرة

يبدأ كل تقدير من مجموع واحد:

memory ≈ weights + KV cache + runtime overhead

weights  = parameters × bits per weight / 8
KV cache = 2 × layers × kv_heads × head_dim × bytes per element × tokens in flight

يحتاج نموذج بحجم 70.6 مليار معامل إلى نحو 141 GB للأوزان بدقة 16 بت، وإلى نحو 42 GB عند 4.8 بت لكل وزن.

تخزّن ذاكرة KV المؤقتة مفاتيح الانتباه وقيمه لكل رمز يحتفظ به النموذج في السياق، لذلك تنمو مع كل رمز من الموجّه والإجابة. يغطي العامل 2 المفاتيح والقيم، وتأتي بقية الحدود من ملف config.json الخاص بالنموذج: num_hidden_layers وnum_key_value_heads وhead_dim. تستخدم معظم النماذج الحالية آلية grouped-query attention، حيث يكون عدد رؤوس KV أقل بكثير من عدد رؤوس الاستعلام.

تشمل الكلفة الإضافية لبيئة التشغيل سياق CUDA أو ROCm أو Metal ومخازن الحساب المؤقتة. خصص 1 إلى 2 GiB لكل جهاز عند استخدام llama.cpp، إذ يترك توزيعه التلقائي افتراضيًا هامشًا قدره 1024 MiB لكل جهاز، وخصص أكثر من ذلك للخوادم التي تحجز الذاكرة مسبقًا للدفعات الكبيرة. وفي الذاكرة الموحّدة اترك مساحة لنظام التشغيل أيضًا.

ذاكرة KV المؤقتة تنمو مع السياق والتزامن

تنتج كلفة الرمز الواحد مباشرة من ملفات الإعداد:

Llama 3.1 8B:   2 × 32 layers × 8 kv_heads × 128 head_dim × 2 bytes = 128 KiB per token
Qwen3-32B:      2 × 64 layers × 8 kv_heads × 128 head_dim × 2 bytes = 256 KiB per token
Llama 3.3 70B:  2 × 80 layers × 8 kv_heads × 128 head_dim × 2 bytes = 320 KiB per token

عند 32,768 رمزًا يصبح الحجم 4 و8 و10 GiB بذاكرة مؤقتة بدقة 16 بت. وعند 131,072 رمزًا تبلغ ذاكرة نموذج 70B وحدها 40 GiB، أي ما يعادل حجم أوزانه المكمّمة بـ4 بت.

التزامن يضاعف الذاكرة المؤقتة: أربعة مستخدمين لكل منهم محادثة من 16K رمز يحتاجون ما تحتاجه محادثة واحدة من 64K. يبني vLLM مجمّع KV من الذاكرة المتبقية بعد تحميل الأوزان، بينما يوزّع llama-server ميزانية سياق واحدة (-c) على خاناته (--parallel). ويشرح دليل خوادم الاستدلال المحلي لنماذج LLM كيف يدير كل خادم هذا المجمّع.

توجد وسيلتان لتقليص الذاكرة المؤقتة. ذاكرة مؤقتة بدقة 8 بت، عبر -ctk q8_0 -ctv q8_0 في llama.cpp أو --kv-cache-dtype fp8 في vLLM، تخفضها إلى النصف تقريبًا، وحصر السياق في الطول الذي يستخدمه التطبيق فعلًا لا يكلّف شيئًا. تخزّن طبقات النافذة المنزلقة والانتباه الهجين وآلية multi-head latent attention بيانات أقل لكل رمز، لذا راجع حجم مخزن KV الذي يطبعه llama.cpp عند تحميل النموذج.

أمثلة محسوبة لنماذج 8B و32B و70B

تسرد وثائق التكميم في llama.cpp عدد البتات لكل وزن كما قيس على Llama 3.1 8B: ‏Q8_0 ‏8.50، وQ6_K ‏6.56، وQ5_K_M ‏5.70، وQ4_K_M ‏4.89، وIQ4_XS ‏4.46، وQ3_K_M ‏4.00. وتأتي النماذج الأكبر أقل قليلًا، فملفات Q4_K_M المنشورة لـQwen3-32B وLlama 3.3 70B تعادل نحو 4.8. يطبق هذا البرنامج المعادلة على سياق 32K وكلفة إضافية قدرها 1.5 GiB:

GiB = 2**30

def weights_gib(params, bits_per_weight):
    return params * bits_per_weight / 8 / GiB

def kv_gib(layers, kv_heads, head_dim, tokens, bytes_per_elem=2):
    return 2 * layers * kv_heads * head_dim * bytes_per_elem * tokens / GiB

models = {
    "Llama 3.1 8B": (8.03e9, 32),
    "Qwen3-32B": (32.76e9, 64),
    "Llama 3.3 70B": (70.55e9, 80),
}

for name, (params, layers) in models.items():
    kv = kv_gib(layers, 8, 128, 32768)
    for quant, bpw in (("BF16", 16.0), ("Q8_0", 8.5), ("Q4_K_M", 4.85)):
        w = weights_gib(params, bpw)
        print(f"{name:14} {quant:7} weights {w:6.1f} GiB  KV@32K {kv:5.1f} GiB  total {w + kv + 1.5:6.1f} GiB")
Llama 3.1 8B   BF16    weights   15.0 GiB  KV@32K   4.0 GiB  total   20.5 GiB
Llama 3.1 8B   Q8_0    weights    7.9 GiB  KV@32K   4.0 GiB  total   13.4 GiB
Llama 3.1 8B   Q4_K_M  weights    4.5 GiB  KV@32K   4.0 GiB  total   10.0 GiB
Qwen3-32B      BF16    weights   61.0 GiB  KV@32K   8.0 GiB  total   70.5 GiB
Qwen3-32B      Q8_0    weights   32.4 GiB  KV@32K   8.0 GiB  total   41.9 GiB
Qwen3-32B      Q4_K_M  weights   18.5 GiB  KV@32K   8.0 GiB  total   28.0 GiB
Llama 3.3 70B  BF16    weights  131.4 GiB  KV@32K  10.0 GiB  total  142.9 GiB
Llama 3.3 70B  Q8_0    weights   69.8 GiB  KV@32K  10.0 GiB  total   81.3 GiB
Llama 3.3 70B  Q4_K_M  weights   39.8 GiB  KV@32K  10.0 GiB  total   51.3 GiB

يتسع نموذج 8B لبطاقة 12 GB بصيغة Q4_K_M ولبطاقة 16 GB بصيغة Q8_0، لذلك لا يوجد سبب يتعلق بالسعة للنزول تحت Q6_K على بطاقة 16 GB. ويحتاج نموذج 32B بصيغة Q4_K_M إلى بطاقة 32 GB لذاكرة مؤقتة كاملة بطول 32K، أما على 24 GB فيتسع مع سياق 16K وذاكرة مؤقتة بدقة 8 بت، ويشغل نحو 22 GiB. ويحتاج نموذج 70B بصيغة Q4_K_M إلى نحو 51 GiB: بطاقتان بسعة 32 GB، أو بطاقة محطة عمل بسعة 72 أو 96 GB، أو ذاكرة موحّدة بسعة 64 GB أو أكثر. وتشغّله بطاقة 48 GB بسياق يقارب 8K، بينما تتطلب صيغة Q8_0 بطاقة 96 GB أو ذاكرة موحّدة بسعة 128 GB.

صيغ التكميم وكلفتها

يخزّن التكميم الأوزان بعدد أقل من البتات مع معاملات قياس لكل كتلة. فهو يوفر الذاكرة ويسرّع التوليد، لكنه يضيف خطأً.

صيغ K-quants وI-quants في GGUF

GGUF هي صيغة ملفات llama.cpp، ويستخدمها أيضًا Ollama وLM Studio. تكمّم صيغ K-quants مثل Q4_K_M وQ6_K الأوزان على شكل كتل، وتبقي الموترات الحساسة بنوع أدق. أما صيغ I-quants مثل IQ4_XS فتضغط الأوزان بشكل أشد. وتستفيد العائلتان من مصفوفة أهمية (imatrix) تُحسب على نص معايرة، وتقيس وثائق llama.cpp خسارتهما عبر perplexity وتباعد كولباك-لايبلر. تعمل GGUF على CUDA وROCm وVulkan وMetal وCPU، ما يجعلها الخيار الأكثر قابلية للنقل.

8 بت وFP8

Q8_0 هي صيغة GGUF ذات 8 بت. أما على خوادم GPU فالصيغة الشائعة ذات 8 بت هي FP8. وبحسب وثائق FP8 في vLLM، تتطلب حسابات FP8 قدرة حوسبة NVIDIA من 8.9 فما فوق (Ada Lovelace وHopper وBlackwell)، وتلجأ البطاقات الأقدم إلى نوى W8A16 للأوزان فقط، كما تخفض FP8 ذاكرة النموذج إلى النصف مع إنتاجية أعلى حتى 1.6 مرة وأثر ضئيل على الدقة.

AWQ وGPTQ والفاصلة العائمة بـ4 بت

AWQ وGPTQ طريقتان للتكميم بـ4 بت للأوزان فقط، مخصصتان لخوادم GPU مثل vLLM وSGLang. تعايران معاملات القياس لمجموعات من الأوزان، وتبقيان التفعيلات بدقة 16 بت، وكثير من ناشري النماذج يقدمون هذه النسخ مباشرة، مثل Qwen/Qwen3-32B-AWQ. وتضيف بطاقات Blackwell حسابات FP4 أصلية، وتخزن نماذج gpt-oss من OpenAI أوزان الخبراء بصيغة MXFP4.

كم من الجودة تخسر

يصعب عادة تمييز صيغ 8 بت عن BF16. وتضيف Q6_K وQ5_K_M زيادة صغيرة لكن قابلة للقياس في perplexity، وتبقى خيارًا آمنًا إذا سمحت الذاكرة. أما 4 بت فهي الحل الوسط المعتاد: الخسارة قابلة للقياس، وتظهر أكثر حيث تهم الأخطاء الصغيرة، مثل الشيفرة والرياضيات والاسترجاع الدقيق للمعلومات من سياق طويل. وتحت 4 بت يتزايد الخطأ بسرعة، وتتضرر النماذج الصغيرة أكثر من الكبيرة. غالبًا ما يتفوق نموذج أكبر بـ4 بت على نموذج أصغر بـ8 بت ضمن الذاكرة نفسها، لكن اختبر ذلك على مهامك كما يشرح دليل تقييم وكلاء الذكاء الاصطناعي.

عرض النطاق يحدد سرعة التوليد والحوسبة تحدد سرعة قراءة الموجّه

توليد رمز واحد بنموذج كثيف يقرأ كل وزن مرة واحدة، إضافة إلى ذاكرة KV المؤقتة للسياق الحالي. وعند حجم دفعة 1 يهيمن نقل البيانات، لذلك يكون السقف بسيطًا:

decode tokens/s ≤ memory bandwidth / bytes read per token
bytes read per token ≈ weight bytes (dense) or active-expert bytes (MoE) + KV cache bytes at current depth

يبلغ حجم ملف Llama 3.3 70B Q4_K_M ‏42.5 GB، لذا يكون السقف نحو 42 رمزًا في الثانية عند 1792 GB/s، و14 عند 614 GB/s، و6 عند 256 GB/s. ويبلغ ملف 8B Q4_K_M ‏(4.9 GB) نحو 91 رمزًا في الثانية عند 448 GB/s. تعمل بيئات التشغيل الفعلية دون هذه السقوف، وتتباطأ مع نمو السياق: عند 32K تضيف ذاكرة نموذج 70B المؤقتة نحو 10.7 GB من القراءة لكل رمز.

ويُظهر جدول التكميم في llama.cpp هذا النمط على جهاز واحد مع Llama 3.1 8B: يرتفع التوليد من نحو 29 رمزًا في الثانية بصيغة F16 إلى 51 بصيغة Q8_0 و72 بصيغة Q4_K_M، بينما تبقى معالجة الموجّه بين نحو 700 و920 رمزًا في الثانية لجميع الصيغ.

تعمل معالجة الموجّه على دفعات من مئات الرموز، فتخدم كل قراءة للأوزان رموزًا كثيرة ويصبح أداء عمليات المصفوفات هو الحد. ويبلغ حجم العمل نحو 2 × parameters × prompt tokens عملية، أي قرابة 5 × 10^14 لموجّه من 8000 رمز على نموذج 32B. وهذا يحدد زمن الوصول إلى أول رمز في retrieval-augmented generation، حيث تحمل الموجّهات مقاطع مسترجعة كما في تصميم البحث الهجين باستخدام pgvector، وكذلك لدى وكلاء البرمجة الذين يرسلون ملفات كبيرة. راجع المواصفتين معًا: لدى NVIDIA DGX Spark سقف توليد متواضع عند 273 GB/s، بينما تقدّر NVIDIA قدرة شريحة GB10 بما يصل إلى 1 PFLOP من حسابات FP4 المتناثرة.

تخدم المعالجة الدفعية تسلسلات كثيرة بكل قراءة للأوزان، لذا تستمر إنتاجية الخادم في الارتفاع حتى تنفد الحوسبة أو الذاكرة المؤقتة. أما حلقات الوكلاء فيهمّها زمن استجابة الطلب الواحد، لأن كل خطوة تنتظر الاستدعاء السابق، كما يوضح دليل معمارية وكيل الذكاء الاصطناعي في الإنتاج.

تفصل نماذج mixture-of-experts ‏(MoE) بين القيدين: الذاكرة تتبع العدد الكلي للمعاملات، وسرعة التوليد تتبع المعاملات النشطة. يضم gpt-oss-120b ‏117 مليار معامل منها 5.1 مليار نشطة، وتذكر بطاقة النموذج أنه يتسع لبطاقة GPU واحدة بسعة 80 GB، ويبلغ حجم ملفه MXFP4 GGUF ‏63.4 GB. ويعمل gpt-oss-20b ضمن 16 GB. لهذا تبقى الأجهزة ذات السعة الكبيرة وعرض النطاق المتوسط مفيدة.

خيارات العتاد حسب القدرات

بطاقات NVIDIA حسب فئة VRAM

تحظى بطاقات NVIDIA بأوسع دعم من بيئات التشغيل، لأن vLLM وSGLang وTensorRT-LLM وllama.cpp تعامل CUDA بوصفها المنصة المرجعية. قارن السعة أولًا ثم عرض النطاق داخل الفئة الواحدة: تشغّل بطاقات GeForce بسعة 16 GB النماذج نفسها، لكن عرض نطاق RTX 5080 يزيد على ضعف عرض نطاق RTX 5060 Ti. وتستوعب RTX PRO 6000 Blackwell نموذج 70B بدقة 8 بت على بطاقة واحدة. ولا تدعم بطاقات GeForce RTX 50 تقنية NVLink، لذا تمر حركة البيانات بين عدة بطاقات عبر PCIe.

الذاكرة الموحّدة: Apple Silicon وRyzen AI Max وDGX Spark

تمنح الأنظمة ذات الذاكرة الموحّدة المعالج وبطاقة الرسوميات مجمّع LPDDR مشتركًا: ذاكرة للنموذج أكبر بكثير مما في بطاقات المستهلكين، مع عرض نطاق أقل من بطاقة GDDR7 سريعة، باستثناء أعلى شرائح Apple. في Mac Studio تقدم Apple شريحة M5 Ultra بدءًا من 96 GB، وتعلن أن إعداد 512 GB يصل في أواخر أكتوبر، وتدعم ربط عدة أجهزة في عنقود عبر Thunderbolt 5 مع RDMA، ومن بيئات التشغيل المتاحة llama.cpp على Metal وMLX. ويستخدم معالج Ryzen AI Max+ 395 من AMD واجهة LPDDR5x-8000 بعرض 256 بت، أي 256 GB/s، وينتقل Ryzen AI Max+ PRO 495 إلى LPDDR5x-8533 مع أنظمة OEM معلنة للربع الثالث من 2026، ويعمل llama.cpp على كليهما عبر ROCm أو Vulkan. أما NVIDIA DGX Spark فيشغّل حزمة CUDA ويضم منفذ ConnectX-7 بسرعة 200 Gbps لربط عدة وحدات.

وفق معادلة السقف، تشغّل هذه الأجهزة نماذج 70B الكثيفة بسرعات تتراوح بين بضعة رموز وبضع عشرات من الرموز في الثانية، وتشغّل نماذج MoE أسرع بكثير. وتعمل بطاقاتها الرسومية بميزانية طاقة أقل بكثير من بطاقة بقدرة 575 W، لذا قِس زمن الوصول إلى أول رمز بموجّهاتك الحقيقية.

المنصة الذاكرة المتاحة للنموذج عرض النطاق القدرة نموذج كثيف بسياق 32K
GeForce RTX 5060 Ti 16 GB 16 GB GDDR7 448 GB/s 180 W 8B بصيغة Q8_0
GeForce RTX 5070 Ti / 5080 16 GB GDDR7 896 / 960 GB/s 300 / 360 W 8B بصيغة Q8_0
GeForce RTX 5090 32 GB GDDR7 1792 GB/s 575 W 32B بصيغة Q4_K_M
RTX PRO 4000 / 4500 Blackwell 24 / 32 GB GDDR7 ECC 672 / 896 GB/s 145 / 200 W 32B بدقة 4 بت
RTX PRO 5000 Blackwell 48 أو 72 GB GDDR7 ECC 1344 GB/s 300 W 32B بصيغة Q8_0، و70B بصيغة Q4_K_M على 72 GB
RTX PRO 6000 Blackwell 96 GB GDDR7 ECC 1792 GB/s 600 W أو 300 W ‏(Max-Q) 70B بصيغة Q8_0
DGX Spark 128 GB LPDDR5x 273 GB/s مزود طاقة 240 W 70B بصيغة Q8_0
Ryzen AI Max+ 395 128 GB، حتى 96 GB للرسوميات 256 GB/s 45 إلى 120 W 70B بصيغة Q6_K
Ryzen AI Max+ PRO 495 192 GB، حتى 160 GB للرسوميات نحو 273 GB/s 45 إلى 120 W 70B بصيغة Q8_0
Mac Studio, M5 Max حتى 128 GB حتى 614 GB/s 480 W حدًا أقصى للنظام 70B بصيغة Q8_0
Mac Studio, M5 Ultra حتى 512 GB 1.2 TB/s 480 W حدًا أقصى للنظام 70B بصيغة BF16

يأتي العمود الأخير من الأمثلة المحسوبة أعلاه لمستخدم واحد. ويصف الجدول القدرات، لا القيمة مقابل السعر.

عدة بطاقات GPU والتفريغ إلى المعالج

تضاعف بطاقتان السعة، لكن السرعة تعتمد على طريقة التقسيم. في التقسيم حسب الطبقات، وهو الوضع الافتراضي في llama.cpp، تحتفظ كل بطاقة بمجموعة من الطبقات وذاكرتها المؤقتة KV، وعند حجم دفعة 1 تعمل البطاقات بالتناوب: سعة أكبر وسرعة توليد كما هي. لا يعبر PCIe لكل رمز سوى تفعيلات صغيرة، لذا تكفي وصلات x8 أو حتى x4. أما في التوازي الموتري (--tensor-parallel-size 2 في vLLM) فتقرأ البطاقتان حصتيهما من كل طبقة في الوقت نفسه، ما يرفع السقف، لكن كل طبقة تتزامن عبر PCIe. صُمم التوازي الموتري في vLLM لبطاقات متطابقة، ويجب أن يقسم عدد البطاقات عدد رؤوس الانتباه في النموذج.

يُبقي التفريغ إلى المعالج بعض الطبقات في ذاكرة النظام حيث ينفذها المعالج. ويصبح زمن الرمز مجموعًا: البايتات على GPU مقسومة على عرض نطاق VRAM، مضافًا إليها البايتات على المعالج مقسومة على عرض نطاق RAM. تقدم ذاكرة DDR5-6000 ثنائية القناة 96 GB/s نظريًا (قناتان × 8 بايت × 6000 MT/s)، ويشرح دليل ذاكرة DDR5 كيف تتكامل القنوات والترددات. نموذج 70B Q4_K_M يضع 24 GB على GPU و18.5 GB في RAM يبقى دون 5 رموز في الثانية. التفريغ يحل مشكلة السعة، لا السرعة.

تتحمل نماذج MoE التفريغ أفضل بكثير. يبقي الخياران --cpu-moe و--n-cpu-moe N أوزان الخبراء في RAM بينما يبقى الانتباه وذاكرة KV المؤقتة على GPU، ولا يُقرأ في كل رمز إلا الخبراء النشطون. وتضبط الإصدارات الحديثة من llama.cpp عدد الطبقات تلقائيًا عندما لا يُحدَّد -ngl (الخيار --fit مفعّل افتراضيًا)، فحدده صراحة إذا أردت نتائج قابلة للتكرار. تعرض الأوامر التالية نموذجًا كثيفًا مفرّغًا جزئيًا، ونموذج MoE خبراؤه في RAM، وتقسيمًا حسب الطبقات يميل نحو البطاقة الأكبر:

llama-server -m Llama-3.3-70B-Instruct-Q4_K_M.gguf -c 16384 -ngl 48 -fa on

llama-server -hf ggml-org/gpt-oss-120b-GGUF -c 32768 -ngl all --n-cpu-moe 24 -fa on

llama-server -m Qwen_Qwen3-32B-Q8_0.gguf -c 32768 -ngl all --split-mode layer --tensor-split 3,2

الطاقة والتبريد ومسارات PCIe وذاكرة النظام

تذكر NVIDIA لبطاقة GeForce RTX 5090 قدرة رسومية قدرها 575 W وقدرة نظام مطلوبة قدرها 1000 W. وتحتفظ نسخة Max-Q من RTX PRO 6000 بقدرة 300 W بالذاكرة نفسها التي في طراز 600 W، وهذا مهم عند تركيب عدة بطاقات في هيكل واحد. ولأن التوليد ينتظر الذاكرة، جرّب حدًا أدنى للطاقة عبر nvidia-smi -pl واحتفظ بالقيمة التي لا تكاد تتغير عندها سرعة التوليد.

الاستدلال حمل مستمر، وبطاقتان بتبريد مفتوح في منفذين متجاورين تنفخ كل منهما الهواء الساخن على الأخرى. افحص الترددات والحرارة والقدرة خلال تشغيل مدته 30 دقيقة.

تستخدم بطاقات GeForce RTX 50 وRTX PRO Blackwell واجهة PCIe 5.0 x16. وتوفر منصات الحواسيب المكتبية الاستهلاكية عادة وصلة رسوميات واحدة x16 تقسمها بعض اللوحات الأم إلى x8/x8، بينما يعمل المنفذ الموصول بالشرائح المساعدة غالبًا بوضع x4. يتحمل التقسيم حسب الطبقات ذلك، أما التوازي الموتري وتحميل النماذج فيفضلان x8 أو أعرض، وهو ما توفره منصات محطات العمل. وقد ينخفض جيل الوصلة المعروض أثناء خمول البطاقة، لذا افحصه تحت الحمل.

اجعل ذاكرة النظام لا تقل عن حجم أكبر ملف نموذج تحمّله، مع مساحة لنظام التشغيل، وأكبر من ذلك بكثير إذا كنت تفرّغ طبقات. تتراوح ملفات النماذج بين نحو 5 GB وأكثر من 100 GB بكثير، لذلك يختصر قرص سريع أزمنة التحميل، ويتناول دليل شراء أقراص NVMe SSD هذا النمط من الاستخدام.

nvidia-smi --query-gpu=name,pcie.link.gen.current,pcie.link.width.current,power.draw,memory.used --format=csv -l 1

nvidia-smi dmon -s pucvmt -d 1

sudo nvidia-smi -pl 450

قِس أداء جهازك بنفسك

نادرًا ما تطابق الأرقام المنشورة ملف نموذجك وسياقك وبرنامج التشغيل وإصدار بيئة التشغيل لديك، لذا قِس بنفسك وقارن النتيجة بمعادلة السقف. في أداة llama-bench يحدد -p طول الموجّه، و-n عدد الرموز المولدة، ويملأ -d ذاكرة KV المؤقتة مسبقًا حتى عمق معين، فيظهر كيف تنخفض السرعة مع طول المحادثة. ويقارن الأمر الثاني بين ذاكرة مؤقتة بدقة 16 بت وأخرى بدقة 8 بت:

llama-bench -m Qwen_Qwen3-32B-Q4_K_M.gguf -p 512,4096 -n 128 -d 0,16384 -fa on -r 3 -o md

llama-bench -m Qwen_Qwen3-32B-Q4_K_M.gguf -p 4096 -n 128 -d 16384 -ctk f16,q8_0 -ctv f16,q8_0 -fa on

ثم اختبر التزامن. تعمل vllm bench serve مع نقاط النهاية المتوافقة مع OpenAI، وتقيس زمن الوصول إلى أول رمز، وزمن كل رمز ناتج، والتأخير بين الرموز، والإنتاجية الكلية:

vllm serve Qwen/Qwen3-32B-AWQ --max-model-len 32768

vllm bench serve --backend openai --base-url http://127.0.0.1:8000 --model Qwen/Qwen3-32B-AWQ --dataset-name random --random-input-len 4096 --random-output-len 256 --num-prompts 200 --max-concurrency 8

اقسم سرعة التدفق الواحد المقيسة على السقف. فإذا جاءت النسبة منخفضة على نحو غير معتاد، فابحث عن طبقات فُرّغت إلى المعالج دون أن تنتبه، أو وصلة PCIe بعرض منقوص، أو خنق حراري أو كهربائي، أو واجهة خلفية بطيئة.

قائمة تحقق للتقدير

  • سجّل من config.json عدد المعاملات والطبقات ورؤوس KV وبُعد الرأس.
  • اختر التكميم: 8 بت إن اتسعت الذاكرة، ثم Q6_K أو Q5_K_M، ثم 4 بت، ولا تنزل أدنى من ذلك إلا بعد الاختبار.
  • حدد طول السياق وعدد الطلبات المتزامنة، واحسب ذاكرة KV المؤقتة، وقرر إن كانت ذاكرة مؤقتة بدقة 8 بت مقبولة.
  • أضف 1 إلى 2 GiB لكل جهاز، وهامشًا لنظام التشغيل في الذاكرة الموحّدة.
  • استبعد المنصات التي يقل سقف التوليد فيها عن السرعة التي تحتاجها.
  • للموجّهات الطويلة في RAG أو وكلاء البرمجة، خذ الحوسبة في الحسبان وقِس زمن الوصول إلى أول رمز.
  • في نماذج MoE، قدّر الذاكرة بالعدد الكلي للمعاملات والسرعة بالمعاملات النشطة.
  • افحص الطاقة والتبريد ومسارات PCIe وذاكرة النظام والتخزين قبل شراء بطاقة ثانية.
  • قِس الأداء، وقلّص الفجوة مع السقف قبل إضافة عتاد جديد.

مقالات أخرى