DNN प्रशिक्षण के सीपीयू और GPU स्मृति आवश्यकताओं की भविष्यवाणी


10

मान लें कि मेरे पास कुछ गहन शिक्षण मॉडल वास्तुकला है, साथ ही एक चुने हुए मिनी-बैच आकार भी है। मैं उस मॉडल को प्रशिक्षित करने के लिए इन अपेक्षित स्मृति आवश्यकताओं से कैसे प्राप्त करूं?

एक उदाहरण के रूप में, आयाम 1000 के इनपुट के साथ एक (गैर-आवर्तक) मॉडल पर विचार करें, आयाम 100 की 4 पूरी तरह से जुड़ी छिपी हुई परतें, और आयाम 10 की एक अतिरिक्त आउटपुट परत। मिनी-बैच का आकार 256 उदाहरण है। सीपीयू और जीपीयू पर प्रशिक्षण प्रक्रिया के अनुमानित मेमोरी (रैम) पदचिह्न को कैसे निर्धारित किया जाता है? यदि इससे कोई अंतर पड़ता है, तो मान लें कि मॉडल को TensorFlow (इस प्रकार cuDNN का उपयोग करके) के साथ GPU पर प्रशिक्षित किया गया है।

जवाबों:


3

@Ik_vision का उत्तर बताता है कि भार को संग्रहीत करने के लिए आवश्यक मेमोरी स्पेस का अनुमान कैसे लगाया जाए, लेकिन आपको मध्यवर्ती गतिविधियों को संग्रहीत करने की आवश्यकता है, और विशेष रूप से 3 डी डेटा के साथ काम करने वाले दृढ़ नेटवर्क के लिए, यह आवश्यक मेमोरी का मुख्य हिस्सा है।

अपने उदाहरण का विश्लेषण करने के लिए:

  1. इनपुट के लिए 1000 तत्वों की आवश्यकता है
  2. 1-4 परत परतों के बाद आपके पास 100 तत्व हैं, कुल 400
    1. अंतिम परत के बाद आपके पास 10 तत्व हैं

कुल 1 नमूने के लिए आपको फॉरवर्ड पास के लिए 1410 तत्वों की आवश्यकता है। इनपुट को छोड़कर, आपको बैकवर्ड पास के लिए उनमें से प्रत्येक के बारे में एक ढाल जानकारी की आवश्यकता है, जो कि 410 अधिक है, कुल 1820 तत्व प्रति नमूना । 465 920 प्राप्त करने के लिए बैच आकार से गुणा करें।

मैंने कहा "तत्व", क्योंकि प्रति तत्व आवश्यक आकार उपयोग किए गए डेटा प्रकार पर निर्भर करता है। एकल परिशुद्धता के लिए float32यह 4B है और डेटा ब्लब्स को स्टोर करने के लिए आवश्यक कुल मेमोरी 1.8MB के आसपास होगी।


1

मुझे दो विकल्प दिखाई देते हैं:

  1. नेटवर्क डिस्क से लोड किया गया है
  2. मक्खी पर नेटवर्क बनाया जाता है

दोनों मामलों में GPU में मेमोरी का आकार बैच आकार से गुणा करने की आवश्यकता होती है क्योंकि अधिकांश नेटवर्क प्रत्येक नमूने के लिए कॉपी किया जाता है।

डिस्क से लोड होने पर अंगूठे का नियम: यदि DNN डिस्क पर X MB लेता है, तो बैच आकार 1 के लिए GPU मेमोरी में नेटवर्क 2X होगा।

नेटवर्क बैच आकार 1 के लिए फ्लाई पर बनाया गया है: पैरामीटर की गणना करें और 4 बाइट्स (फ्लोट 32 बिट) से गुणा करें: पैरामीटर की संख्या को मैन्युअल रूप से गिना जाए: fc1: 1000x100 (वज़न) + 100 (biases) fc2: 100x100 (वज़न) + 100 (biases) fc3: 100x100 (वेट) + 100 (biases) fc4: 100x100 (वेट) + 100 (biases) आउटपुट: 100x10 (वेट) + 10 (बायसेस)

कायरों का उपयोग करके पैरामीटर की संख्या की गणना: model.count_params ()


3
जहां तक ​​मैं बता सकता हूं, यह वजन को स्वयं स्टोर करने के लिए मेमोरी आवश्यकताओं को देता है, लेकिन प्रशिक्षण के लिए कड़ाई से आवश्यक कुछ भी स्टोर करने के लिए समर्पित किसी भी मेमोरी को अनदेखा करता है , जैसे कि ग्रेडिएंट्स। ग्रेडिएंट्स को स्टोर करना आवश्यक है, गति को लागू करने के लिए कहें। क्या मैं लापता हूँ?
वाया

1
@ यह सही है, सामान्य प्रशिक्षण के लिए आपको वेट स्टोर करने के लिए मेमोरी की आवश्यकता होती है, फॉरवर्ड पास में सक्रियण और बैक-प्रोपगेशन पास में ग्रेडिएटर्स (3x मेमोरी को भी बिना गति के)।
mjul

@ मज्जुल मेरे प्रयोगों में 4.5x ik_vision का अनुमान है। मैं 3x के पीछे तर्क को समझता हूं, लेकिन मुझे यकीन नहीं है कि व्यवहार में यह 4.5x का उपयोग क्यों कर रहा है। अन्य केर / TF ओवरहेड होना चाहिए ??
वेस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.