PyTorch / التخزين والاسترجاع والتنفيذ المحول / الدرس 16
الترجمة وعقود انقطاع الرسم
افهم torch.compile كتحويل تنفيذ مدعوم بحراس وحدود التقاط وأدلة أداء منفصلة.
في هذه الصفحة
أهداف الدرس
- تمييز التنفيذ العادي المباشر من التقاط الرسم وعمل الخلفية.
- شرح fullgraph وسلوك انقطاع الرسم وفق الواجهة المثبتة.
- التحقق من المعنى قبل نسبة سرعة أو عدد ترجمات للتغيير.
ليست الترجمة هدفاً إحصائياً جديداً
تحول torch.compile مسار تنفيذ Python وموترات مدعوماً عبر التقاط رسم وخلفية مختارة. ولا تغير حاجة المهمة إلى وسوم وأشكال وأوضاع وتدرجات وتقييم صحيح. قد تتخصص الدالة المترجمة في خصائص مدخلات أو حالة محيطة وتعتمد على حراس لإعادة الاستخدام. قد يتطلب نداء لاحق نسخة ملتقطة أخرى إذا لم تتحقق الافتراضات. مجموعة الحراس الدقيقة وسلوك الذاكرة الداخلية تفاصيل تنفيذ تفحص بتشخيص موثق، لا قائمة تستنتج من الشكل أو اسم دالة وحدهما.
اختر حداً صغيراً صريحاً للالتقاط
تحسب الدالة التوضيحية فرعاً عنصرياً آمناً عبر torch.where وتطلب backend="eager" وfullgraph=True. يساعد اختيار الخلفية على عزل التقاط الرسم عن توليد شيفرة المترجم منخفضة المستوى؛ وليس وعد تسريع. يطلب fullgraph=True رسمًا واحداً قابلاً للالتقاط وفق العقد، وقد يرفع خطأ إذا تعذر ذلك. لا يثبت نجاح تنفيذ عادي وحده توافق الالتقاط. تبقى الموترات على CPU، ولا توجد عمليات إدخال أو إخراج خارجية أو نموذج محمل أو قيم عشوائية أو تسجيل ذو آثار داخل الدالة الملتقطة.
import torch
def reference(x):
return torch.where(x>0,x*x,-x)
compiled = torch.compile(reference,backend="eager",fullgraph=True)
x = torch.tensor([-2.0,1.0,3.0],dtype=torch.float64,device="cpu")
result = compiled(x)
print("values", result.tolist())
print("same", torch.equal(result,reference(x)))
values [2.0, 1.0, 9.0]
same True
خلفية eager اختيار تشخيص التقاط موثق، لا ادعاء سرعة توليد شيفرة. لم تنفذ ترجمة أو التقاط رسم أو استدعاء موتر أو فحص مساواة في torch.
يجيب انقطاع الرسم وإعادة الترجمة عن سؤالين مختلفين
عند السماح بانقطاع الرسم يمكن التقاط مناطق مدعومة حول عمل Python غير ملتقط. أما فشل الحارس فيخص بقاء نسخة ملتقطة سابقاً صالحة لنداء آخر. قد يؤثر كلاهما في الأداء، لكنهما تشخيصان لا يتبادلان. قد يحتاج تفرع Python المعتمد على البيانات أو استخراج عدد عادي أو عملية غير مدعومة أو تسجيل تحقيقاً وفق الواجهة المثبتة. لا تحذف فرعاً معناداً لمجرد تجنب خطأ. أعد الصياغة بعمليات موتر أو تحكم مدعومة فقط عندما تحفظ الدالة المقصودة، بما فيها سلوك الحدود والأخطاء.
لا تجعل مثال المقارنة تشخيص مترجم زائفاً
يحسب برنامج المكتبة القياسية القاعدة العددية نفسها ويعد ثلاثة تواقيع وصفية صريحة. ولا ينفذ حراس Dynamo أو يثبت ثلاث ترجمات فعلية أو يتنبأ بمشاركة رسم ديناميكي لأشكال معينة. قارن النتائج العادية والمحولة على أشكال وأنواع وقيم وأوضاع مدعومة ممثلة وتدرجات مناسبة في بيئة متاحة. استخدم سماحيات مبررة وقرارات لاحقة حيث لا تلزم المساواة التامة أو لا تكفي. افصل كلفة الالتقاط والترجمة في النداء الأول عن التنفيذ المستقر عند تقييم التحسين.
values = [-2.0,1.0,3.0]
result = [x*x if x>0 else -x for x in values]
observed = [((3,),"float64","cpu"),((5,),"float64","cpu"),((3,),"float32","cpu")]
print("values", result)
print("distinct declared signatures", len(set(observed)))
values [2.0, 1.0, 9.0]
distinct declared signatures 3
يوضح حساب الفرع وعد البيانات الوصفية المنفذان عقد مقارنة. ليست التواقيع حراس Dynamo أو عدد ترجمات مقاساً.
احفظ مرجعاً مقروءاً وحد الإصدار
احتفظ بالتنفيذ العادي وإعادة إنتاج ضيقة إذا فشل التحويل أو تغير السلوك. سجل إصدار الوثائق والواجهة وبناء البيئة والخلفية والإعداد وعقد المدخل والتشخيص الفعلي. التنفيذ المترجم والتصدير والحفظ والنشر واجهات مختلفة بقيود مختلفة. لا يشغل المساق أياً منها. برنامج torch غير منفذ، وخرجه مشتق من الصيغة العنصرية؛ ونفذ حساب القوائم وعد التواقيع فقط. لا يدعى اختبار نجاح ترجمة أو غياب انقطاع أو توليد نواة أو تسريع أو سلوك تدريب.
الأخطاء الشائعة وإصلاحها
افتُرضت صلاحية المسار الملتقط لكل مدخل مستقبلي
- لماذا يحدث؟
- أُهملت شروط الحراس والتخصص.
- كيف تصلحه؟
- اختبر المجال المدعوم وافحص تشخيص إعادة الاستخدام الفعلي.
- كيف تتجنب تكراره؟
- احفظ حالات الشكل والنوع وحد القيم والوضع والخطأ في المقارنة.
عُرض backend="eager" كمعيار سرعة
- لماذا يحدث؟
- اختلط تشخيص الالتقاط بتوليد شيفرة محسنة.
- كيف تصلحه؟
- حدد المرحلة التي تفحصها الخلفية وقس الأداء منفصلاً.
- كيف تتجنب تكراره؟
- افصل أدلة الصحة والالتقاط والتوليد والتوقيت.
غير تجاوز انقطاع الرسم الدالة
- لماذا يحدث؟
- حُذف منطق غير مدعوم دون حفظ المعنى.
- كيف تصلحه؟
- أعد الصياغة بمكافئ مدعوم أو احتفظ بالمسار العادي.
- كيف تتجنب تكراره؟
- قارن المخرجات الحدية والأخطاء المقصودة قبل التحسين.
اختبر فهمك
1. لماذا لا يعد عدد ثلاثة تواقيع دليلاً على ثلاث ترجمات torch؟
اعرض الحل المشروح
هو عد مجموعة لأشكال وأنواع وأجهزة أدخلت يدوياً. قد يحرس Dynamo خصائص أخرى أو يشارك بعض الحالات الديناميكية أو يلتقط مناطق متعددة وفق تنفيذه الفعلي. يثبت سلوك الترجمة تشخيص مدعوم فعلي فقط.
2. ماذا يضيف fullgraph=True إلى نتيجة صحيحة مرة واحدة في التنفيذ العادي؟
اعرض الحل المشروح
يطلب من الالتقاط تحقيق عقد رسم واحد ورفض الانقطاعات غير المدعومة بدلاً من الاعتماد على نتيجة Python عادية. يبقى الخرج المعروض توقعاً معللاً لغياب torch. وحتى نجاح الالتقاط في مكان آخر يحتاج تحقق السلوك والأداء للمجال المقصود.
أهم ما تعلمته
- افصل الالتقاط والحراس والانقطاع وتوليد الخلفية والتوقيت.
- احتفظ بمرجع عادي صحيح لكل تحويل.
- لا يشهد المرافق الرياضي بسلوك المترجم.