Yolo فيجن شنتشن
شنتشن
انضم الآن

كيف Ultralytics YOLO أسرع على رقاقتك المفضلة في Ultralytics

كيف Ultralytics YOLO من أجل السرعة عبر وحدات المعالجة المركزية ووحدات معالجة الرسومات والأجهزة الطرفية. سنشرح الرقائق والذاكرة والتقنيات الذكية مثل التكمية والدمج والتقليص.

في Ultralytics نقوم بإنشاء نماذج للرؤية الحاسوبية؛ وببساطة، نحن نعلم أجهزة الكمبيوتر كيف ترى! يمكنك التفكير في هذه النماذج على أنها وصفات رياضية عملاقة. وهي تتكون من عمليات (نسميها طبقات) ومجموعة ضخمة من الأرقام التي نسميها أوزان.

تعالجYOLO Ultralytics YOLO الصور على حقيقتها: مصفوفات من الأرقام! كل بكسل هو في الحقيقة مجرد قيم ألوان، أي كمية اللون الأحمر والأخضر والأزرق (أي RGB) لكل نقطة من النقاط التي تتكون منها الصورة. نسمي هذه المصفوفات الرقمية "متجهات" لأنها تبدو أكثر روعة من "مصفوفات متعددة الأبعاد"، التي تبدو أكثر روعة من "أرقام مكدسة على أرقام مكدسة على أرقام".

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

ما الذي ينتج عن ذلك؟ المزيد من الأرقام! أرقام ذات مغزى. في مهام الكشف، تخبرك هذه الأرقام بمكان وجود الأشياء في صورتك وبماهية هذه الأشياء على الأرجح. "مهلاً، هناك احتمال بنسبة 95% أن يكون هذا كلبًا عند الإحداثيات (x، y)!" نسمي هذه العملية السحرية "الاستدلال".

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

أثناء التدريب، في كل مرة نقدم فيها صورة للشبكة، لا نحصل على إجابة فحسب. بل نقوم بأمرين صعبين للغاية. أولاً، نحسب مدى خطأ الشبكة (نسمي ذلك الخسارة، وهي في الأساس المسافة من الهدف). ثانياً، وهذا هو الجزء المهم، نقوم بتحديث كل رقم (أو وزن) في الشبكة بناءً على تلك الخسارة. فكر في الأمر على أنه ضبط آلاف المقابض الصغيرة في وقت واحد، حيث يتم حساب كل تعديل لجعل الشبكة أكثر دقة في كل مرة. نحن ندرب الشبكة بشكل أساسي من خلال التصحيح: كل خطأ يعلمها ما لا يجب أن تفعله، ونقوم بتعديل كل تلك الأوزان بحيث عندما ترى صورة مماثلة مرة أخرى، تقترب من الإجابة الصحيحة. بشكل أساسي، تتعلم الشبكة من خلال دفعها في الاتجاه الصحيح، خطأً بعد خطأ، حتى تبدأ في إصابة التنبؤات.

كم عدد الأرقام التي نتحدث عنها؟ حسنًا، يحتوي YOLO11n الصغير اللطيف على بضعة ملايين من المعلمات. ولكن YOLO11x؟ هذا الفتى الشرير يحتوي على أكثر من 50 مليون معلمة! المزيد من المعلمات يعني المزيد من التفاصيل التي يمكنك ترميزها، مثل الفرق بين الرسم بالألوان المائية مقابل استخدام لوحة ألوان كاملة.

أثناء الاستدلال، يصبح عدد المعلمات هذا أمراً بالغ الأهمية. تشغيل شبكة ذات 3 ملايين معلمة يشبه الركض حول الحي. أما تشغيل شبكة ذات 50 مليون معلمة؟ فهذا أشبه بالركض في ماراثون مع التلاعب بمشاعل مشتعلة.

 إذن، ما هو الحساب بالضبط؟ كيف يتم إجراء كل هذه العمليات الحسابية؟ كيف يمكننا تسريعها؟ وماذا يعني مصطلح "تحسين الحساب"؟

كيف تقوم الرقائق بالعمليات الحسابية فعليًا

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

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

دعونا نكشف عن هذه الطبقات. خذ هذا Python البسيط للغاية Python :

x = 1
if x == 1:
    y = x + 1

نقوم بإنشاء متغير x، ونضبطه على 1، وإذا كان x يساوي 1 (تنبيه: إنه يساوي 1)، فإننا ننشئ y بقيمة x زائد 1. ثلاث أسطر. سهل.

ولكن هنا يكمن الأمر المثير للاهتمام. بين هذه السطور الثلاثة البريئة والإلكترونات الفعلية التي تتحرك عبر السيليكون، هناك أربع طبقات ضخمة على الأقل من الترجمة (في الواقع هناك المزيد، ولكن مديرة المحتوى الرقمي لدينا تقول إن عدد الكلمات التي استخدمتها يسبب لها القلق). دعوني أرافقكم في هذه الرحلة المثيرة للذهن:

الطبقة 1: Python بايت كود أولاً، Python الكود الخاص بك ويقوم بتحويله إلى ما يسمى بايت كود، وهي لغة وسيطة يسهل على أجهزة الكمبيوتر استيعابها، ولكنها قد تجعل عينيك تنزفان إذا حاولت قراءتها.

الطبقة 2: بايت كود → كود الآلة يقوم Python (مثل CPython) بأخذ هذا البايت كود وترجمته إلى كود الآلة، وهو التعليمات الفعلية التي يفهمها المعالج. وهنا يتحول تعبيرك الأنيق "if x == 1" إلى شيء مثل "تحميل السجل، مقارنة السجل، القفز إذا تم تعيين علامة الصفر".

الطبقة 3: كود الآلة → الكود الصغير تغيير مفاجئ في الحبكة! المعالجات الحديثة لا تنفذ كود الآلة مباشرة. بل تقسمه إلى كود صغير، وهو عبارة عن عمليات أصغر يمكن لمكونات الرقاقة الداخلية معالجتها. قد تتحول تعليمة "ADD" الواحدة إلى عدة عمليات صغيرة.

الطبقة 4: الرمز الصغير → الإلكترونيات الفيزيائية أخيرًا، وصلنا إلى السيليكون. تطلق تلك العمليات الصغيرة إشارات كهربائية فعلية تتدفق عبر الترانزستورات. يتم تشغيل وإيقاف مليارات المفاتيح الصغيرة، وترقص الإلكترونات عبر مسارات مصممة بعناية، وبطريقة ما، وبشكل سحري، يصبح 1 + 1 يساوي 2.

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

المفارقة؟ هذه الأسطر الثلاثة من Python تؤدي إلى تشغيل ملايين من مفاتيح الترانزستور. ولكن بفضل هذه المفاهيم المجردة، لا داعي للتفكير في أي من ذلك. ما عليك سوى كتابة "y = x + 1" والثقة في أن السحر يحدث في مكان ما، في أعماق السيليكون.

الهندسة المعمارية

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

يوجد في السوق المئات من الرقائق المختلفة، كل منها مصمم لأغراض مختلفة. ما الذي يختلف بينها؟ الطوبولوجيا، أي كيفية وضع العمليات وتنفيذها في المجال المادي. هذا ما نسميه الهندسة المعمارية، ولدينا الكثير منها:

  • x86 (Intel AMD) - الجد الأكبر لأجهزة الكمبيوتر المكتبية، معقد ولكنه قوي
  • ARM - يعمل على تشغيل هاتفك وبشكل متزايد جهاز الكمبيوتر المحمول الخاص بك، وهو مصمم لتحقيق الكفاءة
  • RISC-V - المتمرد مفتوح المصدر، الذي يكتسب زخماً في كل مكان
  • PowerPC - وحش IBM، لا يزال يعمل في أجهزة الألعاب والخوادم
  • MIPS - المفضل لدى الأكاديميين، بسيط وأنيق
  • SPARC - مساهمة Sun Microsystems (الآن Oracle) في الحوسبة عالية الأداء
  • GPU ( CUDA NVIDIA، RDNA من AMD) - وحوش المعالجة المتوازية

لا تختلف كل بنية في ترتيب ترانزستوراتها فحسب، بل تتحدث لغة مختلفة أيضًا. فالأفكار المجردة التي نستخدمها لإرسال التعليمات إلى هذه الآلات تختلف تمامًا. الأمر أشبه بكتابة توجيهات السفر لشخص ما، ولكن اعتمادًا على سيارته، قد تحتاج إلى الكتابة باللغة الفرنسية أو الصينية أو الرقص التعبيري.

نبض قلب سيليكون

وقود رقائقنا هو الإلكترونات، الكهرباء التي تتدفق إلى الرقاقة، وتوفر الطاقة اللازمة للحساب. لكن الطاقة وحدها لا تكفي. لكي تعمل الرقاقة بالفعل، ولتنقل البيانات عبر طوبولوجيتها المعقدة، كل شيء يعتمد على مكون واحد حاسم: الساعة. هذا هو ما يجعل الإلكترونات تتدفق عبر مسارات محددة في أوقات محددة. بدونها، سيكون لديك فقط سيليكون يعمل بالطاقة ولا يفعل شيئًا.

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

عندما تسمع عبارة "معالج 3.5 جيجاهرتز"، فإن جيجاهرتز (GHz) هي سرعة الساعة، أي 3.5 مليار نبضة في الثانية. كل نبضة تسمى دورة ساعة، وهي الوحدة الأساسية للوقت في الحوسبة.

لا يحدث أي شيء بين دورات الساعة. يتجمد الكمبيوتر بالكامل، في انتظار النبضة التالية. إنه أشبه بلعبة "الضوء الأحمر، الضوء الأخضر" الأكثر تطرفًا في الكون. عند كل "ضوء أخضر" (نبضة الساعة):

  • تنتقل البيانات بين المكونات
  • تنفيذ الحسابات
  • يتم اتخاذ القرارات المنطقية
  • يتم قراءة الذاكرة أو كتابتها

تستغرق بعض العمليات دورة واحدة (عملية جمع بسيطة)، بينما تستغرق عمليات أخرى عدة دورات (عملية قسمة أو جلب بيانات من ذاكرة الوصول العشوائي). إنها عملية منسقة بدقة، حيث يؤدي مليارات المكونات عمليات محددة، وكلها متزامنة مع هذا الإيقاع المستمر. 

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

في الماضي، كانت هذه العمليات تُنفذ باستخدام آلات بحجم الغرف. لكن المكونات التي تقوم بكل هذه الحسابات بسيطة للغاية: فهي مجرد مفاتيح. مفاتيح تشغيل وإيقاف.

قم بتوصيل عدد كافٍ من هذه المفاتيح معًا بالطريقة الصحيحة، وستحصل على عملية حسابية. إن الثورة الرقمية برمتها تعتمد على ترتيب متطور للمفاتيح.

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

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

عندما نقوم بتشغيل شبكات عصبية بملايين المعلمات، فإننا نقوم بتبديل هذه المفاتيح الصغيرة مليارات المرات في الثانية، وكلها متزامنة تمامًا مع نبضات القلب البلورية. كل تحديث للوزن، كل ضرب مصفوفة، كل وظيفة تنشيط، كلها تسير على إيقاع الساعة.

لا عجب أن نماذج التدريب تجعل جهاز الكمبيوتر الخاص بك يبدو وكأنه يحاول الإقلاع!

جعل الشبكات العصبية تعمل بسرعة فائقة

حسناً، لدينا هذه الرقائق التي تحتوي على مليارات من المفاتيح التي تعمل على إيقاع بلوري، ونريد تشغيل شبكات عصبية تحتوي على ملايين المعلمات عليها. يبدو الأمر سهلاً، أليس كذلك؟ ما عليك سوى إدخال الأرقام في الرقاقة وتركها تعمل!

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

عدم التوافق في الهندسة المعمارية

تم تصميم معظم الرقائق لتشغيل Microsoft وليس الشبكات العصبية. CPU تصميم CPU الخاصة بك على أساس أنها ستقضي عمرها في تشغيل عبارات if-statements، والحلقات، وأحيانًا حساب ضرائبك (الحساب الوحيد الذي تجده حتى أجهزة الكمبيوتر العملاقة مرهقًا عاطفيًا). وهي مُحسّنة للعمليات المتسلسلة: افعل هذا، ثم ذاك، ثم الشيء الآخر.

لكن الشبكات العصبية مختلفة تمامًا. فهي تريد القيام بكل شيء في وقت واحد. أثناء التدريب، تقوم بتحديث ملايين الأوزان بناءً على مدى خطأ توقعاتك. أثناء الاستدلال (باستخدام النموذج المدرب فعليًا)، تقوم بدفع البيانات عبر ملايين العمليات الحسابية في وقت واحد. تخيل أنك بحاجة إلى ضرب مليون رقم في مليون رقم آخر. تريد CPU الخاصة بك، بارك الله فيها، القيام بذلك رقمًا رقمًا، مثل محاسب سريع جدًا ولكن منهجي جدًا.

لهذا السبب أصبحت وحدات معالجة الرسومات (GPU) العمود الفقري للحوسبة في مجال الذكاء الاصطناعي. فقد صُممت وحدات معالجة الرسومات (GPU) لألعاب الفيديو، حيث تحتاج إلى حساب لون ملايين البكسلات في وقت واحد. وتبين أن حساب ألوان البكسلات وإجراء العمليات الحسابية للشبكات العصبية متشابهان بشكل مدهش: فكلاهما ينطوي على إجراء نفس العملية على كميات هائلة من البيانات بشكل متوازٍ.

ولكن حتى وحدات معالجة الرسومات (GPU) ليست مثالية للشبكات العصبية. ولهذا السبب تعمل الشركات الآن على تصنيع رقائق ذكاء اصطناعي متخصصة (TPU و NPU وجميع الاختصارات الأخرى التي تنتهي بـ PU). تم تصميم هذه الرقائق من الألف إلى الياء لغرض واحد: تسريع الشبكات العصبية. وهي تشبه توظيف طاهٍ لا يعرف سوى طهي طبق واحد، ولكنه يطهوه بسرعة خارقة. بينما CPU في إجراء عمليات المصفوفات بالتسلسل، GPU معها بشكل جيد جدًا بالتوازي، فإن هذه الرقائق المتخصصة تتناول المصفوفات على الإفطار والغداء والعشاء.

جدار الذاكرة (أو: لماذا نقل البتات أصعب من الرياضيات)

في الحوسبة الحديثة للشبكات العصبية، ننفق المزيد من الوقت والطاقة في نقل البيانات أكثر من حسابها فعليًا.

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

يمكن لشريحتك ضرب رقمين في دورة ساعة واحدة (تذكر أن ذلك يمثل واحدًا من مليارات النبضات في الثانية). بسرعة البرق! ولكن نقل هذه الأرقام من الذاكرة إلى الشريحة؟ قد يستغرق ذلك مئات الدورات. الأمر أشبه بقدرة عالم الرياضيات على حل مسألة في ثانية واحدة، ولكنه يحتاج إلى خمس دقائق للذهاب إلى المكتبة والعودة منها.

والسبب هو المسافة (والمساحة). الكهرباء تتحرك بسرعة، ولكن ليس بسرعة لا نهائية. كلما زادت المسافة التي يجب أن تقطعها البيانات على الرقاقة، زاد الوقت الذي تستغرقه. حل مصممو الكمبيوتر هذه المشكلة عن طريق إنشاء تسلسل هرمي للذاكرة، مثل وجود مواقع تخزين متعددة على مسافات مختلفة:

  • السجلات (مضمنة مباشرة في وحدات الحوسبة): مكتبك كعالم رياضيات. وصول فوري! لكنها صغيرة، لا يمكنك الاحتفاظ إلا بـ 32 رقمًا هنا. الأمر أشبه بوجود ملاحظات لاصقة أمامك مباشرة.
  • ذاكرة التخزين المؤقت L1 (على بعد ميكرومتر): رف الكتب في المكتب. يستغرق الأمر 3-4 دورات للحصول على شيء ما. هنا، يمكنك وضع بضعة آلاف من الأرقام.
  • ذاكرة التخزين المؤقت L2 (على بعد مليمترات): خزانة الملفات في نهاية الردهة. تستغرق 10-15 دورة ويمكن أن تستوعب بضعة ملايين من الأرقام.
  • ذاكرة التخزين المؤقت L3 (عبر الرقاقة): غرفة التخزين في الطابق السفلي. تستغرق 30-50 دورة، وتحتوي على عشرات الملايين من الأرقام.
  • ذاكرة الوصول العشوائي (RAM) (على شريحة مختلفة تمامًا): المستودع الموجود في الجانب الآخر من المدينة. يستغرق 100-300 دورة. هذا هو المكان الذي توجد فيه مليارات الأرقام الخاصة بك.
  • SSD/القرص الصلب (متصل بواسطة كابلات): مدينة أخرى تمامًا. يستغرق ملايين الدورات. سعة تخزين هائلة، سرعة بطيئة للغاية.

تختلف الهياكل الدقيقة، فقد تتخطى شريحة هاتفك ذاكرة التخزين المؤقت L3، في حين أن CPU للخادم CPU تحتوي على كميات هائلة منها. ومع ذلك، يظل المبدأ كما هو: الذاكرة الأقرب أسرع ولكنها أصغر.

وهنا يكمن الصعوبة بالنسبة للشبكات العصبية. تخيل أنYOLO Ultralytics YOLO الخاص بك يحتوي على 50 مليون معلمة (بالمناسبة،ChatGPT مليارات المعلمات). هذا يعني 50 مليون رقم يجب أن تنتقل من الذاكرة إلى وحدات الحوسبة ثم تعود مرة أخرى. حتى لو كان كل رقم يتكون من 4 بايت فقط، فهذا يعني 200 ميغابايت من البيانات التي يجب أن تنتقل عبر نظامك.

قد تعالج الشريحة كل رقم في دورة واحدة، ولكن إذا استغرق الأمر 100 دورة لجلب هذا الرقم من ذاكرة الوصول العشوائي (RAM)، فأنت تقضي 99٪ من وقتك في انتظار التسليم. إنه مثل وجود سيارة سباق فورمولا 1 في ازدحام مروري. كل هذه القوة الحاسوبية، جالسة هناك، في انتظار وصول البيانات.

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

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

في كل مرة تقوم فيها بنقل جزء من البيانات، فإنك تستهلك طاقة. لا نحن لا نتحدث عن كمية كبيرة، بل عن بيكوجول، ولكن عندما تنقل تيرابايت في الثانية، فإن الكمية تتراكم بسرعة. في الواقع، نقل البيانات لمسافة 1 ملم عبر شريحة يستهلك طاقة أكثر من إجراء الحساب الفعلي!

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

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

الحل؟ تصميم يراعي الهندسة المعمارية

أسرع الشبكات العصبية ليست بالضرورة الأذكى، بل هي تلك المصممة مع وضع الرقائق في الاعتبار. وهي:

  • احتفظ بالبيانات محليًا قدر الإمكان
  • إعادة استخدام الحسابات بشكل مفرط
  • توافق تام مع إمكانيات الأجهزة
  • تقليل حركة الذاكرة بأي ثمن

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

ولهذا السبب فإن جعل الشبكات العصبية تعمل بسرعة هو شكل من أشكال الفن. لا يكفي أن تكون جيدًا في الرياضيات؛ بل يجب أن تفهم الأجهزة، وتحترم التسلسل الهرمي للذاكرة، وتتناغم تمامًا مع البنية.

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

كيف نجعل YOLO

عندما تقوم بتدريب YOLO تحصل على شبكة عصبية تعمل بشكل رائع على إعدادات التدريب الخاصة بك. ولكن هنا تكمن المشكلة: GPU الخاصة بالألعاب، وجهاز iPhone، والرقاقة الصغيرة الموجودة في كاميرا المراقبة، كلها تتحدث لغات مختلفة تمامًا. فلكل منها نقاط قوة ونقاط ضعف مختلفة، وأفكار مختلفة تمامًا حول كيفية معالجة البيانات.

فكر في الأمر بهذه الطريقة: GPU آلاف النوى التي يمكن أن تعمل جميعها في وقت واحد – فهي مصممة للمعالجة المتوازية. في حين أن رقاقة الهاتف المحمول قد تحتوي على دوائر خاصة مصممة خصيصًا لعمليات الذكاء الاصطناعي، ولكنها لا تستطيع معالجة سوى أنواع معينة من العمليات الحسابية. وماذا عن الجهاز الطرفي الموجود في كاميرا جرس الباب؟ إنه يحاول تشغيل الذكاء الاصطناعي بميزانية طاقة أقل من مصباح LED.

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

عمليات الدمج: تحقيق المزيد بأقل جهد

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

ولكن إليك الجزء الذكي: يمكننا دمج هذه العمليات في خطوة واحدة. عندما نقوم بتصدير YOLO نقوم بدمج هذه العمليات معًا. بدلاً من:

  1. حساب التحويل → حفظ في الذاكرة
  2. تحميل من الذاكرة → تطبيع → حفظ في الذاكرة
  3. تحميل من الذاكرة → تطبيق التنشيط → حفظ في الذاكرة

نحن نقوم بما يلي:

  1. حساب التحويل + التطبيع + التنشيط → حفظ في الذاكرة

بالنسبة YOLO يعالج صورة بحجم 640×640، فإن هذه الحيلة البسيطة تقلل من حجم نقل البيانات غير الضرورية بمقدار غيغابايت. على الهاتف المحمول، هذا هو الفرق بين الكشف السلس في الوقت الفعلي والتأخير المزعج.

استخدام أرقام أصغر: سحر التكمية

YOLO يحتاج YOLO في الواقع إلى أرقام فائقة الدقة detect بدقة. أثناء التدريب، نستخدم 32 بت لتمثيل كل وزن – وهذا يشبه استخدام آلة حاسبة علمية لقياس مكونات شطيرة. بالنسبة للنشر الفعلي؟ 8 بت تعمل بشكل جيد.

وهذا ما يسمى بالتكمية، وهي إحدى أقوى تقنيات التحسين لدينا. باستخدام أرقام أصغر:

  • ينكمش النموذج بنسبة 75٪ (من 200 ميجابايت إلى 50 ميجابايت لـ Ultrakytics YOLO11x)
  • يعمل بسرعة أكبر بـ 2-4 مرات على معظم الأجهزة
  • يستهلك طاقة أقل بكثير (بطارية هاتفك ستشكرك على ذلك)

ليست كل الطبقات في YOLO حساسيتها تجاه هذا التخفيض. الطبقات الأولى التي detect الحواف والأشكال detect ؟ إنها قوية – يمكننا استخدام أرقام 8 بت دون أي مشاكل. أما طبقات الكشف النهائية التي تحدد "هل هذا قطة أم كلب؟" فتحتاج إلى مزيد من الدقة. لذلك نقوم بضبط الدقة طبقة تلو الأخرى، باستخدام ما يكفي من البتات للحفاظ على الدقة مع تحقيق أقصى سرعة ممكنة.

لقد وجدنا أنه مع التكمية الدقيقة،YOLO Ultralytics YOLO 99.5٪ من دقته الأصلية بينما يعمل بسرعة 3 أضعاف على الهواتف. هذا هو الفرق بين نموذج بحثي وشيء يمكنك استخدامه بالفعل في العالم الحقيقي.

اختيار أفضل خوارزمية

هناك العشرات من الطرق المختلفة لإجراء نفس العملية الحسابية. يمكن حساب التحويل البسيط (العملية الأساسية في YOLO) باستخدام خوارزميات مختلفة تمامًا، ويعتمد الاختيار الأفضل على الأجهزة المحددة وحجم المدخلات.

عندما نقوم بتصدير YOLO يقوم إطار العمل الخاص بنا للتحسين باختبار خوارزميات مختلفة واختيار الأسرع منها لحالتك الخاصة. الأمر أشبه بوجود طرق متعددة للوصول إلى نفس الوجهة واختيار الطريق بناءً على ظروف حركة المرور الحالية. على وحدة GPU، قد نستخدم خوارزمية تعالج العديد من وحدات البكسل في وقت واحد. على وحدة CPU، قد نستخدم خوارزمية مُحسّنة للمعالجة التسلسلية. الحسابات هي نفسها، لكن استراتيجية التنفيذ مختلفة تمامًا.

الذاكرة: العائق الخفي

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

نستخدم عدة حيل لتقليل حركة الذاكرة:

الجدولة الذكية: نرتب العمليات بحيث يتم استخدام البيانات على الفور بينما لا تزال موجودة في ذاكرة التخزين المؤقت السريعة. بالنسبة لشبكة هرم الميزات YOLO يقلل هذا من حركة مرور الذاكرة بنسبة 40٪.

التقسيم إلى مربعات: بدلاً من معالجة الصورة بأكملها دفعة واحدة، نقسمها إلى مربعات أصغر حجماً تتناسب مع ذاكرة التخزين المؤقت. وهذا يعني أن المعالج يمكنه العمل بسرعة باستخدام الذاكرة المحلية بدلاً من الاستعانة باستمرار بالذاكرة الرئيسية البطيئة.

إعادة استخدام المخزن المؤقت: بدلاً من إنشاء ذاكرة جديدة باستمرار للنتائج الوسيطة، نعيد استخدام نفس المخازن المؤقتة للذاكرة. إنها فعالة للغاية – يمكن تشغيل كامل بنية YOLO باستخدام مجموعة من المخازن المؤقتة القابلة لإعادة الاستخدام.

التقليم: الأقل هو الأفضل

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

العملية بسيطة: نقوم بتحليل أجزاء الشبكة التي تساهم بأقل قدر في نتائج الكشف النهائية، ثم نزيلها، ثم نقوم بضبط النموذج للتعويض عن ذلك. يمكن أن يكون نموذج YOLO11m المعدل أسرع بنسبة 30٪ مع الحفاظ على 99٪ من دقته الأصلية. على الأجهزة التي تعمل بالبطارية، يمكن أن يعني هذا الكسب في الكفاءة ساعات إضافية من التشغيل.

تسريع الأجهزة: الاستفادة من نقاط القوة لكل شريحة

تتميز المعالجات المختلفة بقدرات مختلفة، وتختلف أداءاتها بشكل كبير. يستغرق نفس نموذج YOLO11n:

  • 45 مللي ثانية لكل إطار علىCPU Intel حديث
  • 4 مللي ثانية على وحدة GPU NVIDIA
  • 22 مللي ثانية على معالج هاتف متطور
  • 15 مللي ثانية على وحدة معالجة TPU Google Edge

هذه ليست مجرد اختلافات في السرعة من حيث معدلات السرعة – بل تعكس اختلافات أساسية في البنية. تحتوي وحدات معالجة الرسومات (GPU) على آلاف النوى التي تعمل بالتوازي، مما يجعلها مثالية لتعقيدات YOLO. تحتوي وحدات معالجة الأعصاب (NPU) المحمولة على دوائر متخصصة مصممة خصيصًا للشبكات العصبية. وحدات المعالجة المركزية (CPU) متعددة الاستخدامات ومرنة ولكنها غير متخصصة.

مفتاح التحسين هو مطابقة عمليات YOLO مع ما تقوم به كل شريحة على أفضل وجه. GPU القيام بنفس العملية على الكثير من البيانات في وقت واحد. قد تدعم وحدة معالجة الألغاز (NPU) المحمولة عمليات معينة فقط، ولكنها تنفذها بكفاءة مذهلة. تعمل وحدة TPU الطرفية TPU مع أعداد صحيحة 8 بت، ولكنها تحقق سرعة ملحوظة في ظل هذا القيد.

سحر التجميع

عندما تقوم بتصدير YOLO يحدث شيء رائع خلف الكواليس. نحن لا نقوم فقط بتحويل تنسيق الملف، بل نقوم في الواقع بتجميع النموذج خصيصًا للأجهزة المستهدفة. وهذا يشبه الفرق بين Google والمتحدث الأصلي. عملية التجميع:

  1. يحلل نموذجك لفهم هيكله ومتطلباته
  2. يأخذ في الاعتبار قدرات أجهزتك – ما هي نقاط قوتها، وما هي نقاط ضعفها
  3. يولد رمزًا محسّنًا يتوافق مع اللغة الأصلية لأجهزتك

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

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

نشر الحافة في العالم الحقيقي

دعونا نتحدث عما يحدث عندما YOLO بالعالم الحقيقي – على وجه التحديد، عالم الأجهزة الطرفية الصعب. تخيل كاميرا أمنية تحتاج إلى تشغيل YOLO لاكتشاف الأجسام. إنها تواجه قيودًا قاسية:

  • الذاكرة: ربما فقط 512 ميجابايت إلى 2 جيجابايت من ذاكرة الوصول العشوائي الإجمالية
  • الطاقة: غالبًا ما تكون 2-5 واط فقط (أقل من شاحن الهاتف)
  • التبريد: بدون مراوح، فقط تبديد حراري سلبي
  • الموثوقية: يجب أن يعمل بشكل مستمر دون تعطل

إليك ما تحققه عملية التحسين في الواقع العملي. كاميرا أمنية تعمل بنظام YOLO11s:

  • الطراز الأصلي: 15 واط، يعمل بدرجة حرارة 85 درجة مئوية، ويحقق 20 إطارًا في الثانية
  • مُحسّن باستخدام التكمية والتقليص: 3 واط، درجة حرارة مريحة تبلغ 45 درجة مئوية، يحقق 25 إطارًا في الثانية

لقد خفضنا استهلاك الطاقة بنسبة 80٪ مع تحسين الأداء في الواقع! هذا هو الفرق بين الجهاز الذي يسخن بشكل مفرط ويستنزف البطاريات والجهاز الذي يعمل بشكل موثوق لسنوات.

المفتاح هو اختيار التنازلات المناسبة. على الأجهزة الطرفية، غالبًا ما نقوم بما يلي:

  • استخدم تكمية INT8 (دقة أقل، طاقة أقل بكثير)
  • معالجة عدد أقل من الإطارات عندما تكون النشاط منخفضة
  • توزيع العمل على معالجات مختلفة لإدارة الحرارة
  • اجعل النماذج صغيرة بما يكفي لتناسب الذاكرة السريعة بالكامل

عملية التحسين

في Ultralytics، نتبع نهجًا منهجيًا للتحسين. أولاً، نقوم بتحديد ملامح النموذج لفهم أين يتم إنفاق الوقت بالفعل. غالبًا ما لا تكون الاختناقات في المكان الذي تتوقعه. ربما يتم إنفاق 80٪ من الوقت في بضع طبقات فقط، أو أن عمليات نقل الذاكرة تستحوذ على وقت الحساب.

بعد ذلك، نطبق التحسينات بشكل متكرر:

  1. ابدأ بأكبر العقبات
  2. قم بتطبيق تحسين واحد في كل مرة
  3. قياس كل من تحسن السرعة وتأثير الدقة
  4. الحفاظ على التحسينات التي توفر مقايضات جيدة
  5. كرر حتى نحقق أهدافنا

على سبيل المثال، مع نشر YOLO11m على الهاتف:

  • خط الأساس: 200 مللي ثانية لكل إطار، نموذج 200 ميجابايت
  • بعد التكمية: 80 مللي ثانية لكل إطار، نموذج 50 ميجابايت
  • بعد التقليم: 60 مللي ثانية لكل إطار، نموذج 35 ميجابايت
  • بعد عملية الدمج: 45 مللي ثانية لكل إطار، نموذج 35 ميجابايت

تحسن كل خطوة الأداء مع الحفاظ على أكثر من 99٪ من الدقة الأصلية. النتيجة؟ اكتشاف الأجسام في الوقت الفعلي على جهاز يمكن حمله في الجيب.

المستقبل: الحوسبة غير المتجانسة

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

  • يحتوي مستشعر الكاميرا على معالج إشارة الصورة (ISP) للمعالجة المسبقة
  • تقوم وحدة المعالجة العصبية (NPU) بتشغيل YOLO
  • CPU وحدة CPU المركزية ( CPU العمليات المنطقية والتنسيق المعقدة.
  • GPU وحدة GPU النتائج على الشاشة

يتمثل مستقبل YOLO في تقسيم النموذج بذكاء عبر هذه المعالجات. ربما تتولى NPU معالجة التلافيف الرئيسية، بينما CPU بمنطق الكشف النهائي، GPU النتائج. يقوم كل معالج بما يجيده، مما يخلق خط إنتاج أكثر كفاءة مما يمكن أن يحققه أي معالج بمفرده.

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

الخلاصة

لا يقتصر تحسين YOLO على تحويل تنسيقات الملفات فحسب، بل يتعلق بتحويل الذكاء الاصطناعي المتطور إلى شيء يعمل بالفعل في العالم الحقيقي. من خلال تقنيات مثل التكمية (استخدام أرقام أصغر) والتشذيب (إزالة الأجزاء غير الضرورية) ودمج العمليات (الجمع بين الخطوات) والإدارة الذكية للذاكرة، نحقق تحسينات في الأداء بنسبة 10 إلى 100 أضعاف مع الحفاظ على الدقة.

الشيء المثير للاهتمام؟ لا يوجد تحسين "أفضل" عالمي. يحتاج الخادم السحابي ذو الطاقة غير المحدودة إلى تحسينات مختلفة عن تلك التي تحتاجها طائرة بدون طيار تعمل بالبطارية. يحتاج الهاتف المزود بشريحة ذكاء اصطناعي مخصصة إلى معاملة مختلفة عن تلك التي يحتاجها Raspberry Pi. لهذا السبب Ultralytics العديد من خيارات التصدير – كل منها مُحسّن لسيناريوهات مختلفة.

كل عملية تحسين ناقشناها تخدم هدفًا واحدًا: جعل الرؤية الحاسوبية متاحة في كل مكان. سواء كنت تقوم ببناء جرس باب ذكي أو تطبيق طائرة بدون طيار أو خدمة سحابية ضخمة، فإننا نوفر الأدوات اللازمة YOLO في حدود قيودك.

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

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

لنبنِ مستقبل
الذكاء الاصطناعي معًا!

ابدأ رحلتك مع مستقبل تعلم الآلة

ابدأ مجانًا