PyTorch / التخزين والاسترجاع والتنفيذ المحول / الدرس 17
التصدير وعقود الأشكال الديناميكية
صف برنامج الموتر المدعوم ومجال مدخلاته بدلاً من اعتبار مثال ملتقط نقلاً عاماً بلا قيود.
في هذه الصفحة
أهداف الدرس
- تمييز رسم موتر مصدر من برنامج Python اعتباطي.
- تحديد الأبعاد الثابتة والديناميكية المحدودة.
- فحص السلوك والتوافق ضمن عقد التصدير المعلن.
يلتقط التصدير حساب موتر مقيداً
تأخذ torch.export.export وحدة ووسائط أمثلة وتنتج ExportedProgram وفق افتراضات الالتقاط والشكل الموثقة. وليست حفظ state_dict أو تحسين دالة Python عبر torch.compile. للرسم والحالة والتوقيع والقيود والمؤثرات المدعومة معانيها الخاصة. لا يعد التصدير بحفظ كل أثر Python جانبي أو بنية بيانات كبرنامج مستقبلي غير مقيد. افحص الواجهة المثبتة بعينها، بما فيه الالتقاط الصارم وغير الصارم، ولا تفترض أن نجاح مرور عادي يثبت قابلية التصدير أو هدف نشر عاماً.
اجعل مجال المدخل الديناميكي صريحاً
تحسب الوحدة العنصرية التوضيحية 2*x+1 بعرض سمتين ثابت. تعلن Dim مسماة أحجام دفعة من اثنين إلى أربعة والعينة حجمها اثنان. شكل النتيجة الجديدة المشتقة (3,2) وكل عنصر ثلاثة. يطلب strict=True صراحة بدلاً من وراثة افتراض متغير. يتجنب المثال أسئلة تخصص الحجم صفر وواحد عمداً ولا يعد بمدخل خارج مجاله. إعلان بعد ديناميكي عقد قيود، لا أمر يزيل فروعاً غير متوافقة أو افتراضات إعادة تشكيل.
import torch
from torch import nn
class Scale(nn.Module):
def forward(self,x):
return 2*x+1
sample = torch.ones(2,2,dtype=torch.float64,device="cpu")
batch = torch.export.Dim("batch",min=2,max=4)
program = torch.export.export(Scale(),(sample,),dynamic_shapes={"x":{0:batch}},strict=True)
new_input = torch.ones(3,2,dtype=torch.float64,device="cpu")
output = program.module()(new_input)
print("shape", tuple(output.shape))
print("first row", output[0].tolist())
shape (3, 2)
first row [3.0, 3.0]
للدالة العنصرية دفعة ديناميكية محدودة صراحة وعرض سمات ثابت. لم ينفذ التقاط تصدير أو استنتاج قيود أو تشغيل وحدة مصدرة أو حفظ.
يجب أن يطابق استدلال الشكل النموذج الفعلي
قد تتطلب عملية تساوي أبعاد أو قابلية قسمة أو حجماً أدنى أو عدد سمات ثابتاً. يستطيع التصدير الإبلاغ عن تعارض تلك المتطلبات المستنتجة مع الوصف الديناميكي المعلن. اقرأ وبرر العلاقة المطلوبة بدلاً من نسخ إصلاح مقترح يغير المهمة المدعومة بصمت. يحتاج تفرع Python المعتمد على قيم الموتر والمؤثر غير المدعوم صياغة مدعومة خاصة أو حدوداً صريحة. لا يفحص رسم بأشكال مقيدة الوحدات أو خرائط الفئات أو إتاحة الوسم أو مجالاً عددياً ذا معنى تلقائياً. احفظ فحص المعنى بجوار عقد البرنامج الملتقط.
يوضح الحارس المحلي النطاق ولا ينفذ التصدير
يقبل المرافق القياسي دفعة مستطيلة بسمتين وحجم اثنين إلى أربعة، ويرفض خمسة، ويحسب الحساب العنصري نفسه. رسالته المخصصة جزء من المدقق المحلي فقط. لا يحاكي حراس ExportedProgram التنفيذية أو يثبت التقاط كل شكل في المجال. قارن السلوك العادي والمصدر في بيئة إطار مدعومة على أحجام صالحة ممثلة وحدود وأشكال باطلة وأنواع مناسبة ووضع الوحدة المقصود. تحقق من الخرج والقرارات اللاحقة بقاعدة مقارنة مبررة.
def validate(rows):
if not 2 <= len(rows) <= 4:
raise ValueError("batch outside 2..4")
if any(len(row) != 2 for row in rows):
raise ValueError("expected two features")
return [[2*value+1 for value in row] for row in rows]
output = validate([[1.0,1.0]]*3)
print("shape", (len(output),len(output[0])))
try:
validate([[1.0,1.0]]*5)
except ValueError as error:
print(str(error))
shape (3, 2)
batch outside 2..4
يفحص المدقق المحلي المنفذ مجال شكل وحساباً معلنين، لا حراس torch.export أو مؤثرات ملتقطة أو أثراً مصدراً قابلاً للنقل.
تحتاج قابلية النقل وتحميل الأثر أدلة مستقلة
يعتمد الرسم الملتقط وأثر التصدير المحفوظ على صيغة ومؤثرات وبيئة وافتراضات إصدار مدعومة. لا تستنتج توافقاً طويل الأجل أو بين الإصدارات من التقاط ناجح واحد أو امتداد اسم. احفظ المعمارية والمعالجة وهوية الحالة وعقد الشكل والوضع ودليل المدخل المعلوم المناسب للمستهلك. برنامج PyTorch 2.14 توضيحي هنا لغياب torch؛ ولم ينفذ تصدير أو محلل قيد ديناميكي أو مدقق رسم أو حفظ وتحميل أثر أو خلفية نشر أو وحدة مصدرة. شغل مدقق القوائم المحدود وحسابه وحدهما.
الأخطاء الشائعة وإصلاحها
عوملت دفعة المثال كبرهان لكل حجم مستقبل
- لماذا يحدث؟
- لم تعلن افتراضات الشكل الثابت والديناميكي أو تفحص.
- كيف تصلحه؟
- حدد مجال المدخل المدعوم الفعلي واختبره.
- كيف تتجنب تكراره؟
- أدرج أحجام الحدود الصالحة وحالات الشكل الباطل.
ضيق إصلاح قيد مقترح مهمة المنتج بصمت
- لماذا يحدث؟
- حُل خطأ التقاط دون مراجعة التغطية المطلوبة.
- كيف تصلحه؟
- صالح افتراضات النموذج ومتطلبات المدخل المقصودة صراحة.
- كيف تتجنب تكراره؟
- سجل تغير عقد الشكل كتغير واجهة.
افتُرض نقل ملف مصدر إلى أي بيئة
- لماذا يحدث؟
- أُهمل توافق البيئة والمؤثرات والصيغة.
- كيف تصلحه؟
- اختبر بيئة المستهلك الموثقة وسياسة التحميل.
- كيف تتجنب تكراره؟
- احفظ افتراضات الإصدار وسلوك المدخل المعلوم مع الأثر.
اختبر فهمك
1. لماذا يعلن المثال دفعة 2..4 بدلاً من أي دفعة موجبة؟
اعرض الحل المشروح
يحدد مجالاً تعليمياً محدوداً ويتجنب استنتاج سلوك غير مقيد من عينة واحدة. الحساب العنصري بسيط، لكن عقد التصدير يحتاج التقاطاً وتحققاً مدعومين أيضاً. يجب إعلان مجال آخر واختباره عمداً بدلاً من افتراضه.
2. هل يثبت قبول الشكل (3,2) استخدام الوحدات المقصودة للسمات؟
اعرض الحل المشروح
لا. تصف قيود الشكل الأبعاد لا معنى القياس. يجب أن يحفظ المستهلك ترتيب السمات والوحدات والمعالجة ومعنى الخرج بصورة مستقلة. يثبت المرافق حارسه وحسابه فقط ولا ينفذ رسم PyTorch مصدراً.
أهم ما تعلمته
- يمثل التصدير برنامجاً مدعوماً وفق افتراضات صريحة.
- تعرف الأبعاد الديناميكية مجالاً مقيداً لا عمومية غير محدودة.
- افصل فحوص السلوك والمعنى وثقة الأثر وقابلية النقل.