pytorch> = 1.0 การใช้งาน densenets, ปรับให้เหมาะสมเพื่อบันทึกหน่วยความจำ GPU
ในขณะที่ Densenets นั้นค่อนข้างง่ายที่จะนำไปใช้ในกรอบการเรียนรู้ลึก แต่การสร้างส่วนใหญ่ (เช่นต้นฉบับ) มีแนวโน้มที่จะหิวโหย โดยเฉพาะอย่างยิ่งจำนวนแผนที่คุณลักษณะระดับกลางที่สร้างขึ้นโดยการทำให้เป็นมาตรฐานและการดำเนินการต่อการเชื่อมต่อจะเพิ่มขึ้นเป็นสองเท่าด้วยความลึกของเครือข่าย มันคุ้มค่าที่จะเน้นว่านี่ไม่ใช่ทรัพย์สินที่มีอยู่ใน densenets แต่เป็นการดำเนินการ
การใช้งานนี้ใช้กลยุทธ์ใหม่เพื่อลดการใช้หน่วยความจำของ Densenets เราใช้จุดตรวจสอบเพื่อคำนวณบรรทัดฐานแบทช์และแผนที่คุณสมบัติการต่อกัน แผนที่คุณลักษณะระดับกลางเหล่านี้จะถูกยกเลิกในระหว่างการส่งไปข้างหน้าและคำนวณใหม่สำหรับผ่านไปข้างหลัง สิ่งนี้จะเพิ่มค่าใช้จ่าย 15-20% สำหรับการฝึกอบรม แต่ ลดการใช้แผนที่คุณลักษณะจากกำลังสองเป็นเชิงเส้น
การใช้งานนี้ได้รับแรงบันดาลใจจากรายงานทางเทคนิคนี้ซึ่งสรุปกลยุทธ์สำหรับ Densenets ที่มีประสิทธิภาพผ่านการแชร์หน่วยความจำ
ในโครงการที่มีอยู่ของคุณ: มีหนึ่งไฟล์ในโฟลเดอร์ 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) -ความลึกของเครือข่าย (จำนวนเลเยอร์ convolution) (ค่าเริ่มต้น 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 |
| มีประสิทธิภาพ (Multi-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}
}