CUDA OOM - लेकिन संख्या को जोड़ नहीं upp?

0

सवाल

मैं कोशिश कर रहा हूँ को प्रशिक्षित करने के लिए एक मॉडल का उपयोग कर PyTorch. जब शुरुआत मॉडल प्रशिक्षण मैं प्राप्त निम्न त्रुटि संदेश:

RuntimeError: CUDA out of memory. Tried to allocate 5.37 GiB (GPU 0; 7.79 GiB total capacity; 742.54 MiB already allocated; 5.13 GiB free; 792.00 MiB reserved in total by PyTorch)

मैं सोच रहा हूँ क्यों यह त्रुटि उत्पन्न हो रही है । जिस तरह से मैं इसे देख, मैं 7.79 GiB कुल क्षमता के साथ । संख्या यह कहा है (742 एमआईबी + 5.13 GiB + 792 एमआईबी) को जोड़ नहीं करने के लिए अधिक से अधिक हो 7.79 GiB. जब मैं जाँच nvidia-smi मैं देख रहा हूँ इन प्रक्रियाओं चल रहा है

|    0   N/A  N/A      1047      G   /usr/lib/xorg/Xorg                168MiB |
|    0   N/A  N/A      5521      G   /usr/lib/xorg/Xorg                363MiB |
|    0   N/A  N/A      5637      G   /usr/bin/gnome-shell              161MiB |

मुझे पता है कि संक्षेप में इन सभी की संख्या में कटौती हो सकती है के लिए यह (168 + 363 + 161 + 742 + 792 + 5130 = 7356 एमआईबी), लेकिन यह अभी भी कम से कम कहा गया है की क्षमता के GPU.

1

सबसे अच्छा जवाब

3

यह एक टिप्पणी है, लेकिन बाहर इशारा लायक.

कारण, सामान्य रूप में वास्तव में है क्या talonmies टिप्पणी की है, लेकिन आप कर रहे हैं संक्षेप में नंबर गलत है । चलो देखते हैं क्या होता है जब tensors स्थानांतरित कर रहे हैं करने के लिए GPU (मैं यह करने की कोशिश की पर मेरे पीसी के साथ RTX2060 के साथ 5.8 G प्रयोग करने योग्य GPU स्मृति में कुल):

चलो चलाने के लिए निम्न अजगर आदेशों सहभागी:

Python 3.8.10 (default, Sep 28 2021, 16:10:42) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> a = torch.zeros(1).cuda()
>>> b = torch.zeros(500000000).cuda()
>>> c = torch.zeros(500000000).cuda()
>>> d = torch.zeros(500000000).cuda()

निम्नलिखित outputs के watch -n.1 nvidia-smi:

सही होने के बाद torch आयात:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |

सही के निर्माण के बाद a:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A     14701      C   python                           1251MiB |

के रूप में आप देख सकते हैं, आप की जरूरत है 1251MB प्राप्त करने के लिए pytorch उपयोग शुरू करने के लिए CUDA, यहां तक कि अगर आप की जरूरत है केवल एक एकल फ्लोट ।

सही के निर्माण के बाद b:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A     14701      C   python                           3159MiB |

b की जरूरत है 500000000*4 bytes = 1907MB, यह के रूप में एक ही वेतन वृद्धि में स्मृति द्वारा इस्तेमाल किया अजगर की प्रक्रिया है ।

सही के निर्माण के बाद c:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A     14701      C   python                           5067MiB |

कोई आश्चर्य यहाँ है ।

सही के निर्माण के बाद d:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A     14701      C   python                           5067MiB |

आगे कोई स्मृति आवंटन, और OOM त्रुटि दिया गया है:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: CUDA out of memory. Tried to allocate 1.86 GiB (GPU 0; 5.80 GiB total capacity; 3.73 GiB already allocated; 858.81 MiB free; 3.73 GiB reserved in total by PyTorch)

जाहिर है:

  • "पहले से ही आवंटित" भाग शामिल है में "आरक्षित कुल में से PyTorch" हिस्सा है । आप नहीं कर सकते हैं उन्हें राशि अप, अन्यथा राशि से अधिक की कुल उपलब्ध स्मृति है ।
  • न्यूनतम स्मृति प्राप्त करने के लिए आवश्यक pytorch पर चल रहा है GPU (1251M) में शामिल नहीं है "आरक्षित कुल में" हिस्सा है ।

तो आपके मामले में, इस राशि से मिलकर चाहिए:

  • 792MB (आरक्षित कुल में)
  • 1251MB (न्यूनतम प्राप्त करने के लिए pytorch पर चल रहा है GPU है, यह सोचते हैं यह एक ही है, हम दोनों के लिए)
  • 5.13 जीबी के लिए (मुक्त)
  • 168+363+161=692MB (अन्य प्रक्रियाओं)

वे योग करने के लिए लगभग 7988MB=7.80 जीबी है, जो वास्तव में आप कुल GPU स्मृति.

2021-11-23 06:13:39

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में