PyTorch: أداة كشف الـ NaNs في 3 مللي ثانية
واجه مطور الذكاء الاصطناعي مشكلة شائعة في تدريب نماذج بايثورش وهي ظهور قيم غير محدودة (NaNs) بشكل صامت دون توقف البرنامج. في تجربة محددة، توقف نموذج ResNet المدربين على بيانات طبية بعد فقدان القيم في الدفعة رقم 47000. عند استخدام أداة الكشف الافتراضية في بايثورش وهي set_detect_anomaly، واجه المطور بطئاً هائلاً في التدريب بنسبة تصل إلى 50 إلى 100 ضعفاً على معالجات الرسوميات، كما أن الأداة حددت مكان تدمير القيمة وليس مصدره الأصلي، مما أدى إلى هدر ساعات في التصحيح. بناءً على هذه التجربة، قام المطور بتطوير أداة جديدة تسمى NaNDetector تعتمد على تقنية "الخطافات الأمامية" (Forward Hooks) في بايثورش. تهدف هذه الأداة إلى التقاط الأخطاء في طبقة النموذج الدقيقة وفي الوقت الفعلي دون التأثير السلبي الكبير على الأداء. بينما تضيف الأداة القديمة وقتاً طويلاً لإيقاف تشغيل الأنظمة بشكل متزامن، تضيف الأداة الجديدة حوالي 3 إلى 4 ملي ثانية فقط لكل تمرير، مما يجعلها عملية للاستخدام في البيئات الإنتاجية واسعة النطاق. تعتمد آلية عمل الأداة الجديدة على ربط دوال استدعاء مخصصة بكل طبقة في الشبكة العصبية لفحص المخرجات فوراً بعد الانتهاء من العملية الأمامية. تقوم الدالة بفحص وجود قيم غير محدودة أو لا نهائية في المخرجات باستخدام دوال بايثورش القياسية، وبما أنها لا تحتفظ برسم العمليات الحسابية الكامل، فإنها لا تعطل تنفيذ kernels على معالجات الرسوميات. توفر الأداة سجلات منظمه تحتوي على تفاصيل مثل رقم الدفعة، واسم الطبقة، ونوع الوحدة، وإحصاءات القيم المحدودة عند لحظة الكشف، بالإضافة إلى تمييز ما إذا كان الخطأ في المدخلات أو المخرجات. إضافة إلى كشف NaNs، تتضمن الأداة ميزة أخرى مهمة وهي مراقبة انحدار القيم (Gradient Norms). غالباً ما ينشأ الخطأ الناتج عن قيم NaN من زيادة معدلات التعلم بشكل مفرط مما يؤدي إلى انفجار القيم في التدرج، مما يترتب عليه قيم غير محدودة في الطبقات التالية. تتيح الأداة فحص التدرج مباشرة بعد حساب الخسارة، مما يسمح باكتشاف المشكلة قبل أن تظهر كقيمة NaN فعلية في المخرجات، مما يوفر وقتاً طويلاً في تحديد السبب الجذري. صممت الأداة لتكون آمنة للاستخدام في بيئات متعددة العمال، حيث تستخدم أقفالاً برمجية لضمان عدم حدوث أخطاء في التزامن عند تعديل الحالة المشتركة. كما تدعم الأداة تقييد الذاكرة لمنع تراكم السجلات في التشغيلات الطويلة، وتوفر خياراً لاستثناء أنواع معينة من الطبقات التي قد تنتج قيمًا غير محدودة بشكل طبيعي مثل طبقات التسوية أو التصفية. يمكن دمج الأداة بسهولة في حلقة التدريب القياسية عبر إدارة السياق، وتوفر تقارير مفصلة تساعد المهندسين على تحديد موقع المشكلة بدقة بدلاً من التخمين. تجدر الإشارة إلى أن هذه الأداة هي أداة مساعدة للمراقبة والتصحيح ولا تغني عن الممارسات السليمة في التدريب مثل تقييد التدرج وضبط معدلات التعلم بشكل مناسب. كما أن الأداء قد يختلف قليلاً بناءً على عمق النموذج، حيث يزداد وقت المعالجة الطفيف مع زيادة عدد الطبقات، إلا أنه يظل مقبولاً للغاية مقارنة بالأداء البطيء للأدوات التقليدية. تتوفر الشفرة الكاملة للأداة ومقاييس الأداء بشكل مفتوح المصدر على منصة GitHub لتسهيل استخدامها وتطويرها من قبل المجتمع التقني.
