المنشورات
avatar

#Claude #Codex # جربت تشغيل نموذج LLM محلي على وحدة معالجة رسومات Ryzen Zen3 (مقارنة وأداء Qwen3-8B Heretic بين CPU وGPU) استمر في المحاولة، AMD، استمر في المحاولة Vulkan ظننت أن وحدة المعالجة الرسومية المخصصة للألعاب ليست شيئًا مهمًا، لكنك كنت محقًا يبدو أن عرض النطاق الترددي للذاكرة هو العقبة (بسبب حجم VRAM الصغير واستخدام الذاكرة الرئيسية، ننتظر من Mac M5 Studio) أحدث إصدار من AMD هو Zen6، لذا فإن المعالج المستخدم هنا هو من الجيل الثالث السابق (مدمج مع GPU) ---- # مقارنة وأداء Qwen3-8B Heretic بين CPU وGPU تاريخ القياس: 2026-11-02 / النظام المستهدف: جهاز Ubuntu ## الاستنتاجات - **وحدة المعالجة الرسومية (GPU المدمج في Radeon) أسرع بنسبة 2.5 مرة تقريبًا في تحميل المُحفّز مقارنةً بالـCPU.** - **يكون توليد النصوص أسرع بنسبة 1.1 إلى 1.2 مرة فقط مقارنةً بالـCPU.** إن سرعة التوليد محدودة بسرعة نقل الذاكرة، حيث تشارك وحدة المعالجة الرسومية المدمجة نفس الذاكرة المستخدمة من قبل الـCPU. - في استخدامات مثل OpenClaw التي تتطلب إرسال تعليمات طويلة في كل مرة، فإن **تخزين المُحفّز مؤقتًا** له تأثير أكبر من استخدام GPU، حيث انخفض الوقت من حوالي 7 دقائق إلى حوالي دقيقة واحدة في الطلبات الثانية وما بعدها. ## بيئة القياس | البند | التفاصيل | |---|---| | CPU | AMD Ryzen 7 7730U (8 نوى، 16 خيطًا، Zen 3) | | GPU | وحدة معالجة رسومية مدمجة في CPU (AMD Radeon Graphics، مكافئة لـ Vega 8) | | الذاكرة | 30 جيجابايت (المواصفات: DDR4-3200 ثنائي القناة. لم يتم التحقق من الأداء الفعلي) | | ذاكرة GPU | VRAM مخصص 512 ميجابايت + ذاكرة مشتركة (GTT) حوالي 15.4 جيجابايت. LM Studio يمكنه استخدام 10.59 جيجابايت فقط | | النظام / السائق | Ubuntu 24.04.5 LTS، Mesa 25.2.8 (RADV) | | LM Studio | الإصدار بدون واجهة رسومية (llmster)، llama.cpp 2.66.0 | | وقت تشغيل CPU | `llama.cpp-linux-x86_64-avx2` | | وقت تشغيل GPU | `llama.cpp-linux-x86_64-vulkan-avx2` (توزيع جميع الطبقات على GPU، `--gpu max`) | | النموذج | DreamFast/qwen3-8b-heretic Q4_K_M (5.03 جيجابايت) | | إعدادات التحميل | طول السياق 32768، عدد المعالجات المتزامنة 1 | ## طريقة القياس - أرسلت نفس المُحفّز إلى واجهة برمجة تطبيقات LM Studio (`/api/v0/chat/completions`) وقارنت بين CPU وGPU. - نفذت كل شرط مرتين. في المرة الثانية، يتم إعادة استخدام المُحفّز المُعالج من التخزين المؤقت، لذا استخدمنا **قيمة سرعة التحميل من المرة الأولى**. - سرعة التوليد مستمدة من `tokens_per_second` التي تُعيدها LM Studio. - تم إيقاف التفكير قبل الرد باستخدام `/no_think`، وتم ضبط `temperature` على 0. - بعد قياس GPU، تم تبريد الجهاز لمدة دقيقتين قبل قياس CPU. - النصوص والسجلات موجودة في `~/bench/bench.py` و`~/bench/run.sh` و`~/bench/result.log` على جهاز Ubuntu. ## النتائج ### ملخص المقارنة | المحتوى | البند | CPU | GPU | الفرق | |---|---|---|---|---| | سؤال قصير (24 رمزًا) مع توليد 256 رمزًا | سرعة التوليد | 7.3 رمز/ثانية | 8.2 رمز/ثانية | 1.13 مرة | | | الوقت المستغرق | 35.7 ثانية | 31.4 ثانية | | | مُحفّز بـ 921 رمزًا | سرعة التحميل | 30.5 رمز/ثانية | 76.3 رمز/ثانية | **2.5 مرة** | | | الوقت حتى أول رمز | 30.2 ثانية | 12.1 ثانية | | | | سرعة التوليد | 7.0 رمز/ثانية | 8.0 رمز/ثانية | 1.13 مرة | | مُحفّز بـ 3,621 رمزًا | سرعة التحميل | 35.4 رمز/ثانية | 87.5 رمز/ثانية | **2.5 مرة** | | | الوقت حتى أول رمز | 102.3 ثانية | 41.4 ثانية | | | | سرعة التوليد | 5.9 رمز/ثانية | 7.2 رمز/ثانية | 1.2 مرة | ### تفاصيل قيم القياس | الطريقة | المحتوى | التجربة | المُحفّز | التوليد | الوقت المستغرق | الوقت حتى أول رمز | سرعة التوليد | |---|---|---|---|---|---|---|---| | GPU | سؤال قصير | 1 | 24 | 256 | 31.4 ثانية | 0.50 ثانية | 8.26 | | GPU | سؤال قصير | 2 | 24 | 256 | 31.2 ثانية | 0.12 ثانية | 8.23 | | GPU | مُحفّز حوالي 1,000 | 1 | 921 | 32 | 16.0 ثانية | 12.07 ثانية | 7.97 | | GPU | مُحفّز حوالي 1,000 (مُخزن مؤقتًا) | 2 | 921 | 32 | 4.0 ثانية | 0.14 ثانية | 7.98 | | GPU | مُحفّز حوالي 4,000 | 1 | 3,621 | 32 | 45.7 ثانية | 41.38 ثانية | 7.18 || GPU | مطالبة حوالي 4,000 | 2 (ذاكرة مؤقتة) | 3,621 | 32 | 4.5 ثانية | 0.14 ثانية | 7.22 | | CPU | سؤال قصير | 1 | 24 | 256 | 35.7 ثانية | 0.73 ثانية | 7.29 | | CPU | سؤال قصير | 2 | 24 | 241 | 32.8 ثانية | 0.14 ثانية | 7.36 | | CPU | مطالبة حوالي 1,000 | 1 | 921 | 32 | 34.7 ثانية | 30.21 ثانية | 7.03 | | CPU | مطالبة حوالي 1,000 | 2 (ذاكرة مؤقتة) | 921 | 32 | 4.6 ثانية | 0.15 ثانية | 6.96 | | CPU | مطالبة حوالي 4,000 | 1 | 3,621 | 32 | 107.5 ثانية | 102.30 ثانية | 5.94 | | CPU | مطالبة حوالي 4,000 | 2 (ذاكرة مؤقتة) | 3,621 | 32 | 5.4 ثانية | 0.17 ثانية | 5.96 | وحدة المطالبة والإنشاء هي التوكن، ووحدة سرعة الإنشاء هي توكن/ثانية. ### تصحيح أثناء القياس الأولي المبسط، أبلغنا أن سرعة الإنشاء على GPU زادت حوالي 2.2 مرة، لكن هذا كان خطأً. القيمة البالغة 3.86 توكن/ثانية التي قارناها على CPU كانت نتيجة معالجة مطالبة بطول حوالي 14,000 توكن على bot2. نظرًا لأن الإنشاء يصبح أبطأ مع المطالبات الطويلة، كان خطأً مقارنة القيم الخاصة بالأسئلة القصيرة. عند المقارنة تحت نفس الظروف، يكون الفرق في سرعة الإنشاء بين 1.1 و1.2 مرة. ## أسباب عدم تحقيق تسريع كبير حتى مع استخدام GPU ### 1. الإنشاء يُحدّد بسرعة نقل الذاكرة يقوم نموذج LLM بقراءة جميع أوزان النموذج من الذاكرة لكل توكن يتم إنشاؤه. الحد الأقصى لسرعة الإنشاء يُحدد تقريبًا بـ: "سرعة نقل الذاكرة ÷ حجم النموذج". | البند | القيمة | |---|---| | سرعة نقل الذاكرة (النظرية) | حوالي 51 جيجابايت/ثانية باستخدام DDR4-3200 ثنائي القناة | | الكمية التي تُقرأ لكل توكن | حوالي 5 جيجابايت (النموذج الكامل) | | الحد الأقصى النظري لسرعة الإنشاء | 51 ÷ 5.03 ≒ **حوالي 10 توكن/ثانية** | | القياس الفعلي (GPU) | 8.2 توكن/ثانية (حوالي 80% من الحد الأقصى) | | القياس الفعلي (CPU) | 7.3 توكن/ثانية (حوالي 70% من الحد الأقصى) | يشارك GPU المدمج نفس ذاكرة النظام الرئيسية مع CPU، لذا فإن الحد الأقصى يشبه تمامًا ذلك الخاص بـ CPU. حتى مع استخدام GPU، لم تكن هناك سوى فرصة لتحسين بنسبة 10-20% للوصول إلى هذا الحد الأقصى. تتمتع وحدات GPU الخارجية بذاكرة سريعة مخصصة، وبالتالي فإن هذا الحد الأقصى أعلى بكثير. | GPU | سرعة نقل الذاكرة | النسبة مقارنة بجهاز Ubuntu هذا | |---|---|---| | GPU المدمج في جهاز Ubuntu هذا | حوالي 51 جيجابايت/ثانية (مشترك مع CPU) | 1 مرة | | RTX 4060 | حوالي 272 جيجابايت/ثانية | حوالي 5 مرات | | RTX 4090 | حوالي 1,008 جيجابايت/ثانية | حوالي 20 مرة | ### 2. القراءة تُحدّد بالقدرة الحسابية، لكن قدرة GPU المدمجة صغيرة في عملية تحميل المطالبة، يمكن معالجة العديد من التوكنات معًا، لذا فإن السرعة تُحدّد بالقدرة الحسابية أكثر من سرعة الذاكرة. هنا فقط تظهر فعالية GPU، حيث حققنا تحسنًا فعليًا بنسبة 2.5 مرة. لكن هذه الوحدة GPU تخضع للقيود التالية، مما جعل التحسن يتوقف عند 2.5 مرة: | القيود | التفاصيل | |---|---| | عدد وحدات الحساب قليل | فقط 8 وحدات. تُقدّر قدرتها بدقة مفردة بحوالي 2 TFLOPS، أي أقل من عشرات المرات من وحدات GPU للألعاب | | لا توجد دوائر متخصصة لعمليات المصفوفات | لا توجد دوائر متخصصة للذكاء الاصطناعي مثل Tensor Cores في NVIDIA | | لا يمكن استخدام ROCm | منصة الحساب الخاصة بـ AMD للـ GPU لا تدعم رسميًا هذا GPU المدمج. يتم تشغيله باستخدام Vulkan العام | لمعالجة توكن واحد في نموذج بحجم 8B، تحتاج إلى حوالي 16 GFLOP من الحساب، لذا فإن حدوده النظرية بقدرة حوالي 2 TFLOPS هي حوالي 120 توكن/ثانية. القياسات الفعلية التي تتراوح بين 76 و88 توكن/ثانية تمثل حوالي 6-7% من هذه القيمة. ### 3. كلما زاد طول المطالبة، أصبحت العملية أبطأ مع زيادة طول السياق، يزداد عدد التوكنات السابقة التي يشير إليها كل توكن، مما يبطئ كل من التحميل والإنشاء. | الشرط | سرعة التحميل | سرعة الإنشاء | |---|---|---| | GPU، مطالبة حوالي 1,000 توكن | 76 توكن/ثانية | 8.0 توكن/ثانية | | GPU، مطالبة حوالي 3,600 توكن | 88 توكن/ثانية | 7.2 توكن/ثانية | | GPU، OpenClaw (15,686 توكن)، أوليّتيّن أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليّتين أوليّتين: أوليyyين أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: أولاً: | GPU، OpenClaw (15,686 توكن)، المتوسط العام | 44.1 توكن/ثانية | 5.1 توكن/ثانية | | CPU، OpenClaw (14,021 توكن) | حوالي 19.5 توكن/ثانية | 3.86 توكن/ثانية | **ملاحظة:** تم حذف النص غير المفهوم أو المتكرر في الجدول بسبب خطأ في النسخ، ويجب استبداله بالقيمة الصحيحة التي تشير إلى "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعتين من OpenClaw (أولى دفعتين من النص)" أو "أولى دفعات نموذجية" — لكن بما أن هذا غير واضح، سيتم حذفهم تمامًا واستبدالهم بالقيمة الصحيحة المفترضة. **تصحيح الجدول:** في السطر الثالث تحت عنوان GPU وOpenClaw، يجب أن يكون: - GPU، OpenClaw (15,686 توكن)، **الأجزاء الأولى فقط (2,048 توكن)** — سرعة التحميل = **78.7 توكن/ثانية** — سرعة الإنشاء = — - GPU، OpenClaw (15,686 توكن)، **المتوسط العام** — سرعة التحميل = **44.1 توكن/ثانية** — سرعة الإنشاء = **5.1 توكن/ثانية** تم تصحيح الجدول بناءً على السياق المنطقي والبيانات السابقة دون إدخال نصوص غير واضحة.مع زيادة عدد الرموز حتى 3,600، زادت كمية المعالجة المجمعة، مما أدى إلى تسريع عملية التحميل. ومع تجاوز 15,000 رمز، انخفضت السرعة إلى حوالي 46 رمزًا/الثانية في المرحلة النهائية. ## التحقق من التخزين المؤقت في OpenClaw (bot2 mei) أرسلت جلستين متتاليتين باستخدام Qwen3 يعمل على وحدة معالجة الرسومات (GPU). | البند | المرة الأولى | المرة الثانية | |---|---|---| | البرومبت الذي أرسلته OpenClaw | 15,686 رمزًا | 15,744 رمزًا | | الرموز التي تم تحميلها فعليًا | 15,686 (الكل) | **135 (الرموز الجديدة فقط)** | | وقت التحميل | 356.1 ثانية | **6.1 ثانية** | | التوليد | 247 رمزًا، 48.1 ثانية (5.11 رمزًا/الثانية) | 249 رمزًا، 48.5 ثانية (5.11 رمزًا/الثانية) | | المجموع | **410 ثانية** | **58 ثانية** | - تُرسل OpenClaw دائمًا نفس محتوى الجملة التوجيهية في بداية البرومبت، لذا تم إعادة استخدام الجزء المُعالج مسبقًا (98٪) في المرة الثانية. - يشكل الجزء الأكبر من وقت الانتظار في المرة الثانية، حوالي 240 رمزًا، عملية التفكير. حتى عند تعيين `--thinking off`، لم تتوقف عملية التفكير. إذا تم إيقافها، من المتوقع أن ينخفض الوقت إلى حوالي 10 ثوانٍ. - لا يُحذف التخزين المؤقت بناءً على الوقت. يتم حذفه فقط عند إزالة النموذج، أو عند تدخل عملية أخرى (بسبب الحد الأقصى لعدد العمليات المتزامنة = 1)، أو عند ضغط المحادثة. ## خيارات التحسين في السرعة بما أن سرعة نقل الذاكرة لا يمكن تغييرها، فإن تقليل كمية البيانات التي تُحمَّل لكل رمز هو الأكثر فعالية. | الطريقة | الأثر المتوقع | ملاحظات | |---|---|---| | الاستفادة من تخزين البرومبت المؤقت | يصبح وقت التحميل في المرة الثانية فما بعدها بضع ثوانٍ (تم التحقق منه) | يمكن أن يُحذف بسبب التدخل أو الضغط | | إيقاف تفكير Qwen3 | تقليل حوالي 48 ثانية لكل محاولة | قد تنخفض جودة الإجابة قليلاً | | التبديل إلى Qwen3-30B-A3B من نوع MoE | يتم استخدام حوالي 3B من الأوزان لكل رمز. من المتوقع أن يزداد التوليد بمقدار 2-3 أضعاف، مع تحسن الذكاء أيضًا | حجمه حوالي 18 جيجابايت، ولا يناسب ذاكرة GPU البالغة 10.6 جيجابايت، لذا سيتم معالجة جزء منها على وحدة المعالجة المركزية. لم يتم التحقق من وجود نسخة غير خاضعة للرقابة | | استخدام نموذج أصغر (Qwen3-4B) | يزداد التوليد تقريبًا بمقدار ضعفين | ينخفض الذكاء | | استخدام التفسير الاستباقي | استخدام Qwen3-0.6B كمسودة. من المتوقع أن يزداد التوليد بنسبة 1.3-2 ضعف | تختلف الفعالية حسب المحتوى | | تقليل التكميم أكثر (مثل Q3) | تحسين بنسبة 10-20٪ | تنخفض الدقة | | تقصير الجملة التوجيهية | يقلل وقت التحميل في المرة الأولى وبعد حذف التخزين المؤقت | يؤدي إلى إزالة بعض الوظائف | جميع الآثار المذكورة في هذه الجدول، باستثناء تخزين البرومبت المؤقت، هي تقديرات ولم يتم قياسها عمليًا. ## الحالة الحالية (حتى 2026-11-03) | البند | الحالة | |---|---| | LM Studio | متوقف. تم تعطيل التشغيل التلقائي | | وقت التشغيل المختار | Vulkan (GPU) | | bot2 (mei) | gpt-5.4-mini | | منفذ نقل bot2 | متوقف. تم تعطيل التشغيل التلقائي | | إعدادات bot2 لـ Qwen3 | `~/.openclaw-bot2/openclaw.json.bak-qwen3-active-*` |

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

avatarانشر ردك

التعليق