Pytorch> = 1.0 تنفيذ الكثافة ، تم تحسينه لحفظ ذاكرة GPU.
في حين أن الكثافة سهلة التنفيذ إلى حد ما في أطر التعلم العميق ، فإن معظم عمليات التنفس (مثل الأصل) تميل إلى أن تكون متعطشة للذاكرة. على وجه الخصوص ، ينمو عدد خرائط الميزات الوسيطة الناتجة عن تطبيع الدُفعات وعمليات التسلسل التربيعية مع عمق الشبكة. تجدر الإشارة إلى أن هذه ليست خاصية متأصلة في الكثافة ، بل للتنفيذ.
يستخدم هذا التنفيذ استراتيجية جديدة لتقليل استهلاك ذاكرة الكثافة. نحن نستخدم CheckPointing لحساب خرائط المعيار الدُفعات وميزات التسلسل. يتم التخلص من خرائط الميزات الوسيطة هذه أثناء التمريرة الأمامية وإعادة حسابها للمرور للخلف. هذا يضيف 15-20 ٪ من الوقت النفقات العامة للتدريب ، ولكنه يقلل من استهلاك خريطة الميزات من التربيع إلى الخطي.
هذا التنفيذ مستوحى من هذا التقرير الفني ، الذي يوضح استراتيجية للكائنات الفعالة من خلال مشاركة الذاكرة.
في مشروعك الحالي: يوجد ملف واحد في مجلد models .
models/densenet.py هي تطبيق يستند إلى تطبيقات TorchVision و Project Killer. إذا كنت تهتم بالسرعة ، والذاكرة ليست خيارًا ، فقم بتمرير الوسيطة efficient=False في مُنشئ DenseNet . خلاف ذلك ، تمر في efficient=True .
خيارات:
block_configefficient=True يستخدم إصدار الذاكرة الموفرة للذاكرةsmall_inputs=False . ل cifar أو svhn ، تعيين small_inputs=True .تشغيل العرض التوضيحي:
الحزمة الإضافية الوحيدة التي تحتاج إلى تثبيتها هي Python-Fire:
pip install fireCUDA_VISIBLE_DEVICES=0 python demo.py --efficient True --data < path_to_folder_with_cifar 10> --save < path_to_save_dir >CUDA_VISIBLE_DEVICES=0,1,2 python demo.py --efficient True --data < path_to_folder_with_cifar 10> --save < path_to_save_dir >خيارات:
--depth (int) -عمق الشبكة (عدد طبقات الالتواء) (الافتراضي 40)--growth_rate (int) -عدد الميزات المضافة لكل طبقة Densenet (افتراضي 12)--n_epochs (int) -عدد الحقبة للتدريب (الافتراضي 300)--batch_size (int) -حجم minibatch (افتراضي 256)--seed (int) -قم بتعيين البذور العشوائية يدويًا (لا شيء افتراضي) مقارنة بين التنفيذ (كل منهما عبارة عن Densenet-BC مع 100 طبقة ، حجم الدفعة 64 ، تم اختبارها على Nvidia Pascal Titan-X):
| تطبيق | إزاحة الذاكرة (GB/GPU) | السرعة (Sec/Mini Batch) |
|---|---|---|
| ساذج | 2.863 | 0.165 |
| فعال | 1.605 | 0.207 |
| فعال (متعدد GPU) | 0.985 | - |
@article{pleiss2017memory,
title={Memory-Efficient Implementation of DenseNets},
author={Pleiss, Geoff and Chen, Danlu and Huang, Gao and Li, Tongcheng and van der Maaten, Laurens and Weinberger, Kilian Q},
journal={arXiv preprint arXiv:1707.06990},
year={2017}
}