كيف نجعل في Ultralytics نماذج YOLO أسرع على رقاقتك المفضلة
كيف تقوم Ultralytics بتحسين نماذج YOLO للسرعة عبر وحدات CPU و GPU وأجهزة الحافة. سنشرح الرقائق والذاكرة والتقنيات الذكية مثل التكميم (quantization)، والدمج (fusion)، والتقليم (pruning).

في Ultralytics، نقوم بتصنيع نماذج الرؤية الحاسوبية؛ ببساطة، نحن نعلّم الحواسيب كيف ترى! فكّر في هذه النماذج كأنها وصفات رياضية ضخمة. فهي تتكون من عمليات (نسميها طبقات) وكومة هائلة من الأرقام نسميها الأوزان.
تعالج نماذج Ultralytics YOLO الصور كما هي حقًا: كمصفوفات من الأرقام! كل بكسل هو في الواقع مجرد قيم لونية، مقدار اللون الأحمر والأخضر والأزرق (أي RGB) لكل نقطة مفردة تشكل الصورة. نطلق على هذه المصفوفات العددية اسم "تنسورات" (tensors) لأنها تبدو أكثر أناقة من "مصفوفات متعددة الأبعاد"، والتي تبدو بدورها أكثر أناقة من "أرقام مكدسة فوق أرقام مكدسة فوق أرقام".
عندما تقوم بتغذية نموذجنا بصورة، فإنها تنطلق في رحلة ملحمية عبر الشبكة. تخيل التنسور الخاص بك وهو يتنقل عبر طبقة تلو الأخرى، حيث يتم تحويله، وعمل تلافيف له، وتشويهه رياضياً بأجمل طريقة ممكنة. فكّر في الأمر كحفلة رقص تمتزج فيها الأرقام وتتفاعل، مستخلصة جوهر ما يجعل القطة قطة أو السيارة سيارة. نطلق على هذه العملية استخراج الميزات.
ما الذي يخرج من الطرف الآخر؟ المزيد من الأرقام! أرقام ذات معنى. في مهام الكشف، تخبرك بالضبط بمكان وجود الأشياء في صورتك وما هي تلك الأشياء على الأرجح. "مرحباً، هناك احتمال 95% أن هذا كلب عند الإحداثيات (x, y)!" نطلق على هذه العملية السحرية اسم الاستدلال.
الآن، قبل أن تتمكن نماذجنا من أداء سحرها، فإنها تحتاج إلى الذهاب للمدرسة؛ أي تحتاج إلى التدريب. جزء التدريب هو حيث تصبح الأمور مكثفة.
أثناء التدريب، في كل مرة نقدم فيها صورة للشبكة، نحن لا نحصل على إجابة فحسب، بل نقوم بأمرين إضافيين ثقيلي الوزن. أولاً، نقوم بحساب مدى خطأ الشبكة (نسمي ذلك loss، وهو أساساً المسافة من الهدف المركزي). ثانياً، وهذا هو الجزء المهم، نقوم بتحديث كل رقم (أو وزن) في الشبكة بناءً على ذلك الـ loss. تخيل الأمر كأنك تقوم بضبط آلاف المقابض الصغيرة دفعة واحدة، حيث يتم حساب كل تعديل لجعل الشبكة أكثر دقة في كل مرة.
نحن نقوم جوهرياً بتدريب الشبكة من خلال التصحيح: كل خطأ يعلمها ما يجب عليها تجنبه، ونقوم بتعديل كل تلك الأوزان بحيث عندما ترى صورة مشابهة مرة أخرى، تقترب أكثر من الإجابة الصحيحة. في الأساس، تتعلم الشبكة من خلال دفعها في الاتجاه الصحيح، خطأً تلو الآخر، حتى تبدأ في تحقيق تنبؤات دقيقة.
عن كم رقم نتحدث؟ حسناً، نموذجنا الصغير اللطيف YOLO11n يحتوي على بضعة ملايين من البارامترات. ولكن ماذا عن YOLO11x؟ هذا النموذج القوي يحتوي على أكثر من 50 مليون بارامتر! المزيد من البارامترات يعني تفاصيل أكثر يمكنك ترميزها، مثل الفرق بين الرسم بأقلام التلوين وبين امتلاك لوحة ألوان فنان كاملة.
أثناء الاستدلال، يصبح عدد البارامترات هذا حاسماً. تشغيل شبكة بـ 3 ملايين بارامتر يشبه الركض حول المبنى. تشغيل شبكة بـ 50 مليون بارامتر؟ يشبه ذلك ركض ماراثون أثناء التلاعب بشعلات نارية.
إذن ما هي الحوسبة بالضبط؟ كيف يحدث كل هذا التلاعب بالأرقام فعلياً؟ كيف نجعلها أسرع؟ وماذا يعني "تحسين الحوسبة" أصلاً؟
Link to this sectionكيف تقوم الرقائق بإجراء الرياضيات فعلياً#
تحدث الحوسبة باستخدام الرقائق. هذه المربعات الصغيرة من السيليكون هي في الأساس أكثر قلاع الرمال تنظيماً في الكون. كل عملية يقوم بها حاسوبك، كل عملية جمع، كل مقارنة، كل "إذا حدث هذا فافعل ذاك"، محفورة فيزيائياً في السيليكون. توجد دوائر فيزيائية فعلية في مناطق محددة من الشريحة مخصصة لجمع الأرقام، وأخرى لعمليات المنطق. إنها تشبه مدينة صغيرة حيث تتخصص أحياء مختلفة في أنواع مختلفة من الرياضيات.
قد يبدو هذا غريباً، حتى لو كنت عالم حاسوب. ذلك لأننا قضينا الـ 40 عاماً الماضية في بناء طبقة تلو الأخرى من التجريد، مثل لازانيا تكنولوجية أصبحت طويلة جداً لدرجة أننا لم نعد نرى اللوح السفلي. لقد بسطنا الأمور لدرجة أن معظم المبرمجين اليوم ليس لديهم أي فكرة عن كيفية حدوث الحوسبة فعلياً في السيليكون. ليس بسبب خطأ منهم، بل بالتصميم!
دعونا نقشر هذه الطبقات. لنأخذ كود Python البسيط هذا:
x = 1
if x == 1:
y = x + 1نقوم بإنشاء متغير x، ونضبط قيمته على 1، وإذا كان x يساوي 1 (تنبيه: هو كذلك بالفعل)، نقوم بإنشاء y بقيمة x زائد 1. ثلاثة أسطر. سهلة.
ولكن هنا تصبح الأمور مثيرة للاهتمام. بين تلك الأسطر الثلاثة البريئة والإلكترونات الفعلية التي تتحرك عبر السيليكون، هناك أربع طبقات ضخمة على الأقل من الترجمة تحدث (هناك المزيد في الواقع، لكن مديرة المحتوى الرقمي لدينا تقول إن عدد كلماتي يسبب لها القلق بالفعل). دعني أطلعك على هذه الرحلة المذهلة:
الطبقة 1: Python → Bytecode أولاً، تقرأ Python كودك وتجمعه إلى شيء يسمى Bytecode، وهي لغة وسيطة يسهل على الحواسيب هضمها ولكنها ستجعل عينيك تنزفان إذا حاولت قراءتها.
الطبقة 2: Bytecode → Machine Code يأخذ مترجم Python (مثل CPython) ذلك الـ Bytecode ويترجمه إلى Machine Code، وهي التعليمات الفعلية التي يفهمها معالجك. وهنا يتحول كودك الأنيق "if x == 1" إلى شيء مثل "LOAD register, COMPARE register, JUMP if zero flag set."
الطبقة 3: Machine Code → Microcode تحول مفاجئ! المعالجات الحديثة لا تنفذ Machine Code مباشرة حتى. بل تقوم بتفكيكها أكثر إلى Microcode، وهي عمليات أصغر يمكن للمكونات الداخلية للشريحة التعامل معها. قد تصبح تعليمات "ADD" الواحدة الخاصة بك عمليات دقيقة متعددة.
الطبقة 4: Microcode → Physical Electronics أخيراً، نصل إلى السيليكون. تلك العمليات الدقيقة تطلق إشارات كهربائية فعلية تتدفق عبر الترانزستورات. مليارات المفاتيح الصغيرة تفتح وتغلق، وترقص الإلكترونات عبر مسارات مصممة بعناية، وبشكل ما، وبسحر، يصبح 1 + 1 يساوي 2.
كل طبقة موجودة لإخفاء التعقيد الجنوني للطبقة التي تحتها. إنها مثل دمى الماتريوشكا الروسية، إلا أن كل دمية تتحدث لغة مختلفة تماماً، والدمية الأصغر مصنوعة حرفياً من برق محبوس في رمال.
المفارقة؟ تلك الأسطر الثلاثة من Python تطلق على الأرجح ملايين المفاتيح الترانزستورية. ولكن بفضل هذه التجريدات، لا تحتاج إلى التفكير في أي من ذلك. أنت ببساطة تكتب "y = x + 1" وتثق في أن السحر يحدث في مكان ما، في عمق السيليكون.
Link to this sectionالهيكلية#
كل عملية منفردة مطبقة فيزيائياً في السيليكون، والمكان الذي تحدث فيه على الشريحة يعتمد كلياً على طبوغرافيا الشريحة. إنه مثل تخطيط المدن، ولكن للإلكترونات. يعيش الجامع هنا، والضارب هناك، ويحتاجون جميعاً للتحدث مع بعضهم البعض بكفاءة.
لدينا المئات من الرقائق المختلفة في السوق، كل منها مصمم لأغراض مختلفة. ما الذي يتغير بينها؟ الطوبوغرافيا، وكيفية تموضع العمليات وتنفيذها في النطاق الفيزيائي. هذا ما نسميه الهيكلية، ويا للهول، لدينا الكثير منها:
- x86 (Intel و AMD) - جد حوسبة سطح المكتب، معقدة لكنها قوية
- ARM - تشغل هاتفك وبشكل متزايد حاسوبك المحمول، مصممة للكفاءة
- RISC-V - المتمرد مفتوح المصدر، يكتسب زخماً في كل مكان
- PowerPC - وحش IBM، لا يزال يعمل في منصات الألعاب والخوادم
- MIPS - المفضلة أكاديمياً، بسيطة وأنيقة
- SPARC - مساهمة Sun Microsystems (أصبحت الآن Oracle) في الحوسبة عالية الأداء
- هيكليات GPU (أنوية CUDA من NVIDIA، و RDNA من AMD) - وحوش المعالجة المتوازية
كل هيكلية لا ترتب ترانزستوراتها بشكل مختلف فحسب، بل تتحدث أيضاً لغة مختلفة. التجريدات التي نستخدمها لإرسال التعليمات إلى هذه الآلات مختلفة تماماً. إنها مثل الاضطرار لكتابة اتجاهات السفر لشخص ما، ولكن اعتماداً على سيارته، قد تحتاج للكتابة بالفرنسية، أو الماندرين، أو الرقص التعبيري.
Link to this sectionنبض قلب السيليكون#
وقود رقائقنا هو الإلكترونات، الكهرباء التي تتدفق إلى الشريحة، موفرة الطاقة للحوسبة. لكن الطاقة وحدها ليست كافية. لكي تعمل الشريحة فعلياً، لنقل البيانات عبر طبوغرافيتها المعقدة، يعتمد كل شيء على مكون واحد حاسم: الساعة. هذا هو ما يجعل الإلكترونات تتدفق عبر مسارات محددة في أوقات محددة. بدونها، سيكون لديك فقط سيليكون مشحون لا يفعل شيئاً.
تخيل محاولة تنسيق عرض ضخم حيث تحتاج مليارات المكونات للتحرك بتزامن مثالي. بدون دقة، ستكون الفوضى عارمة. هذا بالضبط ما تفعله الساعة لمعالجك. إنها بلورة تهتز بمعدل ثابت بشكل لا يصدق، مرسلة نبضات كهربائية مليارات المرات في الثانية.
عندما تسمع "معالج بسرعة 3.5 جيجاهرتز"، فإن هذا الجيجاهرتز (GHz) هو سرعة الساعة، 3.5 مليار نبضة في الثانية. كل نبضة تسمى دورة ساعة، وهي الوحدة الأساسية للوقت في الحوسبة.
لا يحدث شيء بين دورات الساعة. يتجمد الحاسوب بأكمله، منتظراً النبضة التالية. إنها مثل أكثر لعبة "الضوء الأحمر، الضوء الأخضر" تطرفاً في الكون. في كل "ضوء أخضر" (نبضة ساعة):
- تتحرك البيانات بين المكونات
- تنفذ الحسابات
- تتخذ القرارات المنطقية
- تتم قراءة الذاكرة أو الكتابة عليها
تستغرق بعض العمليات دورة واحدة (عملية جمع بسيطة)، بينما تستغرق أخرى دورات عديدة (عملية قسمة أو جلب بيانات من RAM). إنها مصممة بدقة متناهية، مليارات المكونات تؤدي عملياتها المحددة، كلها متزامنة مع هذا النبض الذي لا يرحم.
يمكنك كسر سرعة معالجك بجعل البلورة تهتز بشكل أسرع؛ يحدث كل شيء بشكل أسرع، لكنه يولد أيضاً المزيد من الحرارة، ويصبح أقل استقراراً. إذا دفعت الأمر بعيداً جداً، ينهار حاسوبك لأن الإلكترونات حرفياً لا تستطيع مواكبة النبض.
في الماضي، كانت هذه العمليات تنفذ بآلات بحجم الغرف. لكن المكونات التي تقوم بكل هذه الحوسبة بسيطة بشكل لافت للنظر: إنها مجرد مفاتيح. مفاتيح تشغيل وإيقاف.
قم بتوصيل ما يكفي من هذه المفاتيح معاً بالنمط الصحيح، وستحصل على حوسبة. الثورة الرقمية بأكملها تتلخص في ترتيب مفاتيح متطور.
هذه البساطة تعني أنه إذا كان لديك مفاتيح، أي مفاتيح، يمكنك بناء حاسوب. لقد بنى الناس حواسيب عاملة من أنابيب المياه والصمامات، وأحجار الدومينو، ومكعبات LEGO، والكرات الزجاجية، وحتى باستخدام الحجر الأحمر (Redstone) في Minecraft.
المبادئ لم تتغير منذ الأربعينيات. لقد أصبحنا فقط بارعين بشكل لا يصدق في جعل المفاتيح صغيرة للغاية. يمتلك هاتفك قوة حوسبة أكثر من كل الحواسيب التي أرسلت البشر إلى القمر، وهو يتسع في جيبك لأننا اكتشفنا كيفية صنع مفاتيح على المستوى الذري.
عندما نقوم بتشغيل شبكات عصبية بملايين البارامترات، فإننا نقوم بتبديل هذه المفاتيح الصغيرة مليارات المرات في الثانية، كلها متزامنة تماماً مع ذلك النبض البلوري. كل تحديث للوزن، كل ضرب مصفوفات، كل دالة تنشيط، كلها تسير على إيقاع الساعة.
لا عجب أن تدريب النماذج يجعل حاسوبك يصدر صوتاً وكأنه يحاول الإقلاع!
Link to this sectionجعل الشبكات العصبية تعمل بسرعة فائقة#
حسناً، لدينا هذه الرقائق بمليارات المفاتيح التي ترقص على إيقاع بلورة، ونريد تشغيل شبكات عصبية بملايين البارامترات عليها. يجب أن يكون الأمر سهلاً، أليس كذلك؟ فقط ارمِ الأرقام على الشريحة ودعها تنطلق!
تشغيل الشبكات العصبية بسرعة يشبه محاولة طهي وجبة من خمسة أطباق في مطبخ يقع فيه الثلاجة على بعد ثلاثة مربعات سكنية، ولا تملك سوى مقلاة واحدة، وكل مكون يزن 500 رطل. الرياضيات نفسها ليست المشكلة الأكبر؛ بل كل شيء آخر.
Link to this sectionعدم تطابق الهيكلية#
صممت معظم الرقائق لتشغيل Microsoft Word، وليس الشبكات العصبية. بنيت وحدة المعالجة المركزية (CPU) الخاصة بك معتقدة أنها ستقضي حياتها في تشغيل عبارات if، والحلقات (loops)، وحساب ضرائبك أحياناً (العملية الحسابية الوحيدة التي تجدها حتى الحواسيب العملاقة مرهقة عاطفياً). إنها محسنة للعمليات التسلسلية: افعل هذا، ثم ذاك، ثم الشيء الآخر.
لكن الشبكات العصبية مختلفة تماماً. إنها تريد القيام بكل شيء في وقت واحد. أثناء التدريب، تقوم بتحديث ملايين الأوزان بناءً على مدى خطأ توقعاتك. أثناء الاستدلال (استخدام النموذج المدرب فعلياً)، تدفع البيانات عبر ملايين الحسابات في وقت واحد. تخيل أنك بحاجة لضرب مليون رقم في مليون رقم آخر. وحدة المعالجة المركزية الخاصة بك، بارك الله فيها، تريد القيام بها واحداً تلو الآخر، مثل محاسب سريع جداً لكنه منهجي جداً.
لهذا السبب أصبحت وحدات معالجة الرسومات (GPUs) العمود الفقري لحوسبة الذكاء الاصطناعي. صممت وحدات GPU لألعاب الفيديو، حيث تحتاج لحساب لون ملايين البكسلات في وقت واحد. تبين أن حساب ألوان البكسلات والقيام برياضيات الشبكات العصبية متشابهان بشكل مدهش: كلاهما يتضمن القيام بنفس العملية على كميات هائلة من البيانات بالتوازي.
لكن حتى وحدات GPU ليست مثالية للشبكات العصبية. لهذا السبب تقوم الشركات الآن ببناء رقائق ذكاء اصطناعي متخصصة (TPUs، NPUs، وكل اختصار آخر ينتهي بـ PU). صممت هذه الرقائق من الصفر بمهمة واحدة: جعل الشبكات العصبية تعمل بسرعة. إنها تشبه توظيف طاهٍ لا يعرف سوى كيفية طهي طبق واحد، لكنه يطهوه بسرعة خارقة. بينما تعاني وحدة المعالجة المركزية الخاصة بك عبر عمليات المصفوفات تسلسلياً وتتعامل وحدة GPU الخاصة بك معها بشكل جيد بالتوازي، فإن هذه الرقائق المتخصصة تلتهم المصفوفات للإفطار والغداء والعشاء.
Link to this sectionجدار الذاكرة (أو: لماذا نقل البتات أصعب من الرياضيات)#
في حوسبة الشبكات العصبية الحديثة، نقضي وقتاً وطاقة في نقل البيانات أكثر مما نقضيه في الحوسبة بها فعلياً.
فكر في شريحة حاسوبك كعالم رياضيات عبقري يعمل بسرعة البرق، لكن جميع كتبه المرجعية مخزنة في مبانٍ مختلفة عبر المدينة. يمكنه حل أي معادلة فوراً، لكن أولاً، يحتاج للحصول على الأرقام، وتلك الرحلة تستغرق وقتاً طويلاً.
يمكن لشريحتك ضرب رقمين في دورة ساعة واحدة (تذكر، تلك واحدة من مليارات النبضات في الثانية). سريع كالبرق! ولكن الحصول على تلك الأرقام من الذاكرة إلى الشريحة؟ قد يستغرق ذلك مئات الدورات. إنه مثل أن عالم الرياضيات الخاص بك يمكنه حل مسألة في ثانية واحدة، لكنه يحتاج لخمس دقائق للمشي إلى المكتبة والعودة.
السبب هو المسافة (والمساحة). تتحرك الكهرباء بسرعة، لكن ليس بسرعة لانهائية. كلما زادت المسافة التي يتعين على البيانات قطعها على الشريحة، زاد الوقت المستغرق. حل مصممو الحواسيب هذا بإنشاء تسلسل هرمي للذاكرة، مثل وجود مواقع تخزين متعددة على مسافات مختلفة:
- السجلات (Registers) (مبنية مباشرة في وحدات الحوسبة): مكتب عالم الرياضيات الخاص بك. وصول فوري! لكنها صغيرة، يمكنك فقط الاحتفاظ بحوالي 32 رقماً هنا. إنها مثل وجود ملاحظات لاصقة أمامك مباشرة.
- ذاكرة التخزين المؤقت L1 (L1 Cache) (على بعد ميكرومترات): رف الكتب في المكتب. يستغرق الأمر 3-4 دورات لجلب شيء ما. هنا، يمكنك وضع بضعة آلاف من الأرقام.
- ذاكرة التخزين المؤقت L2 (L2 Cache) (على بعد مليمترات): خزانة الملفات في الردهة. تستغرق 10-15 دورة ويمكنها احتواء بضعة ملايين من الأرقام.
- ذاكرة التخزين المؤقت L3 (L3 Cache) (عبر الشريحة): غرفة التخزين في الطابق السفلي. تستغرق 30-50 دورة، وتتسع لعشرات الملايين من الأرقام.
- RAM (على شريحة مختلفة تماماً): المستودع عبر المدينة. تستغرق 100-300 دورة. هذا هو المكان الذي تعيش فيه مليارات أرقامك.
- SSD/محرك الأقراص الصلبة (متصل بكابلات): مدينة أخرى تماماً. تستغرق ملايين الدورات. تخزين هائل، سرعة جليدية.
تختلف الهياكل الدقيقة، فقد تتخطى شريحة هاتفك ذاكرة L3 المؤقتة، بينما قد تمتلك وحدة المعالجة المركزية للخادم كميات هائلة منها. المبدأ، مع ذلك، يظل كما هو: الذاكرة الأقرب أسرع لكنها أصغر.
الآن هنا يصبح الأمر مؤلماً للشبكات العصبية. تخيل أن نموذج Ultralytics YOLO الخاص بك يحتوي على 50 مليون بارامتر (ChatGPT يحتوي على مليارات، بالمناسبة). هذا يعني 50 مليون رقم تحتاج للانتقال من الذاكرة إلى وحدات الحوسبة والعودة. حتى لو كان كل رقم 4 بايت فقط، فهذا يعني 200 ميجابايت من البيانات تحتاج للتحرك عبر نظامك.
قد تعالج الشريحة كل رقم في دورة واحدة، ولكن إذا استغرق جلب ذلك الرقم من RAM 100 دورة، فإنك تقضي 99% من وقتك في انتظار التسليم. إنه مثل وجود سيارة سباق Formula 1 في ازدحام مروري. كل تلك القوة الحوسبية، جالسة هناك، تنتظر وصول البيانات.
إليك الرؤية الحاسمة: هذا هو عنق الزجاجة في الحوسبة الحديثة. يسمى عنق زجاجة فون نيومان. جعل الرقائق أسرع في الرياضيات أمر سهل نسبياً. جعل الذاكرة أسرع يصطدم بحدود فيزيائية. لهذا السبب يحدث كل تحسين الأداء تقريباً في الذكاء الاصطناعي على مستوى الذاكرة. عندما يقوم المهندسون بتسريع الشبكات العصبية، نادراً ما يجعلون الرياضيات أسرع؛ بل يجدون طرقاً ذكية لنقل بيانات أقل، وتخزينها بشكل أفضل، أو الوصول إليها بذكاء أكبر.
رقائق الذكاء الاصطناعي الحديثة لا تركز فقط على سرعة الحوسبة؛ بل تهتم بشكل مهووس بعرض نطاق الذاكرة واستراتيجيات نقل البيانات. فهي تجلب البيانات مسبقاً، وتعيد استخدام القيم الموجودة بالفعل في ذاكرة التخزين المؤقت، وتنظم الحسابات لتقليل رحلات الذاكرة. الفائزون في سباق عتاد الذكاء الاصطناعي ليسوا أصحاب أسرع الآلات الحاسبة؛ بل هم الذين اكتشفوا كيفية إبقاء تلك الآلات الحاسبة مغذاة بالبيانات. اللعبة بأكملها تتعلق بتحسين أنماط الوصول إلى الذاكرة.
في كل مرة تنقل فيها جزءاً من البيانات، تحرق طاقة. ليس كثيراً، نحن نتحدث عن بيكوجول، ولكن عندما تنقل تيرابايت في الثانية، يتراكم الأمر بسرعة. في الواقع، نقل البيانات لمسافة 1 مم عبر شريحة يستهلك طاقة أكثر من القيام بالحوسبة الفعلية!
لهذا السبب يبدو حاسوبك المحمول كمحرك نفاث عند تدريب الشبكات العصبية. ليست الرياضيات هي التي تولد الحرارة؛ بل حركة البيانات. كل تحديث للبارامتر، كل حساب للتدرج، كل تمريرة أمامية تقوم حرفياً بتسخين غرفتك.
مسرعات الذكاء الاصطناعي الحديثة هي في الأساس تمارين في الديناميكا الحرارية. كم يمكننا حشر الحوسبة قبل أن تذوب الشريحة؟ بأي سرعة يمكننا نقل الحرارة بعيداً؟ إنها مثل كسر السرعة، لكن الساعة دائماً عند 11، ونحن نحاول فقط ألا نبدأ حريقاً.
Link to this sectionالحل؟ تصميم واعٍ بالهيكلية#
أسرع الشبكات العصبية ليست بالضرورة الأكثر ذكاءً، بل هي تلك المصممة مع وضع الرقائق في الاعتبار. فهي:
- تحتفظ بالبيانات محلياً قدر الإمكان
- تعيد استخدام الحسابات بشكل مهووس
- تتماشى تماماً مع قدرات العتاد
- تقلل حركة الذاكرة بأي ثمن
إنها مثل الفرق بين وصفة تقول "استخدم مكونات من متجر البقالة المحلي الخاص بك" مقابل وصفة تتطلب منك استيراد توابل من التبت، وجبن من فرنسا، وماء من أنتاركتيكا. قد يكون كلاهما لذيذ المذاق، لكن إحداهما بالتأكيد أكثر عملية.
ولهذا السبب يعتبر جعل الشبكات العصبية تعمل بسرعة شكلاً من أشكال الفن. لا يكفي امتلاك رياضيات جيدة؛ تحتاج لفهم العتاد، واحترام التسلسل الهرمي للذاكرة، والرقص بانسجام تام مع الهيكلية.
مرحباً بك في العالم حيث تلتقي علوم الحاسوب بالفيزياء والهندسة والسحر البحت. حيث يكلف نقل رقم أكثر من الحوسبة به. حيث التوازي سريع، لكن التزامن هو الموت. حيث عدوك الأكبر ليس التعقيد، بل المسافة.
Link to this sectionكيف نجعل YOLO أسرع#
عندما تقوم بتدريب نموذج YOLO، تحصل على شبكة عصبية تعمل بشكل جميل في إعداد تدريبك. ولكن إليك الأمر: وحدة معالجة الرسومات للألعاب الخاصة بك، وهاتفك iPhone، وتلك الشريحة الصغيرة في كاميرا المراقبة، جميعها تتحدث لغات مختلفة تماماً. لديهم نقاط قوة مختلفة، ونقاط ضعف مختلفة، وأفكار مختلفة جداً حول كيفية معالجة البيانات.
فكر في الأمر بهذه الطريقة: تمتلك وحدة GPU آلاف الأنوية التي يمكنها جميعاً العمل في وقت واحد - إنها مصممة للمعالجة المتوازية. في غضون ذلك، قد تمتلك شريحة الهواتف المحمولة دوائر خاصة مصممة خصيصاً لعمليات الذكاء الاصطناعي، لكن يمكنها التعامل فقط مع أنواع معينة من الرياضيات. وماذا عن ذلك الجهاز الطرفي في كاميرا جرس الباب الخاص بك؟ إنه يحاول تشغيل الذكاء الاصطناعي بميزانية طاقة أصغر من مصباح LED.
في Ultralytics، ندعم أكثر من اثني عشر تنسيق تصدير مختلف لأن كل واحد منها محسن لعتاد مختلف. الأمر لا يتعلق بامتلاك الكثير من الخيارات. بل يتعلق بامتلاك الخيار الصحيح لاحتياجاتك المحددة.
Link to this sectionدمج العمليات: القيام بالمزيد بأقل جهد#
في نموذج YOLO الأصلي، تحدث العديد من العمليات في تسلسل. على سبيل المثال، قد نقوم بعملية تلافيف (convolution)، ثم تطبيع النتائج، ثم تطبيق دالة تنشيط. هذه ثلاث خطوات منفصلة، كل منها يتطلب عمليات قراءة وكتابة خاصة بها في الذاكرة.
ولكن إليك الجزء الذكي: يمكننا دمج هذه العمليات في خطوة واحدة. عندما نصدر YOLO للنشر، نقوم بدمج هذه العمليات معاً. بدلاً من:
- حساب التلافيف → الحفظ في الذاكرة
- التحميل من الذاكرة → التطبيع → الحفظ في الذاكرة
- التحميل من الذاكرة → تطبيق التنشيط → الحفظ في الذاكرة
نحن نقوم بـ:
- حساب التلافيف + التطبيع + التنشيط → الحفظ في الذاكرة
بالنسبة لنموذج YOLO نموذجي يعالج صورة 640×640، تلغي هذه الحيلة البسيطة جيجابايت من عمليات نقل الذاكرة غير الضرورية. على هاتف محمول، هذا هو الفرق بين كشف سلس في الوقت الفعلي وتأخير محبط.
Link to this sectionاستخدام أرقام أصغر: سحر التكميم (Quantization)#
لا يحتاج YOLO فعلياً إلى أرقام دقيقة للغاية لاكتشاف الأشياء بدقة. أثناء التدريب، نستخدم 32 بت لتمثيل كل وزن - هذا يشبه استخدام آلة حاسبة علمية لقياس مكونات شطيرة. أما للنشر الفعلي؟ 8 بتات تعمل بشكل جيد تماماً.
يُطلق على هذا اسم "التكميم" (quantization)، وهو أحد أقوى تقنيات التحسين لدينا. من خلال استخدام أرقام أصغر:
- ينكمش حجم النموذج بنسبة 75% (من 200 ميجابايت إلى 50 ميجابايت لنموذج Ultralytics YOLO11x)
- يعمل بسرعة أكبر بمرتين إلى 4 مرات على معظم الأجهزة
- يستهلك طاقة أقل بكثير (ستشكرك بطارية هاتفك على ذلك)
ليست كل الطبقات في YOLO حساسة بنفس القدر لهذا التقليل. هل الطبقات الأولية التي تكتشف الحواف والأشكال الأساسية؟ إنها قوية - يمكننا استخدام أرقام مكونة من 8 بت دون أي مشاكل. أما طبقات الكشف النهائية التي تحدد "هل هذا قط أم كلب؟" فتحتاج إلى قدر أكبر قليلاً من الدقة. لذا نقوم بضبط الدقة طبقة تلو الأخرى، باستخدام عدد كافٍ فقط من البتات للحفاظ على الدقة مع زيادة السرعة إلى أقصى حد.
لقد وجدنا أنه مع التكميم الدقيق، يحافظ Ultralytics YOLO على 99.5% من دقته الأصلية بينما يعمل بسرعة أكبر 3 مرات على الهواتف. هذا هو الفرق بين نموذج بحثي وشيء يمكنك استخدامه فعلياً في العالم الحقيقي.
Link to this sectionاختيار الخوارزمية الأفضل#
هناك عشرات الطرق المختلفة لأداء نفس العملية الحسابية. يمكن حساب الالتفاف البسيط (العملية الأساسية في YOLO) باستخدام خوارزميات مختلفة تماماً، ويعتمد الخيار الأفضل على أجهزتك المحددة وحجم المدخلات.
عندما نقوم بتصدير YOLO، يقوم إطار عمل التحسين لدينا باختبار خوارزميات مختلفة واختيار الأسرع منها لحالتك المحددة. يشبه الأمر وجود طرق متعددة لنفس الوجهة والاختيار بناءً على ظروف المرور الحالية. على وحدة معالجة الرسومات (GPU)، قد نستخدم خوارزمية تعالج العديد من البكسلات في وقت واحد. على وحدة المعالجة المركزية (CPU)، قد نستخدم خوارزمية مُحسّنة للمعالجة المتسلسلة. الرياضيات هي نفسها، لكن استراتيجية التنفيذ مختلفة تماماً.
Link to this sectionالذاكرة: عنق الزجاجة الخفي#
هل تتذكر كيف تحدثنا عن أن الذاكرة هي عنق الزجاجة الحقيقي في الحوسبة الحديثة؟ هذا صحيح بشكل خاص بالنسبة لـ YOLO. قد يحتوي النموذج على 50 مليون معلمة، وأثناء الاستدلال، فإنه ينشئ جيجابايت من النتائج الوسيطة. غالباً ما يكون نقل كل هذه البيانات أبطأ من الحساب الفعلي.
نستخدم عدة حيل لتقليل حركة الذاكرة:
الجدولة الذكية: نقوم بترتيب العمليات بحيث يتم استخدام البيانات على الفور بينما لا تزال في ذاكرة التخزين المؤقت السريعة. بالنسبة لشبكة الهرم الميزي (feature pyramid network) الخاصة بـ YOLO، يؤدي هذا إلى تقليل حركة الذاكرة بنسبة 40%.
التجزئة (Tiling): بدلاً من معالجة صورة كاملة دفعة واحدة، نقوم بتقسيمها إلى أجزاء صغيرة تتناسب مع ذاكرة التخزين المؤقت. هذا يعني أن المعالج يمكنه العمل مع ذاكرة محلية سريعة بدلاً من الجلب المستمر من الذاكرة الرئيسية البطيئة.
إعادة استخدام المخزن المؤقت: بدلاً من إنشاء ذاكرة جديدة باستمرار للنتائج الوسيطة، نقوم بإعادة استخدام نفس المخازن المؤقتة. إنها فعالة للغاية - يمكن تشغيل العمود الفقري (backbone) لـ YOLO بالكامل بمجرد مجموعة من المخازن المؤقتة القابلة لإعادة الاستخدام.
Link to this sectionالتقليم (Pruning): الأقل هو الأكثر#
إليك حقيقة مفاجئة: غالباً ما تكون نماذج YOLO مبالغاً في تصميمها. يمكننا إزالة 30% من القنوات في العديد من الطبقات مع عدم وجود أي تأثير تقريباً على الدقة. هذا لا يجعل النموذج أصغر فحسب - بل يجعله أسرع، لأنه حرفياً توجد عمليات حسابية أقل يجب تنفيذها.
العملية أنيقة: نقوم بتحليل الأجزاء التي تساهم بأقل قدر في نتائج الكشف النهائية في الشبكة، ونزيلها، ثم نقوم بضبط النموذج للتعويض. يمكن لنموذج YOLO11m مقلم أن يكون أسرع بنسبة 30% مع الحفاظ على 99% من دقته الأصلية. على الأجهزة التي تعمل بالبطارية، يمكن أن يعني هذا المكسب في الكفاءة ساعات إضافية من وقت التشغيل.
Link to this sectionتسريع الأجهزة: استغلال نقاط قوة كل شريحة#
المعالجات المختلفة تجيد أشياء مختلفة، واختلافات الأداء مذهلة. يستغرق نفس نموذج YOLO11n:
- 45 مللي ثانية لكل إطار على وحدة معالجة مركزية حديثة من Intel
- 4 مللي ثانية على وحدة معالجة رسومات NVIDIA RTX
- 22 مللي ثانية على معالج هاتف متطور
- 15 مللي ثانية على وحدة TPU من Google Coral
هذه ليست مجرد اختلافات في السرعة ناتجة عن معدلات الساعة - بل تعكس اختلافات معمارية أساسية. تمتلك وحدات معالجة الرسومات (GPU) آلاف النوى التي تعمل بالتوازي، وهي مثالية لعمليات الالتفاف في YOLO. تحتوي وحدات NPU المحمولة على دوائر متخصصة مصممة خصيصاً للشبكات العصبية. أما وحدات المعالجة المركزية (CPU) فهي "متعددة المهام"، مرنة ولكنها غير متخصصة.
مفتاح التحسين هو مطابقة عمليات YOLO مع ما تجيده كل شريحة. تحب وحدة معالجة الرسومات (GPU) تنفيذ نفس العملية على الكثير من البيانات في وقت واحد. قد تدعم وحدة NPU المحمولة عمليات معينة فقط ولكنها تنفذها بكفاءة لا تصدق. تعمل وحدة Edge TPU مع الأعداد الصحيحة بـ 8 بت فقط ولكنها تحقق سرعة ملحوظة ضمن هذا القيد.
Link to this sectionسحر التجميع (Compilation)#
عندما تقوم بتصدير نموذج YOLO، يحدث شيء رائع خلف الكواليس. نحن لا نقوم فقط بتحويل تنسيق الملف - بل نقوم فعلياً بتجميع النموذج خصيصاً لجهازك المستهدف. هذا يشبه الفرق بين Google Translate ومتحدث أصلي للغة. عملية التجميع:
- تحلل نموذجك لفهم هيكله ومتطلباته
- تأخذ في الاعتبار قدرات أجهزتك - ما هي الأشياء التي تجيدها، وما هي الأشياء التي تواجه صعوبة فيها
- تنشئ كوداً مُحسّناً يتحدث بلغة أجهزتك الأصلية
قد يعيد المجمع تنظيم العمليات لاستخدام ذاكرة التخزين المؤقت لمعالجك بشكل أفضل، أو اختيار تعليمات متخصصة تدعمها شريحتك، أو حتى استخدام التعلم الآلي للعثور على أفضل استراتيجية تحسين. نعم، نحن نستخدم الذكاء الاصطناعي لتحسين الذكاء الاصطناعي - المستقبل هنا!
يمكن أن تحدث خطوة التجميع هذه فرقاً بمقدار 10 أضعاف في الأداء. قد يزحف نفس نموذج YOLO ببطء باستخدام كود عام ولكنه يطير بتعليمات مُحسّنة بشكل صحيح.
Link to this sectionالنشر على الحافة (Edge Deployment) في العالم الحقيقي#
دعونا نتحدث عما يحدث عندما يلتقي YOLO بالعالم الحقيقي - وتحديداً العالم الصعب لأجهزة الحافة. تخيل كاميرا أمنية تحتاج إلى تشغيل YOLO على مدار الساعة طوال أيام الأسبوع للكشف عن الأشياء. إنها تواجه قيوداً قاسية:
- الذاكرة: ربما ما بين 512 ميجابايت إلى 2 جيجابايت من ذاكرة الوصول العشوائي (RAM) إجمالاً
- الطاقة: غالباً من 2 إلى 5 واط فقط (أقل من شاحن الهاتف)
- التبريد: لا توجد مراوح، فقط تبديد حراري سلبي
- الموثوقية: يجب أن تعمل باستمرار دون تعطل
إليك ما يحققه التحسين عملياً. كاميرا أمنية تشغل YOLO11s:
- النموذج الأصلي: 15 واط، ترتفع حرارته عند 85 درجة مئوية، يحقق 20 إطاراً في الثانية
- مُحسّن بالتكميم والتقليم: 3 واط، حرارة مريحة 45 درجة مئوية، يحقق 25 إطاراً في الثانية
لقد خفضنا استهلاك الطاقة بنسبة 80% مع تحسين الأداء فعلياً! هذا هو الفرق بين جهاز يسخن ويستنزف البطاريات وجهاز يعمل بشكل موثوق لسنوات.
المفتاح هو اختيار المقايضات الصحيحة. على أجهزة الحافة، غالباً ما نقوم بـ:
- استخدام تكميم INT8 (دقة أقل، طاقة أقل بكثير)
- معالجة عدد أقل من الإطارات عندما يكون النشاط منخفضاً
- توزيع العمل عبر معالجات مختلفة لإدارة الحرارة
- إبقاء النماذج صغيرة بما يكفي لتناسب الذاكرة السريعة بالكامل
Link to this sectionعملية التحسين#
في Ultralytics، نتبع نهجاً منظماً للتحسين. أولاً، نقوم بتحليل النموذج لفهم أين يُقضى الوقت فعلياً. غالباً ما لا تكون الاختناقات حيث تتوقع. ربما يتم قضاء 80% من الوقت في طبقات قليلة فقط، أو أن عمليات نقل الذاكرة تسيطر على وقت الحساب.
بعد ذلك، نطبق التحسينات بشكل متكرر:
- ابدأ بأكبر الاختناقات
- طبق تحسيناً واحداً في كل مرة
- قس كلاً من تحسن السرعة وتأثير الدقة
- احتفظ بالتحسينات التي توفر مقايضات جيدة
- كرر حتى نصل إلى أهدافنا
على سبيل المثال، مع نشر YOLO11m على هاتف:
- خط الأساس: 200 مللي ثانية لكل إطار، نموذج 200 ميجابايت
- بعد التكميم: 80 مللي ثانية لكل إطار، نموذج 50 ميجابايت
- بعد التقليم: 60 مللي ثانية لكل إطار، نموذج 35 ميجابايت
- بعد دمج العمليات: 45 مللي ثانية لكل إطار، نموذج 35 ميجابايت
كل خطوة تحسن الأداء مع الحفاظ على أكثر من 99% من الدقة الأصلية. النتيجة؟ كشف عن الأشياء في الوقت الفعلي على جهاز يتناسب مع جيبك.
Link to this sectionالمستقبل: الحوسبة غير المتجانسة#
أصبحت الأجهزة الحديثة أكثر ذكاءً في استخدام معالجات متعددة معاً. هاتفك لا يحتوي على معالج واحد فقط - بل يحتوي على عدة معالجات، كل منها متخصص لمهام مختلفة:
- يحتوي مستشعر الكاميرا على ISP (معالج إشارة الصور) للمعالجة المسبقة
- تقوم وحدة NPU (وحدة المعالجة العصبية) بتشغيل استدلال YOLO
- تتعامل وحدة المعالجة المركزية (CPU) مع المنطق المعقد والتنسيق
- تقوم وحدة معالجة الرسومات (GPU) بعرض النتائج على الشاشة
يدور مستقبل تحسين YOLO حول تقسيم النموذج بذكاء عبر هذه المعالجات. ربما تتعامل وحدة NPU مع عمليات الالتفاف الرئيسية، وتقوم وحدة المعالجة المركزية بمنطق الكشف النهائي، وتقوم وحدة معالجة الرسومات بتصور النتائج. يقوم كل معالج بما يجيده، مما يخلق مساراً (pipeline) أكثر كفاءة مما يمكن لأي معالج واحد تحقيقه.
نحن نطور خوارزميات تقسيم ذكية تحدد تلقائياً أفضل طريقة لتقسيم YOLO عبر المعالجات المتاحة، مع الأخذ في الاعتبار ليس فقط قدراتها ولكن أيضاً تكلفة نقل البيانات بينها.
Link to this sectionالخلاصة#
إن تحسين نماذج YOLO لا يقتصر فقط على تحويل تنسيقات الملفات؛ بل يتعلق بتحويل الذكاء الاصطناعي المتطور إلى شيء يعمل فعلياً في العالم الحقيقي. من خلال تقنيات مثل التكميم (استخدام أرقام أصغر)، والتقليم (إزالة الأجزاء غير الضرورية)، ودمج العمليات (الجمع بين الخطوات)، وإدارة الذاكرة الذكية، نحقق تحسينات في الأداء بمقدار 10-100 ضعف مع الحفاظ على الدقة.
الشيء المثير للدهشة؟ لا يوجد تحسين "أفضل" عالمي. يحتاج خادم سحابي بطاقة غير محدودة إلى تحسينات مختلفة عن طائرة بدون طيار تعمل بالبطارية. يحتاج هاتف مزود بشريحة ذكاء اصطناعي مخصصة إلى معاملة مختلفة عن Raspberry Pi. هذا هو السبب في أن Ultralytics توفر العديد من خيارات التصدير - فكل منها مُحسّن لسيناريوهات مختلفة.
كل تحسين ناقشناه يخدم هدفاً واحداً: جعل رؤية الكمبيوتر في متناول الجميع في كل مكان. سواء كنت تبني جرس باب ذكياً، أو تطبيق طائرة بدون طيار، أو خدمة سحابية ضخمة، فإننا نوفر الأدوات لجعل YOLO يعمل ضمن قيودك.
عندما تقوم بتصدير نموذج YOLO باستخدام Ultralytics، فأنت لا تحفظ ملفاً فحسب. أنت تستفيد من سنوات من البحث في جعل الشبكات العصبية عملية. أنت تحول نموذج ذكاء اصطناعي حديث إلى شيء يمكن تشغيله على أجهزة حقيقية، مع قيود حقيقية، لحل مشاكل حقيقية.
هذا ما نفعله في Ultralytics. نحن نسد الفجوة بين أبحاث الذكاء الاصطناعي والنشر العملي. نحن نجعل رؤية الكمبيوتر تعمل في كل مكان، لأن مستقبل الذكاء الاصطناعي لا يتعلق فقط بامتلاك أفضل النماذج - بل يتعلق بجعل تلك النماذج مفيدة في العالم الحقيقي.






