Key Takeaways
- تعطيل التسجيل/التصحيح (سهل): ~10% تحسّن سرعة.
- استخدام تكميم Q4 (سهل): السرعة نفسها، VRAM أقل.
- تحسين حجم الدفعة (متوسط): 2-3× سرعة للمعالجة الدفعية.
- استخدام vLLM بدلاً من Ollama (صعب): 2-5× سرعة للطلبات المتزامنة.
- استخدام ذاكرة GPU بنسبة 90%+ (متوسط): 15-20% تحسّن سرعة.
- بدمج جميع التقنيات: ~2-3× تسارع إجمالي.
كيف يؤثر استخدام ذاكرة GPU على السرعة؟
افتراضياً، تستخدم معظم الأدوات 70–80% من VRAM في GPU، تاركةً ذاكرة حرة غير مستخدمة. رفعها إلى 90–95% يحسّن السرعة بنسبة 15–20% بالسماح للمحرك بتخصيص مزيد من ذاكرة KV المؤقتة مسبقاً:
# vLLM: increase GPU memory utilization
vllm serve meta-llama/Llama-2-7b-hf \
--gpu-memory-utilization 0.95
# Ollama: environment variable
export OLLAMA_GPU_THRESHOLD=0.95 # Use 95% of GPU
ollama run llama3.2:3b
# LM Studio: Settings → GPU acceleration slider (move to 100%)أي حجم دفعة يعظّم الإنتاجية؟
للمعالجة الدفعية (مطالبات متعددة)، رفع حجم الدفعة من 1 إلى 32 يحقق تحسّن إنتاجية بمقدار 2–4×.
طلب فردي = استخدام محدود لخط الأنابيب. دفعة من 32 طلباً = 2–4× إنتاجية.
المفاضلة: زمن استجابة أعلى لكل طلب فردي (تنتظر اكتمال الدفعة).
| حجم الدفعة | الإنتاجية | زمن الاستجابة/الطلب | حالة الاستخدام |
|---|---|---|---|
| 1 (فردي) | 50 رمز/ثانية | أدنى | دردشة في الوقت الفعلي |
| 8 | 120 رمز/ثانية | مقبول | تزامن خفيف |
| 32 | 200 رمز/ثانية | عالٍ | API دفعي |
| 64+ | 250+ رمز/ثانية | عالٍ جداً | دفعات دون اتصال |
أي محرك استدلال هو الأسرع: vLLM مقابل Ollama مقابل llama.cpp؟
vLLM: أسرع بـ 5–10× من Ollama للطلبات المتزامنة — استخدمه لواجهات API الإنتاجية التي تخدم مستخدمين متعددين.
llama.cpp: الأسرع للطلبات الفردية على العتاد الاستهلاكي — استخدمه للإعدادات المحلية الشخصية.
Ollama: أفضل تجربة تطوير لإعدادات المستخدم الواحد؛ مماثل لـ llama.cpp للطلبات الفردية.
Text-Generation-WebUI: الأبطأ، لكن بميزات أكثر — للتجربة فقط، لا للإنتاج.
هل يسرّع التكميم الاستدلال فعلاً؟
على وحدات GPU الحديثة (سلسلة RTX 40)، يعمل Q4 وQ5 بالسرعة نفسها كـ FP16 — كمّم لتقليل VRAM، لا لكسب السرعة.
فوائد السرعة غير المباشرة للتكميم:
- ملف نموذج أصغر = تحميل بدء بارد أسرع من القرص
- عرض نطاق ذاكرة أقل = أسرع قليلاً (10–15%) على العتاد القديم أو محدود الذاكرة
التكميم أساساً لتقليل VRAM، لا لزيادة إنتاجية الرموز الخام.
كم سرعة يمكنك كسبها واقعياً؟
مثال: تحسين نموذج 7B على RTX 4090 — خطوة بخطوة:
| التغيير | السرعة | المكسب التراكمي |
|---|---|---|
| Ollama افتراضي (خط الأساس) | 120 رمز/ثانية | — |
| تعطيل تسجيل التصحيح | 132 رمز/ثانية | +10% |
| ذاكرة GPU ← 95% | 150 رمز/ثانية | +25% إجمالاً |
| التبديل إلى vLLM (دفعات) | 300 رمز/ثانية (دفعات) | +2.5× (دفعات) |
| جميع التحسينات مجتمعة | 300 رمز/ثانية | +2.5× إنتاجية |
الأخطاء الشائعة في تحسين السرعة
- رفع ذاكرة GPU إلى 100%. خطر الأعطال بسبب نفاد الذاكرة. الحد الأقصى الآمن 90-95%.
- خفض حجم الدفعة لكسب السرعة. لا يؤثر حجم الدفعة على زمن استجابة الطلبات الفردية. يساعد الإنتاجية فقط.
- التكميم المفرط لكسب السرعة. Q4 بنفس سرعة FP16 تقريباً. كمّم لتقليل VRAM، لا لكسب السرعة.
- تغيير محرك الاستدلال في منتصف النشر. التبديل Ollama ← vLLM ← llama.cpp يُدخل أخطاء. اختر واحداً وحسّنه.
الأسئلة الشائعة
ما الطريقة الأكثر فعالية لتسريع استدلال نماذج LLM المحلية؟
يوفّر التبديل من Ollama إلى vLLM للطلبات المتزامنة أكبر تسارع منفرد — تحسّن إنتاجية بمقدار 5–10× للمعالجة الدفعية. للطلبات الفردية، رفع استخدام ذاكرة GPU من 70% إلى 90–95% يعطي 15–20% تحسّن سرعة. تعطيل تسجيل التصحيح يضيف 10% إضافية.
هل تحسّن المعالجة الدفعية زمن استجابة الطلبات الفردية؟
لا — يؤثر حجم الدفعة على الإنتاجية (إجمالي الرموز في الثانية عبر جميع الطلبات)، لا على زمن استجابة الطلبات الفردية. لتقليل زمن استجابة طلب، حسّن استخدام ذاكرة GPU واستخدم محركاً أسرع (vLLM أو llama.cpp). الدفعات الأكبر تزيد زمن الانتظار لكل طلب.
كم أسرع vLLM من Ollama؟
للطلبات الفردية، يقدّم vLLM وOllama أداءً متماثلاً (كلاهما يبلغ ~120–150 رمز/ثانية على RTX 4090 بنموذج 7B). للطلبات المتزامنة، vLLM أسرع بـ 5–10× بفضل التجميع المستمر وPagedAttention. استخدم Ollama للإعدادات الشخصية/أحادية المستخدم؛ انتقل إلى vLLM لواجهات API التي تخدم مستخدمين متعددين.
هل يسرّع التكميم الاستدلال؟
الفائدة الرئيسية للتكميم هي تقليل VRAM، لا السرعة. على وحدات GPU من NVIDIA الحديثة (سلسلة RTX 40)، يعمل Q4 وQ5 بنفس سرعة FP16. الفائدة غير المباشرة للسرعة: نموذج Q4 الأصغر يُحمَّل أسرع من القرص ويمكن أن يسمح بأحجام دفعات أكبر قليلاً ضمن ميزانية VRAM نفسها.
أي استخدام ذاكرة GPU ينبغي أن أضبط لأقصى سرعة؟
اضبط استخدام ذاكرة GPU إلى 90–95% في vLLM (`--gpu-memory-utilization 0.92`). يسمح هذا للمحرك بتخصيص مزيد من الذاكرة لذاكرة KV المؤقتة مسبقاً، مما يحسّن الإنتاجية. تجنّب 100% — يسبّب أعطال OOM عندما يتجاوز التوليد التنبؤات. هامش الأمان 5–10% غير قابل للتفاوض.
لماذا يكون LLM المحلي أبطأ بعد المطالبة الأولى؟
تحمّل المطالبة الأولى النموذج في VRAM (بدء بارد)، وقد يستغرق ذلك 10–30 ثانية. المطالبات اللاحقة تعمل بالسرعة الكاملة. أبقِ الخادم قيد التشغيل (لا تعد تشغيله بين الجلسات). مع Ollama، اضبط OLLAMA_KEEP_ALIVE=24h لمنع تفريغ النموذج بعد الخمول.
هل يمكن تسريع الاستدلال بشكل ملحوظ باستخدام CPU فقط؟
يمكن تحقيق مكاسب محدودة: استخدم llama.cpp مع علم -t لضبط عدد الخيوط إلى عدد الأنوية الفيزيائية (لا المنطقية)، وفعّل مجموعتي تعليمات AVX2/AVX-512، واستخدم تكميم Q4_K_M. السقف الواقعي: 8–12 رمز/ثانية على i9 حديث. للدردشة التفاعلية، عتاد GPU هو السبيل الوحيد لزمن استجابة مقبول.
كيف يؤثر طول السياق على سرعة الاستدلال؟
نوافذ السياق الأطول تبطئ الاستدلال لأن آلية الانتباه تتوسع تربيعياً مع طول السياق. مطالبة بسياق 4K أبطأ في المعالجة بـ ~4× من مطالبة بسياق 1K. أبقِ مطالبات النظام دون 500 رمز واستخدم تلخيص السياق للمحادثات الطويلة للحفاظ على السرعة.
ما PagedAttention ولماذا يسرّع vLLM؟
PagedAttention هو نظام إدارة ذاكرة KV المؤقتة في vLLM. بدلاً من تخصيص كتلة ذاكرة ثابتة لكل طلب مسبقاً، يدير الذاكرة ديناميكياً عبر الترقيم — كالذاكرة الافتراضية في نظام التشغيل. يلغي هذا تجزئة VRAM، ويسمح بمزيد من الطلبات المتزامنة، ويحسّن استخدام GPU من ~55% (ساذج) إلى 90%+.
هل هناك فرق سرعة بين صيغتي النموذج GGUF وsafetensors؟
نعم. GGUF (تستخدمه llama.cpp وOllama) مُحسَّن للاستدلال على CPU/GPU الاستهلاكية بتكميم مدمج. safetensors (تستخدمه vLLM وHuggingFace) أسرع للاستدلال على GPU بدقة كاملة. لوحدات GPU من سلسلة RTX 40 التي تشغّل FP16، يتفوق safetensors + vLLM عادةً على GGUF + Ollama بنسبة 10–20%.
المصادر
- دليل تحسين vLLM -- docs.vllm.ai/en/dev_guide/performance_tuning.html
- نصائح أداء Ollama -- github.com/ollama/ollama/blob/main/docs/troubleshooting.md