بعض الحيل من Pytorch
Changelog
- 29 نوفمبر 2019: تم تحديث بعض تقنيات تصميم النماذج ومحتوى تسريع التفكير ، وأضاف رابط مقدمة إلى القمة ،
أيضا ، لقد حذفت tfrecord ، هل يمكن استخدام pytorch؟ أتذكر أنني لا أستطيع ذلك ، لذا قمت بحذفها (يشير إلى الحذف: <) - 30 نوفمبر 2019: معنى MAC التكميلي ، رابط الورق Shufflenetv2 التكميلي
- 2 ديسمبر 2019: لا يمكن لـ Pytorch الذي ذكرته سابقًا استخدام TfreCord. لقد رأيت اليوم إجابة من https://www.zhihu.com/question/358632497 ، وأنا في موقف صاعد.
- 23 ديسمبر 2019: أضاف العديد من المقالات العلمية الشهيرة حول القياس الكمي لضغط النموذج
- 7 فبراير 2020: تم مقتطف بعض الأشياء التي يجب ملاحظتها من المقالة وإضافتها إلى قسم مستوى التعليمات البرمجية
- 30 أبريل 2020:
- تمت إضافة نسخة احتياطية من المستندات من جيثب
- روابط مكملة لإدخال الطبقة التلافيفية و BN Layer Fusion
- هنا تفسير آخر. بالنسبة لمقالات وإجابات العديد من الأصدقاء الذين أشرت إليهم من قبل ، لا يتم ربط الروابط وملخص المحتوى المقابل معًا. تشير التقديرات إلى أن بعض الأصدقاء سيطرحون أسئلة عند قراءة المحتوى ذي الصلة ، ولا يمكنهم طرحها على المؤلف الأصلي. أنا آسف للغاية هنا.
- اضبط بعض المحتوى وحاول أن تتوافق مع الرابط المرجعي
- 18 مايو 2020: أضف بعض النصائح على Pytorch لحفظ ذاكرة الفيديو. في الوقت نفسه ، ما عليك سوى ضبط التنسيق. لقد وجدت أيضًا خطأً سابقًا:
non_blocking=False non_blocking=True . - 6 يناير 2021: اضبط بعض المقدمات على قراءة بيانات الصورة.
- 13 يناير 2021: أضاف استراتيجية للتفكير المتسارع. أعتقد أنني يجب أن أقوم بتحديث مستند Github أولاً. يعد تحديث إجابات Zhihu مزعجًا بعض الشيء ، ومن المستحيل مقارنة تغيير المعلومات ، لذلك من الصعب للغاية.
- 26 يونيو 2022: تم إعادة ضبط التنسيق وترتيب المحتوى التالي ، في حين تمت إضافة مراجع إضافية وبعض أحدث الاكتشافات.
- 20 يونيو ، 2024: يتم استكمال التعديل البسيط للتنسيق بفكرة لتسريع قراءة البيانات استنادًا إلى تنسيق
tar و IterableDataset .
Pytorch السرعة
ملحوظة
المستند الأصلي: https://www.yuque.com/lart/ugkv9f/ugysgn
بيان: معظم المحتوى يأتي من المشاركة على Zhihu والمدونات الأخرى ، ويتم إدراجها فقط هنا كمجموعة. المزيد من الاقتراحات موضع ترحيب.
إجابة Zhihu (مرحبًا بك في الإعجاب):
- يستغرق تحميل بيانات Pytorch Dataloader معظم الوقت. كيف تحلها يا رفاق؟ - إجابة فنان الناس - Zhihu
- عند استخدام Pytorch ، هناك الكثير من بيانات مجموعة التدريب للوصول إلى عشرات الملايين ، وماذا يجب أن أفعل إذا تم تحميل dataloader ببطء شديد؟ - إجابة فنان الناس - Zhihu
سرعات المعالجة
- لتقليل عمليات المعالجة المسبقة في كل مرة تقرأ فيها البيانات ، يمكنك التفكير في استخدام بعض العمليات الثابتة ، مثل
resize ، وحفظها مسبقًا ، واستخدامها مباشرة أثناء التدريب. - نقل المعالجة المسبقة إلى وحدة معالجة الرسومات لتسريع.
- يمكن أن تستخدم Linux
NVIDIA/DALI . - استخدم عمليات معالجة الصور المستندة إلى الموتر.
IO السرعة
- يوفر MMCV دعمًا فعالًا وشاملاً نسبيًا لقراءة البيانات: OpenMMLAB: تحليل مكون MMCV Core (III): FileClient
استخدم معالجة الصور بشكل أسرع
-
opencv أسرع بشكل عام من PIL .- لاحظ أن استراتيجية التحميل البطيئة لـ
PIL تجعلها تبدو open من imread of opencv ، لكنها في الواقع لا تقوم بتحميل البيانات بالكامل. يمكنك استدعاء طريقة load() على الكائن الذي يتم إرجاعه عن طريق open البيانات يدويًا. السرعة معقولة في هذا الوقت.
- لقراءات
jpeg ، يمكنك تجربة jpeg4py . - احفظ الرسم البياني
bmp (قلل من وقت فك التشفير). - مناقشة حول سرعة مكتبات معالجة الصور المختلفة: ما هو الفرق بين طريقة التنفيذ وسرعة قراءة وظائف Python المختلفة؟ - تشوهو
دمج البيانات في ملف مستمر واحد (قلل من عدد القراءات)
بالنسبة لقراءات الملفات الصغيرة على نطاق واسع ، يمكن حفظه كتنسيق ملف مستمر يمكن قراءته بشكل مستمر. يمكنك اختيار النظر في TFRecord (Tensorflow) ، recordIO ، hdf5 ، pth ، n5 ، lmdb ، إلخ.
-
TFRecord : https://github.com/vahidk/tfrecord - قاعدة بيانات
lmdb :- https://github.com/fangyh09/image2lmdb
- https://blog.csdn.net/p_lart/article/details/103208405
- https://github.com/lartpang/pysodtoolbox/blob/master/forbigdataset/imagefolder2lmdb.py
- التنفيذ على
IterableDataset ملف Tar
بيانات ما قبل القراءة
قبل قراءة البيانات المطلوبة للتكرار التالي. حالات الاستخدام:
- كيف تعطيك Dataloader في Pytorch - Mkfmiku مقالات - Zhihu
- تسريع قراءة البيانات إلى Pytorch - مقالات على مرحبا - Zhihu
مع الذاكرة
- تحميل مباشرة في الذاكرة.
- اقرأ الصورة وحفظها في كائن حاوية ثابتة.
- خريطة الذاكرة على القرص.
مع الحالة الصلبة
يتم استبدال القرص الصلب الميكانيكي بحالة NVME الصلبة. ارجع إلى كيفية إعطائك دم دجاج في Dataloader في Pytorch - مقالة Mkfmiku - Zhihu
استراتيجيات التدريب
التدريب منخفض الدقة
في التدريب ، يتم استخدام تمثيلات منخفضة الدقة ( FP16 أو حتى INT8 ، والشبكة الثنائية ، والشبكة الثلاث) بدلاً من تمثيلات الدقة الأصلية ( FP32 ).
يمكن أن يوفر كمية معينة من ذاكرة الفيديو وتسريع ، ولكن كن حذرًا من عمليات غير آمنة مثل الوسط والمبلغ.
- مقدمة في التدريب الدقيق المختلط:
- برنامج تعليمي للتدريب الدقيق المختلط من الضحلة إلى العمق
- دعم دقة مختلطة توفرها
NVIDIA/Apex .- Pytorch يجب أن يكون قطعة أثرية | Fast-Free: تسارع دقة هجين قائم على Apex
- تركيب Pytorch من حلول الأمراض الصعبة والمتنوعة - مقالات تشن هانك - Zhihu
- يبدأ Pytorch1.6 في توفير
torch.cuda.amp لدعم الدقة المختلطة.
دفعة أكبر
تميل دفعات أكبر إلى وقت تدريب أقصر في حالة الحقبة الثابتة. ومع ذلك ، تواجه الدفعات الكبيرة العديد من الاعتبارات مثل إعدادات الفصائل واستخدام الذاكرة ، وهو مجال آخر جذب الكثير من الاهتمام.
- الإعدادات Hyperparameter
- دقيقة دقيقة ، MiniBatch SGD: تدريب ImageNet في ساعة واحدة ، ورقة
- تحسين استخدام ذاكرة الفيديو
- تراكم التدرج
- التدرج checkpointing
- تدريب الشباك العميقة مع تكلفة الذاكرة تحت الخطية ، الورق
- العملية في مكان
- Batchnorm المنشط في الموقع للتدريب المحسّن للذاكرة من DNNs والأوراق والرمز
مستوى الكود
إعدادات المكتبة
- تعيين
torch.backends.cudnn.benchmark = True قبل أن تتمكن حلقة التدريب من تسريع الحساب. نظرًا لأن أداء خوارزميات Cudnn التي تحسب تلوينات أحجام النواة المختلفة تختلف ، يمكن أن يدير Autotuner معيارًا للعثور على أفضل خوارزمية. يوصى بتمكين هذا الإعداد عندما لا يتغير حجم الإدخال بشكل متكرر. إذا تغير حجم الإدخال بشكل متكرر ، فسوف يحتاج Autotuner إلى القياس في كثير من الأحيان ، مما قد يضر بالأداء. يمكن أن تزيد من سرعة الانتشار للأمام والخلف بمقدار 1.27x إلى 1.70x. - استخدم الصفحة لقفل الذاكرة ، أي تعيين
pin_memory=True في dataloader. - بالنسبة إلى
num_worker المناسب ، يمكن العثور على مناقشات مفصلة في دليل تسريع Pytorch - مقالات Yunmeng - Zhihu. - Optimizer.zero_grad (set_to_none = false هنا يمكنك تقليل بصمة الذاكرة عن
model.zero_grad() تعيين memset set_to_none=True None أن يحسن الأداء بشكل معتدل optimizer.zero_grad() لكن هذا سيغير أيضًا بعض السلوك ، وهو مرئي للوثائق memset سيتم None التدرج باستخدام عملية "الكتابة فقط". - أثناء backpropagation ، استخدم وضع
eval واستخدم torch.no_grad لإيقاف حسابات التدرج. - النظر في استخدام تنسيق الذاكرة القنوات.
- استبدال
DataParallel مع DistributedDataParallel . بالنسبة إلى GPUs المتعددة ، حتى لو لم يكن DataParallel سوى عقدة واحدة ، فإن DistributedDataParallel يفضل دائمًا لأن يتم تطبيق DistributedDataParallel على عمليات متعددة وإنشاء واحدة لكل وحدة معالجة الرسومات ، وتجاوز قفل المترجم العالمي Python (GIL) وزيادة السرعة.
نموذج
- لا تهيئة أي متغيرات غير مستخدمة ، لأن تهيئة Pytorch
forward منفصلة ، ولن يتم تهيئتها لأنك لا تستخدمها. -
@torch.jit.script ، استخدم pytroch jit لدمج العمليات بنقطة نقطة على kuda واحدة. Pytorch يحسن تشغيل التوتر بأبعاد كبيرة. من غير الكفاءة للغاية القيام بالكثير من العمليات على الموترات الصغيرة في Pytorch. لذلك ، إذا كان ذلك ممكنًا ، فإن إعادة كتابة جميع عمليات الحساب في دفعات يمكن أن تقلل من الاستهلاك وتحسين الأداء. إذا لم تتمكن من تنفيذ عمليات الدُفعات يدويًا ، فيمكن استخدام Torchscript لتحسين أداء الكود الخاص بك. Torchscript هي مجموعة فرعية من وظائف Python ، ولكن بعد التحقق من Pytorch بواسطة Pytorch ، يمكن لـ Pytorch تحسين رمز Torchscript لتحسين الأداء من خلال مترجم الوقت (JTT). ولكن النهج الأفضل هو تنفيذ عمليات الدُفعات يدويًا. - عند استخدام FP16 بدقة مختلطة ، قم بتعيين مضاعف من الحجم 8 لجميع التصميمات المعمارية المختلفة.
- الطبقة التلافيفية قبل BN يمكنها إزالة التحيز. لأنه من الناحية الرياضية ، يمكن تعويض التحيز عن طريق طرح BN. يمكننا حفظ معلمات النموذج وذاكرة وقت التشغيل.
بيانات
- اضبط حجم الدُفعة على مضاعف 8 لزيادة استخدام ذاكرة GPU إلى الحد الأقصى.
- أداء عمليات على غرار Numpy قدر الإمكان على وحدة معالجة الرسومات.
- استخدم
del لتحرير بصمة الذاكرة. - تجنب نقل البيانات غير الضروري بين الأجهزة المختلفة.
- عند إنشاء موتر ، حدد الجهاز مباشرة ، بدلاً من إنشائه ثم نقله إلى الجهاز المستهدف.
- استخدم
torch.from_numpy(ndarray) أو torch.as_tensor(data, dtype=None, device=None) ، والتي يمكن أن تتجنب إعادة تطبيق المساحة عن طريق مشاركة الذاكرة. للحصول على التفاصيل والاحتياطات ، يرجى الرجوع إلى المستند المقابل. إذا كانت الأجهزة المصدر والهدف هي وحدات المعالجة المركزية ، فلن يقوم torch.from_numpy و torch.as_tensor بنسخ البيانات. إذا كانت بيانات المصدر عبارة عن مجموعة numpy ، فاستخدم torch.from_numpy أسرع. إذا كانت بيانات المصدر عبارة عن موتر مع نفس نوع البيانات ونوع الجهاز ، فيمكن أن يتجنب torch.as_tensor نسخ البيانات ، والتي يمكن أن تكون قائمة أو tuple أو موتر Python. - استخدم ناقل الحركة غير المحظور ، أي تعيين
non_blocking=True . هذا يحاول التحويل غير المتزامن حيثما أمكن ، على سبيل المثال ، تحويل موتر وحدة المعالجة المركزية في ذاكرة قفل الصفحة إلى موتر CUDA.
تحسين المحسن
- تخزين معلمات النموذج في قطعة من الذاكرة المستمرة ، وبالتالي تقليل وقت
optimizer.step() .-
contiguous_pytorch_params
- باستخدام لبنات البناء المنصهرة في قمة
تصميم النموذج
سي إن إن
- Shufflenetv2 ، ورقة.
- تتسق قنوات الإدخال والمخرجات لطبقة الالتواء: عندما يكون عدد قنوات ميزة الإدخال والمخرجات في طبقة التوافق متساوية ، يكون MAC (وقت استهلاك الوصول إلى الذاكرة ، اختصار
memory access cost هو MAC ) الأصغر ، وتكون سرعة النموذج هي الأسرع في هذا الوقت - تقليل التجميع التلافيفية: ستزيد الكثير من عمليات المجموعة من جهاز Mac ، الذي سيؤدي إلى إبطاء النموذج
- تقليل فروع النماذج: أقل الفروع في النموذج ، كلما كان النموذج أسرع
- تقليل العمليات
element-wise : يكون استهلاك الوقت الناتج عن العمليات element-wise أكبر بكثير من القيم المنعكسة في التقلبات ، لذلك يجب تقليل العمليات element-wise إلى الحد الأدنى قدر الإمكان. يحتوي depthwise convolution أيضًا على خصائص التقلبات المنخفضة و MAC العالية.
محول الرؤية
- Trt-Vit: محول الرؤية الموجهة نحو Tensorrt ، ورقة ، تفسير.
- على مستوى المرحلة: يعد Transformer Block مناسبًا للمراحل اللاحقة من النموذج ، مما يزيد من المفاضلة بين الكفاءة والأداء.
- على مستوى المرحلة: يمكن أن يحسن نمط تصميم المسرح مع الضحلة أولاً ثم عميق الأداء.
- مستوى الكتلة: كتلة هجينة من المحول وخصق الزجاجة أكثر فاعلية من محول منفصل.
- مستوى الكتلة: يساعد نمط تصميم الكتلة العالمي ثم المحلي على تعويض مشاكل الأداء.
الأفكار العامة
- تقليل التعقيد: على سبيل المثال ، قطع النماذج وتقليمها ، وتقليل طبقات النموذج ومقياس المعلمة
- تعديل بنية النموذج: على سبيل المثال ، تقطير النموذج ، والحصول على نماذج صغيرة من خلال طريقة التقطير المعرفة
تسريع التفكير
نصف الدقة والترجمة
استخدم تمثيل الدقة المنخفض ( FP16 أو حتى INT8 ، الشبكة الثنائية ، وشبكة ثلاث قيمة) في الاستدلال لاستبدال تمثيل الدقة الأصلية ( FP32 ).
-
TensorRT هو محرك استنتاج الشبكة العصبية التي اقترحتها NVIDIA ، والتي تدعم تقدير 8BET بعد التدريب. يستخدم خوارزمية قياس النموذج القائم على الإدخال المتقاطع لتقليل درجة الفرق بين التوزيعات. - لقد دعم Pytorch1.3 وظيفة القياس الكمي بالفعل ، استنادًا إلى تنفيذ QNNPack ، ويدعم كمية ما بعد التدريب ، والتدريب على تصور الكميات الديناميكية والتقنيات الأخرى.
- بالإضافة إلى ذلك ، يعد
Distiller أداة تحسين نموذج مفتوحة المصدر تعتمد على Pytorch ، ويدعم بشكل طبيعي التكنولوجيا الكمية في Pytorch. - يدمج
NNI من Microsoft مجموعة متنوعة من خوارزميات تدريب الإدراك الكمي ويدعم عدة أطر عمل مفتوحة المصدر مثل PyTorch/TensorFlow/MXNet/Caffe2
لمزيد من التفاصيل ، يرجى الرجوع إلى ثلاثة AIS: [نقاش متنوع] ما هي أدوات المصادر المفتوحة المتاحة لتقدير النموذج الحالي؟
الانصهار التشغيلي
- مهارات تسريع التفكير النموذجية: اندماج الطبقات BN والطبقات - مقالات Xiaoxiaojiang - Zhihu
- تقارب طبقة Conv وطبقة BN في مرحلة الاستدلال الشبكة - مقالة Autocyz - Zhihu
- يوفر Pytorch نفسه وظائف مماثلة
إعادة المعلمة
- repvgg
- repvgg | دعنا مقنعك حتى النهاية ، تتجاوز الشبكة العادية 80 ٪ من TOP1 لأول مرة
تحليل الوقت
- يأتي Python مع العديد من
profile تحليل الأداء ، cProfile و hotshot . أساليب الاستخدام هي نفسها في الأساس. إنه ليس أكثر من ما إذا كانت الوحدة نقيًا أو مكتوبًا في C. - Pytorch Profiler هي أداة تجمع مقاييس الأداء أثناء التدريب والاستدلال. يمكن استخدام واجهة برمجة تطبيقات Context Manager's Profiler لفهم أفضل مشغل النماذج الأكثر تكلفة ، والتحقق من شكل الإدخال وسجلات المكدس ، ونشاط kernel الجهاز ، وتصور سجلات التنفيذ.
توصية المشروع
- تنفيذ ضغط النموذج على أساس pytorch:
- القياس الكمي: 8/4/2 بت (Dorefa) ، القيمة ثلاثية/ثنائية (TWN/BNN/XNOR-NET).
- التقليم: طبيعية ، منتظمة ، تشذيب القناة للهياكل التلافيفية المجمعة.
- بنية تلافيفية مجمعة.
- BN الانصهار لميزات الكمية الثنائية.
القراءة الموسعة
- يستغرق تحميل بيانات Pytorch Dataloader معظم الوقت. كيف تحلها يا رفاق؟ - تشوهو
- عند استخدام Pytorch ، هناك الكثير من بيانات مجموعة التدريب للوصول إلى عشرات الملايين ، وماذا يجب أن أفعل إذا تم تحميل dataloader ببطء شديد؟ - تشوهو
- ما هي المزالق/الحشرات في Pytorch؟ - تشوهو
- تحسين رمز تدريب Pytorch
- 26 ثانية CIFAR10 تدريب GPU ، يحب Jeff Dean أيضًا مهارات تحسين التعلم العميقة - مقالات عن قلب الآلات - Zhihu
- بعد تدريب بعض الميزات الجديدة على النموذج عبر الإنترنت ، لماذا يخدم وقت التنبؤ لـ TensorFlow بأكثر من 20 مرة أبطأ من الأصل؟ - إجابة Tzesing - Zhihu
- ضغط نموذج التعلم العميق
- اليوم ، هل تسارع نموذجك؟ فيما يلي 5 طرق للرجوع إليها (مع تحليل التعليمات البرمجية)
- ملخص للمخاطر الشائعة في Pytorch - مقالات يو Zhenbo - Zhihu
- دليل تسريع Pytorch - مقالات Yunmeng - Zhihu
- تحسين سرعة Pytorch وكفاءة الذاكرة (2022)
Pytorch يحفظ ذاكرة الفيديو
المستند الأصلي: https://www.yuque.com/lart/ugkv9f/nvffyf
تم جمعها من: ما هي نصائح حفظ الذاكرة (ذاكرة الفيديو) في Pytorch؟ - Zhihu https://www.zhihu.com/question/274635237
استخدم في مكانه
- حاول تمكين العمليات التي تدعم
inplace افتراضيًا. على سبيل المثال ، يمكن لـ relu استخدام inplace=True . - يمكن تعبئة
batchnorm وبعض وظائف التنشيط المحددة في inplace_abn .
وظيفة الخسارة
يمكن أن يؤدي حذف الخسارة في نهاية كل حلقة إلى توفير القليل من ذاكرة الفيديو ، لكنه أفضل من لا شيء. Tensor إلى أفضل الممارسات المتغيرة والذاكرة تحرير الذاكرة
مزج الدقة
يمكن أن يوفر كمية معينة من ذاكرة الفيديو وتسريع ، ولكن كن حذرًا من عمليات غير آمنة مثل الوسط والمبلغ.
- مقدمة في التدريب الدقيق المختلط:
- برنامج تعليمي للتدريب الدقيق المختلط من الضحلة إلى العمق
- دعم دقة مختلطة توفرها
NVIDIA/Apex .- Pytorch يجب أن يكون قطعة أثرية | Fast-Free: تسارع دقة هجين قائم على Apex
- تركيب Pytorch من حلول الأمراض الصعبة والمتنوعة - مقالات تشن هانك - Zhihu
- يبدأ Pytorch1.6 في توفير
torch.cuda.amp لدعم الدقة المختلطة.
إدارة العمليات التي لا تتطلب backpropagation
- بالنسبة للمراحل الآجلة التي لا تتطلب الانتشار الخلفي ، مثل فترات التحقق والاستدلال ، استخدم
torch.no_grad لالتفاف الرمز.- لاحظ أن
model.eval() torch.no_grad()
- قم بتعيين
requires_grad من المتغيرات التي لا تحتاج إلى حساب التدرج إلى False ، بحيث لا يشارك المتغير في الانتشار المتخلف للتدرج لتقليل استخدام الذاكرة من التدرجات غير الضرورية. - قم بإزالة مسار التدرج الذي لا يحتاج إلى حساب:
- Backpropagation العشوائي: استراتيجية فعالة للذاكرة لتدريب نماذج الفيديو ، يمكن رؤية التفسير:
- https://www.yuque.com/lart/papers/xu5t00
- https://blog.csdn.net/p_lart/article/details/124978961
تنظيف ذاكرة الفيديو
-
torch.cuda.empty_cache() هو نسخة متقدمة من del . سيجد استخدام nvidia-smi أن ذاكرة الفيديو لها تغييرات واضحة. ومع ذلك ، فإن الحد الأقصى لاستخدام ذاكرة الفيديو أثناء التدريب لا يبدو أنه يتغير. يمكنك المحاولة: كيف يمكننا إطلاق ذاكرة التخزين المؤقت لذاكرة GPU؟ - يمكنك استخدام
del لحذف المتغيرات الوسيطة غير الضرورية ، أو استخدام شكل replacing variables لتقليل الإشغال.
تراكم التدرج
قسّم A batchsize=64 إلى مجموعتين من 32 ، وبعد إعادة توجيه ، للخلف مرة واحدة. ولكنه سيؤثر على batchnorm وغيرها من الطبقات المتعلقة batchsize .
في وثائق Pytorch ، تم ذكر مثال على استخدام تراكم التدرج وخلط الدقة.
استخدم تقنية تراكم التدرج لتسريع التدريب الموزع ، والذي يمكن استخدامه للإشارة إلى: [أصلي] [DEEP]
التدرج checkpointing
يتم توفير torch.utils.checkpoint في Pytorch. يتم تحقيق ذلك عن طريق إعادة تنفيذ الانتشار للأمام في كل موقع نقطة التفتيش أثناء backpropagation.
تعتمد الشبكات العميقة التي تتدرب على الورق مع تكلفة الذاكرة الفرعية على تقنية نقطة التفتيش التدرج لتقليل ذاكرة الفيديو من O (N) إلى O (SQRT (N)). بالنسبة للنماذج الأعمق ، كلما زادت هذه الطريقة التي تحفظها هذه الطريقة ولا تتباطأ بشكل كبير.
- تحليل آلية نقطة التفتيش من Pytorch
- Torch.Utils.checkpoint مقدمة وسهلة الاستخدام
- تنفيذ Pytorch لتكلفة الذاكرة الفرعية ، المشار إليها من: ما هي نصائح حفظ الذاكرة (ذاكرة الفيديو) في Pytorch؟ - إجابة ليكين - Zhihu
الأدوات ذات الصلة
- يمكن أن تساعدك هذه الرموز على اكتشاف ذاكرة GPU أثناء التدريب مع Pytorch. https://github.com/oldpan/pytorch-memory-utils
- أقل من nvidia-smi؟ https://github.com/wookayin/gpustat
مراجع
- ما هي نصائح حفظ الذاكرة (ذاكرة الفيديو) في Pytorch؟ - إجابة Zheng Zhedong - Zhihu
- مناقشة موجزة حول التعلم العميق: كيفية حساب بصمة الذاكرة للنماذج والمتغيرات المتوسطة
- كيفية استخدام ذاكرة الفيديو بدقة في Pytorch
- ما هي نصائح حفظ ذاكرة الفيديو في Pytorch؟ - إجابة تشن هانك - Zhihu
- تحليل آلية ذاكرة الفيديو Pytorch - مقالة كونولي - Zhihu
نصائح أخرى
التكاثر
يمكنك متابعة الفصول ذات الصلة في المستند.
العملية الحتمية الإلزامية
تجنب استخدام الخوارزميات غير المحددة.
في Pytorch ، يمكن أن يجبر torch.use_deterministic_algorithms() استخدام الخوارزميات الحتمية بدلاً من الخوارزميات غير المحددة ، ويتم إلقاء خطأ إذا كانت العملية معروفة بأنها غير محددة (ولا يوجد بديل حتمي).
اضبط بذور الأرقام العشوائية
def seed_torch ( seed = 1029 ):
random . seed ( seed )
os . environ [ 'PYTHONHASHSEED' ] = str ( seed )
np . random . seed ( seed )
torch . manual_seed ( seed )
torch . cuda . manual_seed ( seed )
torch . cuda . manual_seed_all ( seed ) # if you are using multi-GPU.
torch . backends . cudnn . benchmark = False
torch . backends . cudnn . deterministic = True
seed_torch () مرجع من https://www.zdaiot.com/mlframeworks/pytorch/pytorch٪E9٪9A٪8F٪E6٪9C٪BA٪E7٪A7٪8D٪E5٪90/
علة مخفية في Dataloader قبل Pytorch الإصدار 1.9
تبين التفاصيل المحددة أن 95 ٪ من الناس ما زالوا يرتكبون أخطاء Pytorch - مقالات الصدفة - Zhihu
للحصول على الحلول ، يرجى الرجوع إلى الوثائق:
def seed_worker ( worker_id ):
worker_seed = torch . initial_seed () % 2 ** 32
numpy . random . seed ( worker_seed )
random . seed ( worker_seed )
DataLoader (..., worker_init_fn = seed_worker )