تقنية

توازي أشجار الغابة: متى يفيد استخدام أكثر من نواة؟

أربع مهام تعطي 8ثوان متسلسلة أو 4ثوان مع عاملين ثم ثانيةكلفة ليصبح 5
عدد العاملين لا يساوي عامل التسريع عند إضافة كلفة التشغيل.

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

الخلاصة السريعة

يسمح توزيع العمل بتنفيذ مهام معًا، لكن تكاليف الاتصال والذاكرة والتنافس على الموارد قد تحد المكسب. عدد المهام المتوازية ليس عامل تسريع مضمونًا. [2]

  • يوزع RandomForestClassifier العمل عبر الأشجار باستعمال n_jobs. [1]
  • في مثال أربع مهام متساوية، يخفض عاملان الزمن المثالي من 8 إلى 4 ثوان، ثم نفترض ثانية إضافية ليصبح 5؛ ليست قياسات.
  • قد يضيف التشغيل بعمليات منفصلة كلفة اتصال وذاكرة؛ ويتوقف الأمر على التنفيذ والخلفية المستعملة. [2]
  • طلب كل الموارد المتاحة لا يضمن أسرع تشغيل؛ راقب التوازي المتداخل ووقت العمل الفعلي بدل الاكتفاء بعدد الأنوية. [2]

ماذا يوزع خيار البرنامج؟

في RandomForestClassifier، تتوازى عمليتا fit وpredict وغيرهما عبر الأشجار. [1]

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

وفي joblib، يطلب n_jobs=-1 استخدام المعالجات المتاحة؛ وقد تقيد ظروف التشغيل المتداخل عددها. القيمة ليست أمرًا بإنشاء موارد جديدة. [2]

مثال تكلفة يمنع الوعد الخطي

نفترض أربع مهام لبناء أشجار، تستغرق كل واحدة ثانيتين إذا نفذت منفردة، وبالموارد نفسها. تنفيذها واحدة بعد الأخرى يساوي 4×2=8 ثوان. مع عاملين مثاليين يبدأ كل منهما مهمة، ثم مهمة ثانية، فيكون زمن العمل 4 ثوان.

نضيف، افتراضًا، ثانية واحدة لإعداد التشغيل وجمع النتائج، فيصير الإجمالي 5 ثوان. عامل التسريع هنا 8/5=1.6، لا 2. وإذا افترضنا كلفة إضافية مقدارها خمس ثوان بدل واحدة، يصبح الإجمالي 9، أي أبطأ من التنفيذ المتسلسل المصطنع.

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

من أين تأتي كلفة المشاركة؟

يوضح joblib أن خلفية loky بالعمليات قد تضيف كلفة اتصال وذاكرة، وأن اختيار الخيوط يختلف بحسب العمل وقدرته على تجاوز قيود التنفيذ. [2]

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

متى يصبح عدد العمال كثيرًا؟

قد يولد توازي داخلي أو مكتبات بخيوطها الخاصة أعمالًا تفوق الموارد المتاحة، فتتباطأ الحسابات. يصف joblib هذا التزاحم ويتيح آليات للحد منه في حالات مدعومة. [2]

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

المصادر ومتابعة القراءة

  1. scikit-learn: RandomForestClassifier n_jobs (يفتح في نافذة جديدة)scikit-learn.org
  2. joblib: Embarrassingly parallel for loops (يفتح في نافذة جديدة)joblib.readthedocs.io

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