حفظ حالة استئناف التدريب يبدأ بتحديد ما سيحتاجه العمل التالي. تحميل قيم النموذج لإنتاج مخرج يختلف عن متابعة تدريب يعتمد أيضًا على حالة المحسن ومكان التوقف. سنفحص محتويات سجل توضيحي، دون إنشاء ملف نموذج أو تشغيله.
الخلاصة السريعة
سمّ هدف الحفظ، واحفظ حالة النموذج والمحسن والتقدم اللازم له؛ وإذا أردت نسخة أفضل ثابتة، فلا تعامل مرجعًا حيًا إلى الحالة كأنه نسخة مستقلة مجمدة.
- يوضح دليل PyTorch أن state_dict للنموذج يشمل المعاملات والمخازن المسجلة، وأن نقطة الاستئناف العامة تضم أيضًا حالة المحسن ومعلومات التقدم. [1]
- في سجلنا الافتراضي، وزن 4 وحده لا يحدد حالة محسن مسماة 3 ولا موضع التحديث التالي 7؛ القيم معانٍ معلنة، وليست تنسيق ملف فعليًا أو تجربة تحميل.
- ينبه الدليل إلى أن إسناد model.state_dict() يعطي مرجعًا لا نسخة مجمدة؛ لحفظ أفضل حالة مستقلة يذكر النسخ العميق أو التسلسل للحفظ. [1]
- يضبط وضع النموذج بحسب الاستدلال أو متابعة التدريب؛ وحتى مع حالة محفوظة، لا ندعي تكرارًا مطابقًا للمسار دون تحديد بقية ظروف العمل. [1]
حدد ماذا يجب أن يحتويه السجل
يشمل state_dict معاملات النموذج ومخازنه المسجلة؛ يعرض دليل الاستئناف حفظ حالة المحسن والدورة والخسارة إلى جانبه. [1]
نفرق في مشروع تخيلي بين «نسخة عرض» نريد استخدامها لحساب مخرج و«نسخة متابعة» نريد منها مواصلة الإجراء. لا نطالب كل غرض بالقائمة نفسها دون تحديد بنية النموذج وطريقة العمل.
وقد تكون قيمة داخل النموذج مخزنًا مسجلًا لا وزنًا يتعلم بتدرج. لذلك وصف الملف بأنه «قائمة الأوزان» قد يخفي جزءًا محفوظًا في حالته؛ اقرأ ما في السجل الفعلي بدل الاعتماد على عنوان المجلد.
قارن سجلين لهما الوزن نفسه
نختار نموذجًا افتراضيًا فيه وزن واحد حالي قيمته 4. سجل العرض يحتفظ بهذا الرقم فقط. سجل المتابعة يحتفظ به، وبحقل نسميه «ذاكرة المحسن» قيمته 3، وبموضع التحديث التالي 7، وبمعدل معلن 0.02.
هذه أسماء تعليمية لقائمة متطلبات، وليست مفاتيح صالحة وعدنا أن مكتبة بعينها ستقبلها. لم نعرّف خوارزمية تستعمل ذاكرة 3، لذا لا نخترع منها مقدار تحديث؛ نثبت فقط أن الوزن 4 لا يكفي لاستنتاج هذه الحقول.
ولو كتب السجل رقم الدورة 8 وحده، فلن نستنتج تلقائيًا أي دفعة انتهت داخلها. عند حاجتنا إلى متابعة وسط دورة، نعلن أيضًا موضعها في تسلسل العمل؛ لا نحوله من اسم «دورة» إلى معلومة مخفية.
| المعلومة | نسخة العرض المفترضة | نسخة المتابعة المفترضة |
|---|---|---|
| الوزن الحالي | 4 | 4 |
| ذاكرة محسن معلنة | غير موجودة | 3 |
| التحديث التالي | غير موجود | 7 |
| معدل معلن | غير موجود | 0.02 |
هل حفظت نسخة مستقلة أم اسمًا لحالة متغيرة؟
تنبيه الدليل محدد: ناتج model.state_dict() مرجع؛ لحفظ أفضل حالة ثابتة يطلب النسخ العميق أو حفظها بالتسلسل، وإلا قد تتحدث مع التدريب اللاحق. [1]
نصور سجلًا اخترناه عندما كان الوزن 4، ثم استمر العمل حتى صار 5. المرجع إلى الحالة الحية ليس تعهدًا ببقاء 4؛ النسخة المستقلة المجمدة تحفظ القيمة القديمة التي قصدنا مقارنتها.
لم ننفذ إسنادًا أو نسخًا برمجيًا هنا. الفكرة العملية هي أن نكتب بجوار اسم «أفضل نسخة» متى أخذت وكيف ثبت محتواها، ثم نفحص الملف المقصود بدل استعادة آخر حالة باسم قديم.
ما الذي تعنيه متابعة العمل فعليًا؟
يفرق الدليل بين وضع eval للاستدلال وtrain لمتابعة التدريب عند التحميل. [1]
نسجل البنية وإعداد المحسن ومكان التقدم والغرض التالي. وإذا أردنا إعادة المسار بدقة، نسأل كذلك عن ترتيب البيانات والحالات العشوائية وجدول المعدلات وأي ظروف ذات صلة؛ مثال السجل لا يثبت أننا احتفظنا بها.
وجود الملف لا يثبت نجاح تحميله في بنية مختلفة، ولا صحة مخرجاته، ولا تطابق الخطوات التالية بتًا ببت. لم ننتج نقطة حفظ أو نختبر استئنافًا؛ قدمنا قائمة مقارنة تساعد القارئ على تعريف اختبار المتابعة الذي سيحتاجه.
المصادر ومتابعة القراءة
أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.
