Memory-Efficient Activation Checkpointing with Sliding Window and Hirschberg's Algorithm for 0/1 Knapsack Solving in PyTorch
تقدم هذه الورقة البحثية حلاً لتخزين نقاط التنشيط (activation checkpointing) موفرًا للذاكرة لمكتبة PyTorch يجمع بين النافذة المنزلقة وخوارزمية هيرشبيرغ لتقليل ذروة استخدام الذاكرة من إلى ، مما يتيح حل مشكلات حقيبة الظهر (knapsack problems) ذات القيم 0/1 الأكبر بكثير مع تسريع في وقت التشغيل بنسبة 25-28% ودمجه لاحقًا في PyTorch 2.10.
البحث الأصلي مرخَّص بموجب CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). هذا شرح مولَّده بالذكاء الاصطناعي للبحث أدناه. لم يكتبه المؤلفون ولم يصادقوا عليه. وللتحقق من الدقة التقنية، يرجى الرجوع إلى البحث الأصلي. اقرأ إخلاء المسؤولية الكامل
تخيل أنك تحاول خبز ألذ كعكة في العالم، وهي كعكة معقدة للغاية، ولكن ليس لديك سوى مطبخ صغير وضيق. لديك وصفة تتطلب منك تتبع كل مكون قمت بخلطه، وكل تغير في درجة الحرارة، وكل حركة خفق لتتمكن لاحقًا من عكس العملية بدقة لترى كيف خرجت الكعكة. المشكلة هي أن طاولة مطبخك (ذاكرة حاسوبك) صغيرة جدًا بحيث لا يمكنها استيعاب كل تلك الملاحظات. إذا حاولت تدوين كل شيء، ستفيض الطاولة، وسيتعين عليك التوقف عن الخبز. هذه هي المعاناة اليومية للعلماء الذين يدربون نماذج الذكاء الاصطناعي الضخمة؛ فهم بحاجة لتذكر الكثير من الخطوات لتعليم الذكاء الاصطناعي، لكن حواسيبهم تنفد منها المساحة. ولحل ذلك، يستخدمون حيلة ذكية تسمى "تخزين نقاط التنشيط" (activation checkpointing). فبدلاً من تدوين كل خطوة، يختارون الخطوات الأكثر أهمية لحفظها ويتفقون على إعادة تنفيذ الخطوات الأقل أهمية لاحقًا. الأمر يشبه اتخاذ قرار بشأن الصور التي ستحتفظ بها في ألبوم صور صغير، وأي الصور يمكنك تحمل تكلفة التقاطها مرة أخرى إذا نسيتها. الهدف هو احتواء عملية خبز الكعكة بأكملها داخل ذلك المطبخ الصغير دون فقدان سحر الوصفة.
لفترة طويلة، كان برنامج الحاسوب PyTorch، الذي يستخدمه العديد من علماء الذكاء الاصطناعي لبناء هذه النماذج، يتبع طريقة محددة لتحديد أي الخطوات يجب حفظها. لقد عامل هذا القرار كأنه لغز كلاسيكي يسمى "مسألة حقيبة الظهر بنسبة 0/1" (0/1 Knapsack Problem). تخيل أنك متنزّه يحمل حقيبة ظهر يمكنها حمل وزن معين فقط. لديك قائمة من العناصر، لكل منها وزن وقيمة (مدى فائدتها). تريد اختيار العناصر التي تمنحك أكبر قدر من القيمة دون كسر حقيبتك. كانت الطريقة الافتراضية لـ PyTorch لحل هذه المسألة تشبه محاولة كتابة كل التشكيلات الممكنة من العناصر على ورقة عملاقة. وبينما كانت هذه الطريقة مثالية وتجد أفضل إجابة على الإطلاق، إلا أن الورقة أصبحت ضخمة جدًا لدرجة أن ذاكرة الحاسوب كانت تنفجر، مما يؤدي إلى تعطل البرنامج. وجد الباحثون أنه لو كان لديهم 100 عنصر فقط للاختيار من بينها، فإن الورقة المطلوبة ستكون كبيرة جدًا لدرجة أنها تتطلب 304 جيجابايت من المساحة، وهو أكثر بكثير من الـ 64 جيجابايت المتاحة على أجهزتهم. لقد كان حلاً مثاليًا ببساطة لا يمكنه الاستقرار في الغرفة.
في هذه الورقة، يقدم المؤلف طريقة جديدة وأكثر ذكاءً لحل هذا اللغز، والتي يسميها dp_knapsack_sliding_hirschberg. فبدلاً من محاولة كتابة الورقة العملاقة بأكملها دفعة واحدة، يستخدمون حيلة "النافذة المنزلقة" (sliding window). تخيل أنك تقرأ كتابًا طويلاً، ولكن لديك فقط عدسة مكبرة صغيرة تظهر لك صفحتين في كل مرة. تقوم بتحريك العدسة لأسفل الكتاب، فتنظر إلى صفحتين، ثم الصفحتين التاليتين، وهكذا. بهذه الطريقة، تحتاج فقط إلى الاحتفاظ بصفحتين في ذهنك في أي لحظة، مما يوفر مساحة ذهنية هائلة. ومع ذلك، مجرد النظر إلى صفحتين ليس كافيًا لتذكر القصة بأكملها؛ فأنت بحاجة لمعرفة العناصر المحددة التي يجب اختيارها. ولإصلاح ذلك، يجمعون بين النافذة المنزلقة واستراتيجية قديمة وذكية تسمى "خوارزمية هيرشبرغ" (Hirschberg's algorithm). فكر في الأمر كلعبة "فرق تسد" (divide and conquer). بدلاً من محاولة حل مسألة حقيبة الظهر بأكملها دفعة واحدة، يقومون بتقسيم قائمة العناصر إلى نصفين. يحلون النصف الأيسر، ثم النصف الأيمن، ثم يكتشفون كيفية دمج أفضل الحلين. يقومون بذلك بشكل متكرر (recursive)، حيث يفككون المشكلة إلى قطع أصغر فأصغر حتى يتمكنوا من حلها بسهولة، وكل ذلك مع استخدام كمية ضئيلة جدًا من الذاكرة.
النتائج التي حققتها هذه الطالة الجديدة مبهرة. اختبر المؤلف الطريقة على حاسوب يحتوي على 64 جيجابايت من ذاكرة الوصول العشوائي (RAM). وبينما تعطلت الطريقة القديمة عند محاولة حل مسألة تحتوي على 100 عنصر فقط، نجحت الطريقة الجديدة في حل مسألة تحتوي على 2,000 عنصر، باستخدام ذروة ذاكرة بلغت 58.4 جيجابايت. هذا يعني أن الحاسوب يمكنه الآن التعامل مع مسألة أكبر بـ 20 مرة من السابق دون نفاد المساحة. علاوة على ذلك، فإن الطريقة الجديدة ليست مجرد موفرة للذاكرة؛ بل هي أيضًا أسرع. في اختباراتهم، كانت تعمل أسرع بنسبة 25% إلى 28% من الطريقة القديمة. وقد قاس المؤلف ذلك عبر تشغيل نفس اللغز 1,000 مرة على جهاز محدد، ووجد أن الحل الجديد يتفوق باستمرار على القديم في السرعة. والأهم من ذلك، وخلافًا لبعض طرق "الإصلاح السريع" الأخرى التي تخمن الإجابة وقد تكون خاطئة قليلاً، فإن هذه الطريقة الجديدة لا تزال تجد الإجابة المثالية والدقيقة في كل مرة. إنها بدقة الطريقة القديمة ولكنها أكثر كفاءة بكثير.
تؤكد الورقة أن هذا النهج الجديد ليس مجرد نظرية؛ فقد تم دمجه بنجاح في برنامج PyTorch وهو متاح في الإصدار 2.10. يوضح المؤلف أنه من خلال استخدام هذا المزيج من النوافذ المنزلقة واستراتيجية "فرق تسد"، يمكنهم حل عنق الزجاجة في الذاكرة الذي كان يمنع نماذج الذكاء الاصطناعي من النمو بشكل أكبر. هم لا يدعون أن هذه هي الطريقة الوحيدة لحل المشكلة، ولا يقترحون أنها تعمل لكل نوع من أنواع ألغاز الحاسوب، ولكن بالنسبة المهمة المحددة المتمثلة في اتخاذ القرار بشأن أي خطوات الذكاء الاصطناعي يجب حفظها، فهي ترقية مثبتة ودقيقة وعالية الكفاءة. توضح الورقة أن الطريقة القديمة ليست كافية للنماذج الكبيرة، حيث تظهر بوضوح فشلها عندما يرتفع عدد العناصر. وبدلاً من ذلك، يقدمون حلاً يحافظ على الدقة المثالية للطريقة القديمة مع إزالة مشكلة تعطل الذاكرة، مما يسمح للعلماء بخبز كعكات ذكاء اصطناعي أكبر وأكثر تعقيدًا في مطابخهم الصغيرة.
غارق في أبحاث مجالك؟
تصلك نشرة يومية بأحدث الأبحاث المطابقة لكلماتك البحثية المفتاحية — مع ملخصات تقنية، بلغتك.