CUDA MPC: A GPU-Native Solver for Model Predictive Control
تقدم هذه الورقة CUDA MPC، وهو إطار عمل أصيل لـ GPU يقوم بالتصميم المشترك لخوارزمية ADMM متوازية في الأفق مع نوى CUDA مدمجة وتحسين الذاكرة المشتركة لتحقيق تحكم تنبؤي بالنماذج (MPC) في الوقت الفعلي على الأنظمة المعقدة وعالية الأبعاد بـتأخير أقل بكثير وقابلية توسع أعلى من الحلول الحالية المعتمدة على المعالجات المركزية (CPU) وأطر العمل التنسورية (tensor-framework).
تخيل أنك تحاول تعليم روبوت القيام بشيء صعب، مثل ركن سيارة في مكان ضيق أو توجيه سرب من الطائرات بدون طيار عبر غابة دون أن تصطدم ببعضها البعض. للقيام بذلك بشكل جيد، يحتاج الروبوت إلى عقل يمكنه التطلع إلى الأمام، والتنبؤ بما سيحدث بعد ذلك، وتعديل خطته باستمرار لتجنب العوائق. يُسمى هذا التحكم التنبئي بالنموذج (Model Predictive Control - MPC). فكر في الأمر كلاعب شطرنج لا يكتفي باتخاذ حركة واحدة فقط، بل يحاكي مئات الألعاب المستقبلية الممكنة في ذهنه قبل اتخاذ أفضل حركة. المشكلة هي أن عملية المحاكاة هذه تستهلك الكثير من القدرة الذهنية. إذا كان الروبوت يتحرك بسرعة أو كان العالم معقداً، فإن الرياضيات تصبح ثقيلة جداً لدرجة أن عقل الكمبيوتر التقليدي (CPU) لن يتمكن من إنهاء الحسابات قبل أن يحتاج الروبوت لاتخاذ حركته التالية. الأمر يشبه محاولة حل لغز عملاق أثناء ركض ماراثون؛ فبحلول الوقت الذي تنتهي فيه من اللغز، ستكون قد تعثرت بالفعل.
لفترة طويلة، حاول العلماء تسريع ذلك باستخدام وحدات معالجة الرسومات (GPUs)، وهي الرقائق فائقة السرعة الموجودة عادة في أجهزة ألعاب الفيديو. ومع ذلك، استخدم معظم الناس وحدات معالجة الرسومات كآلة حاسبة متطورة فقط، حيث يطلبون منها القيام بمهام رياضية صغيرة واحدة تلو الأخرى. وهذا أمر غير فعال لأن الروبوت يضطر باستمرار لإرسال واستقبال البيانات ذهاباً وإياباً بين الكمبيوتر الرئيسي ووحدة معالجة الرسومات، مما يخلق ازدحاماً مرورياً. تقدم الورقة البحثية الجديدة طريقة أكثر ذكاءً لاستخدام هذه الرقائق القوية، ليس فقط كآلة حاسبة، بل كمصنع مخصص وعالي السرعة يبقي كل العمل داخل جدرانه الخاصة.
تقدم الورقة البحثية نظام CUDAMPC، وهو نظام جديد صُمم من الصفر لتشغيل التحكم التنبئي بالنموذج مباشرة على وحدة معالجة الرسومات. بدلاً من معاملة وحدة معالجة الرسومات كمساعد بسيط يقوم بعمليات حسابية في أجزاء، بنى المؤلفون محركاً "مدمجاً" يبقي عملية التخطيط بأكملها داخل أسرع ذاكرة في الشريحة. لفهم كيفية عمل ذلك، تخيل صفاً طويلاً من الناس يمررون دلواً من الماء في سلسلة لإطفاء حريق. في الطريقة القديمة، سيتعين على كل شخص أن يصرخ في الشخص المجاور له، وينتظر الرد، ثم يمرر الدلو، مما يخلق الكثير من الضوضاء والتأخير. في نهج CUDAMPC، يتم تقسيم الصف إلى مجموعات صغيرة. تعمل كل مجموعة معاً بصمت وسرعة، ولا تمرر الدلو إلا عند نهايات المجموعة فقط. هذا يسمح للسلسلة بأكملها بالتحرك بشكل أسرع بكثير لأن الجميع يعملون بالتوازي دون انتظار توقف الصف بأكمله للتحدث.
اختبر الباحثون هذا النظام الجديد مقابل أفضل البرامج الحاسوبية الموجودة (مثل acados و CasADi) وطرق أخرى لوحدات معالجة الرسومات. وجدوا أن CUDAMPC سريع للغاية، خاصة لآفاق التخطيط الطويلة. في أحد الاختبارات، حل مشكلة ركن معقدة ذات "تطلع مستقبلي" لمدة 100 ثانية في 0.1 ثانية فقط، وهي مهمة استغرقت من الحلول الأخرى عدة ثوانٍ أو فشلت تماماً. وفي اختبار يتضمن سرباً من 10 وكلاء يحاولون التنسيق فيما بينهم دون الاصطدام، استغرقت حلول المعالجات المركزية (CPU) القديمة أكثر من 3.5 ثانية لكل خطوة (وهو وقت طويل جداً للتحكم في الوقت الفعلي) أو لم تتمكن من إيجاد حل على الإطلاق، بينما قام CUDAMPC بذلك في أجزاء من الثانية. تظهر الورقة البحثية أنه من خلال إبقاء جميع البيانات الوسيطة داخل الذاكرة السريعة للشريحة ومزامنة الجيران الضروريين فقط، يمكن للنظام حل مشكلات كانت مستحيلة في السابق القيام بها في الوقت الفعلي. ويشير المؤلفون إلى أن هذا النهج يسمح للروبوتات بالتخطيط لمسافات أبعد بكثير، مما يؤدي إلى سلوك أكثر أماناً ورشاقة في البيئات المعقدة.
ملخص تقني: CUDAMPC
بيان المشكلة
تعد التحكم التنبئي بالنماذج (MPC) منهجية قوية لفرض قيود الحالة والمدخلات مع تحسين الأداء متعدد المتغيرات. ومع ذلك، فإن اعتمادها على التحسين عبر الإنترنت (online optimization) يخلق عبئًا حوسبيًا كبيرًا، لا سيما للأنظمة الروبوتية سريعة العينات، أو عالية الأبعاد، أو غير الخطية للغاية. غالبًا ما تعجز الحلول التقليدية القائمة على وحدة المعالجة المركزية (مثل acados وCasADi) عن حساب إجراءات التحكم الدقيقة ضمن فترات أخذ العينات الضيقة، مما يضطر المستخدم إلى تقديم تنازلات في طول الأفق (horizon length)، أو دقة النموذج، أو دقة التحسين.
بينما توفر وحدات معالجة الرسومات (GPUs) آلاف النوى المتوازية، فإن تطبيقات MPC الحالية القائمة على GPU تتعامل عادةً مع الجهاز كمجرد مسرع للجبر الخطي. وتعبّر النهج التي تستخدم أطر العمل المعتمدة على التنسورات (مثل PyTorch وJAX) عن التحسين التكراري كسلسلة من العمليات على مستوى إطار العمل. يؤدي هذا إلى عمليات إطلاق متكررة للنواة (kernel launches) ونقل عالي التأخير للذاكرة العالمية، مما يهيمن على أوقات الحل عند الترددات العالية ويقلل من المزايا المتوازية لوحدة معالجة الرسومات. علاوة على ذلك، فإن العديد من طرق GPU الحالية توازي فقط نوى عددية محددة (مثل حل أنظمة نيوتن) أو تعتمد على النهج القائمة على أخذ العينات (مثل MPPI) التي تفتقر إلى شهادات الجدوى وتواجه صعوبة في التعامل مع القيود عالية الأبعاد.
المنهجية
يقدم البحث إطار عمل CUDAMPC، وهو نظام MPC أصيل لوحدات معالجة الرسومات (GPU-native) تم تصميمه بشكل مشترك على المستويات الخوارزمية والتنفيذية والذاكرية للتغلب على هذه القيود. تتضمن المنهجية الأساسية ثلاث طبقات تصميم مترابطة بإحكام:
المستوى الخوارزمي (ADMM المتوازي في الأفق): يستخدم إطار العمل تقسيم خوارزمية "طريقة أدلر لتعميم المضاعفات المتناوبة" (ADMM) المتوازية في الأفق. يتم أولاً معالجة مشكلة MPC غير الخطية عبر البرمجة المتسلسلة المحدبة (SCP)، والتي تقوم بتمثيل الديناميكيات والقيود خطيًا. بعد ذلك، يتم تقسيم المشكلة المحدبة الناتجة باستخدام متغيرات توافق ADMM. يعمل هذا الصياغة على فك الارتباط في التحسين عبر أفق التنبؤ، مما يسمح بتحديثات مستقلة لكل مرحلة ترتبط فقط عبر التوافق مع الجيران الأقرب.
مستوى التنفيذ (نواة CUDA المدمجة): على عكس تنفيذات أطر التنسور التي تطلق نوى منفصلة لكل عملية ADMM، يقوم CUDAMPC بدمج عملية الحل التكرارية الكاملة في نواة CUDA واحدة مخصصة.
لا تدخل من المضيف (No Host Intervention): يتم تنفيذ حلقة ADMM الداخلية الكاملة محليًا على وحدة معالجة الرسومات دون إرجاع التحكم إلى المضيف بين التكرارات.
التزامن المحلي للجيران (Neighbor-Local Synchronization): بدلاً من استخدام حواجز الشبكة المكلفة (grid.sync()) التي تتوسع مع عدد كتل الأفق، يستخدم CUDAMPC بروتوكول أعلام ذرية (atomic-flag) محلي. تتزامن الكتل فقط مع جيرانها المجاورين مكانيًا (الانتشار الأمامي والخلفي لمتغيرات الحدود). يقلل هذا من تكاليف التنسيق لتصبح مستقلة عن العدد الإجمالي لكتل الأفق ويقدم تأخيرًا محدودًا (ADMM غير متزامن جزئيًا)، والذي ثبت تقاربه.
مستوى الذاكرة (التخزين المقيم في الكتل): اتباعًا لمبادئ "FlashAttention" الواعية بالإدخال/الإخراج، يقلل إطار العمل من عمليات النقل بين الذاكرة العالمية والذاكرة على الشريحة.
الإقامة في الذاكرة المشتركة (Shared Memory Residency): يتم تحميل متغيرات التحسين (الأولية، والثنائية، والتوافقية) والحسابات الوسيطة في الذاكرة المشتركة منخفضة زمن الوصول في بداية النواة، وتظل مقيمة طوال عملية الحل.
تخصيص الموارد: يتم تقسيم الأفق إلى أجزاء أفق فرعية مخصصة لكتل خيوط CUDA. يتم حساب طول الأفق الفرعي ديناميكيًا بناءً على حدود الخيوط والذاكرة المشتركة للجهاز، مما يضمن احتواء مجموعة العمل بالكامل داخل الشريحة. تُستخدم الذاكرة العالمية فقط للتحميل الأولي، والمخرجات النهائية، وتبادل متغيرات الحدود.
المساهمات الرئيسية
يدعي البحث ثلاث مساهمات رئيسية:
إطار عمل CUDAMPC: بنية أصيلة لوحدات معالجة الرسومات تنفذ ADMM المتوازي في الأفق داخل نواة CUDA واحدة مقيمة في الذاكرة المشتركة.
بروتوكول التزامن المحلي للجيران: آلية تستبدل حواجز الشبكة بأعلام ذرية زوجية، مما يضمن بقاء تكاليف التنسيق مستقلة عن عدد كتل الأفق.
دراسة معيارية: تقييم شامل مقابل حلول CPU وGPU المتطورة على ستة مشاكل روبوتية غير خطية، مما يثبت أن زيادة الأفق القابل للتنفيذ في الوقت الفعلي تمكن من قدرات التحكم (مثل تجنب الاصطدام، وتنسيق السرب) التي لا تستطيع نماذج CPU الأساسية تحقيقها عند أي طول أفق يمكنها تشغيله.
النتائج
يقيم البحث CUDAMPC مقابل حلول CPU (مثل CasADi مع Ipopt، وacados مع HPIPM) وطرق GPU أخرى (مثل Primal-Dual iLQR، وGPU-SLS، وتنفيذات πMPC القائمة على التنسورات) عبر ستة معايير: البندول (Pendulum)، وعربة البندول (Cart-Pole)، وركن السيارة (Car Parking)، وشاحنة المقطورة (Truck-Trailer)، والدرون ذو العمود (Quadcopter-Pole)، والسرب المركزي (Centralized Swarm).
الأداء مقابل أطر التنسور: مقابل تنفيذات PyTorch وJulia لنموذج πMPC على نموذج طائرة خطي، حقق CUDAMPC تسريعًا يتراوح بين 136 ضعفًا إلى 965 ضعفًا. عُزي ذلك إلى تقليل إطلاق النوى من حوالي 172,000 إلى نواة واحدة لكل حل، وتقليل حركة مرور VRAM من حوالي 17 جيجابايت إلى حوالي 31 ميجابايت.
القابلية للتوسع: كان توسع وقت الحل في CUDAMPC مع طول الأفق (N) متفوقًا بشكل كبير على طرق CPU. على سبيل المثال، في مشكلة البندول عند N=1000، كان CUDAMPC أسرع بـ 20.1 ضعفًا من ثاني أسرع برنامج حل.
الجدوى في الوقت الفعلي: حافظ CUDAMPC على معدلات الوقت الفعلي عند أطوال أفق تزيد بمقدار مرتبة أو مرتبتين عن حلول CPU.
ركن السيارة: حل مشكلة تجنب الاصطسام القائمة على التحسين مع نظرة مستقبلية مدتها 100 ثانية خلال فاصل زمني قدره 0.1 ثانية.
السرب المركزي (10 وكلاء): كان CUDAMPC هو الحل الوحيد الذي تم تقييمه وحقق كلاً من التنفيذ في الوقت الفعلي (~28 مللي ثانية) والتنسيق الخالي من الاصطدام. فشلت حلول CPU (acados، CasADi) في إيجاد حلول مجدية ضمن الفاصل الزمني (استغرقت 3.5 ثانية و4.5 ثانية على التوالي)، بينما أدى حل Primal-Dual iLQR القائم على GPU، رغم كونه في الوقت الفعلي، إلى حدوث حالات جمود في النهايات الصغرى المحلية بسبب صعوبة ضبط قيود العقوبات الناعمة لتجنب الاصطدام الصلب.
الأهمية
يفترض البحث أن CUDAMPC يمثل تحولًا من استخدام وحدات معالجة الرسومات كمجرد مسرعات للجبر الخطي إلى تصميم مشترك شامل للخوارزمية والعتاد. من خلال تقليل تدخل المضيف وحركة مرور الذاكرة العالمية، يفتح إطار العمل القدرة على تشغيل مشكلات MPC طويلة الأفق وثقيلة القيود في الوقت الفعلي. تكمن الأهمية ليس فقط في السرعة الخام، بل في تمكين استراتيجيات التحكم (مثل التنسيق المركزي متعدد الوكلاء وتجنب الاصطدام طويل الأمد) التي كانت غير قابلة للتنفيذ حوسبيًا في السابق للأنظمة التي تعمل في الوقت الفعلي، مما يوسع النطاق التشغيلي للمنصات الروبوتية المتقدمة.