Pytorch: RuntimeError: خطأ وقت تشغيل cuda (2): نفاد الذاكرة في /data/users/soumith/miniconda2/conda-bld/pytorch-0.1.9_1487346124464/work/torch/lib/THC/generic/THCStorage.cu:66

تم إنشاؤها على ٨ مارس ٢٠١٧  ·  41تعليقات  ·  مصدر: pytorch/pytorch

لقد واجهت خطأ:

THCudaCheck FAIL file=/data/users/soumith/miniconda2/conda-bld/pytorch-0.1.9_1487346124464/work/torch/lib/THC/generic/THCStorage.cu line=66 error=2 : out of memory
Traceback (most recent call last):
  File "main_snli.py", line 293, in <module>
    experiment=BaseExperiment()
  File "main_snli.py", line 74, in __init__
    self.model.cuda()
  File "/home/bbbian/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 143, in cuda
    return self._apply(lambda t: t.cuda(device_id))
  File "/home/bbbian/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 114, in _apply
    module._apply(fn)
  File "/home/bbbian/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 114, in _apply
    module._apply(fn)
  File "/home/bbbian/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 120, in _apply
    param.data = fn(param.data)
  File "/home/bbbian/anaconda3/lib/python3.6/site-packages/torch/nn/modules/module.py", line 143, in <lambda>
    return self._apply(lambda t: t.cuda(device_id))
  File "/home/bbbian/anaconda3/lib/python3.6/site-packages/torch/_utils.py", line 51, in _cuda
    return self.type(getattr(torch.cuda, self.__class__.__name__), async)
  File "/home/bbbian/anaconda3/lib/python3.6/site-packages/torch/_utils.py", line 24, in _type
    return new_type(self.size()).copy_(self, async)
RuntimeError: cuda runtime error (2) : out of memory at /data/users/soumith/miniconda2/conda-bld/pytorch-0.1.9_1487346124464/work/torch/lib/THC/generic/THCStorage.cu:66

كيف يمكنني حل هذا الخطأ؟

التعليق الأكثر فائدة

نفدت ذاكرة وحدة معالجة الرسومات (GPU). إنه ليس خطأ.

ال 41 كومينتر

نفدت ذاكرة وحدة معالجة الرسومات (GPU). إنه ليس خطأ.

تضمين التغريدة
أنا فقط أكتب رمز اختبار بسيط مثل التالي ، ويحدث الخطأ "نفاد الذاكرة ....." ، بعد بيانات إدخال الاختبار هو 49200.
ولكن عندما حاولت تقليل أبعاد البيانات من 49200 إلى 1000 ، يعمل الكود بشكل جيد.
هل هناك أي إعداد للمعلمات في pytorch يجب علي تغييرها؟

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.dropout = nn.Dropout(p=0.2)
        self.relu = nn.ReLU()
        self.fc1 = nn.Linear(49200, 49200)
        self.fc2 = nn.Linear(49200, 49200)
        self.fc3 = nn.Linear(49200, 3)
        self.out = nn.Sequential(
            self.fc1,
            self.relu,
            self.dropout,
            self.fc1,
            self.relu,
            self.dropout,
            self.fc3
            )
    def forward(self, premise, hypothesis):
        return self.out(torch.cat([premise, hypothesis], 1))

net = Net().cuda()
print (net)
premise = Variable(torch.randn(64, 82, 300))
hypothesis = Variable(torch.randn(64, 82, 300))
premise = premise.cuda()
hypothesis = hypothesis.cuda()
out = net(premise.contiguous().view(64,-1), hypothesis.contiguous().view(64,-1))
print(out)

بين المعلمات وتدرجاتها لطبقتين كبيرتين FC ، تتطلب شبكتك (بحجم 49200) 40 جيجابايت من الذاكرة ...

jekbradbury هل يمكن أن تشرح حساباتك؟ ما مقدار الذاكرة التي تأخذها كل طبقة فيما يتعلق بالمعلمات والتدرجات؟ شكرا.

إذا كنت تفكر فقط في أوزان طبقة خطية واحدة من هذا النموذج. لقد حصلت

49200^2 = 2 420 640 000

العناصر + كل عنصر يأخذ 4 بايت ، مما يمنحك

2 420 640 000 * 4 / 1024^3 = 9,01GB

للأوزان وحدها. بعد ذلك ، تحتاج إلى جزء ذاكرة آخر بهذا الحجم لتخزين التدرجات اللونية. تحتاج أيضًا إلى حفظ النتائج الوسيطة حتى تتمكن من حساب التدرج اللوني.

مرحبًا ، لقد تلقيت نفس الخطأ ولكنه قادم للتحقق فقط. عملت عملية التدريب بأكملها بشكل جيد. أحاول نقل التعلم باستخدام inception v3. هل يمكن لأي شخص مساعدتي من فضلك؟ شكرا

tabibusairam لقد واجهت أيضًا نفس المشكلة: عملت عملية التدريب بشكل جيد (مع ذاكرة 6G cuda و GPU لديها ذاكرة 12G) ولكن عملية التقييم التي تمر عبر نفس الشبكة حصلت على معلومات خطأ على النحو التالي:

THCudaCheck FAIL file=/opt/conda/conda-bld/pytorch_1503965122592/work/torch/lib/THC/generic/THCStorage.cu line=66 error=2 : out of memory
Traceback (most recent call last):
  File "evaluate.py", line 132, in <module>
    evaluate(pnet, args)
  File "evaluate.py", line 94, in evaluate
    predictions = pnet(X_test, initial_states)
  File "/home/zcrwind/.conda/envs/condapython3.6/lib/python3.6/site-packages/torch/nn/modules/module.py", line 224, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/zcrwind/workspace/pro/predict/zcr/pnet.py", line 497, in forward
    output, hidden_states = self.step(A0, hidden_states)
  File "/home/zcrwind/workspace/pro/predict/zcr/pnet.py", line 377, in step
    forget_gate = hard_sigmoid(self.conv_layers['f'][lay](inputs))
  File "/home/zcrwind/workspace/pro/predict/zcr/pnet.py", line 28, in hard_sigmoid
    x = F.threshold(-x, 0, 0)
  File "/home/zcrwind/.conda/envs/condapython3.6/lib/python3.6/site-packages/torch/nn/functional.py", line 459, in threshold
    return _functions.thnn.Threshold.apply(input, threshold, value, inplace)
  File "/home/zcrwind/.conda/envs/condapython3.6/lib/python3.6/site-packages/torch/nn/_functions/thnn/auto.py", line 174, in forward
    getattr(ctx._backend, update_output.name)(ctx._backend.library_state, input, output, *args)
RuntimeError: cuda runtime error (2) : out of memory at /opt/conda/conda-bld/pytorch_1503965122592/work/torch/lib/THC/generic/THCStorage.cu:66

هل عملت بها؟ شكرا.

يختلف الرسم البياني للحساب أثناء التحقق من الصحة كما هو الحال في القطار مثل
لا يتم تدريب المعلمات على التحقق من الصحة. حاول استخدام الأمر -
nvidia-smi لمعرفة متطلبات ذاكرة gpu أثناء التحقق من الصحة.

حاول تقليل حجم الدُفعة (إذا كنت تعمل على وحدة معالجة مركزية واحدة فقط) ، فإن
متطلبات الذاكرة أقل لأحجام الدُفعات الأصغر.

يوم الأحد 14 يناير 2018 الساعة 11:17 صباحًا ، Chenrui Zhang [email protected]
كتب:

tabibusairam https://github.com/tabibusairam واجهت أيضًا ملف
نفس المشكلة: عملت عملية التدريب بشكل جيد (مع ذاكرة 6G cuda و my
تحتوي وحدة معالجة الرسومات على ذاكرة 12G) ولكن عملية التقييم تمر بنفس الطريقة
حصلت الشبكة على معلومات خطأ على النحو التالي:

ملف THCudaCheck FAIL = / opt / conda / conda-bld / pytorch_1503965122592 / work / torch / lib / THC / generic / THCStorage.cu line = 66 خطأ = 2: نفاد الذاكرة
Traceback (آخر مكالمة أخيرة):
ملف "Eval.py" ، السطر 132 ، بتنسيق
تقييم (بريدنيت ، أرغس)
ملف "Eval.py" ، السطر 94 ، قيد التقييم
التنبؤات = prednet (X_test، initial_states)
ملف "/home/zcrwind/.conda/envs/condapython3.6/lib/python3.6/site-packages/torch/nn/modules/module.py" ، السطر 224 ، في __call__
النتيجة = self.forward ( الإدخال ، * kwargs)
ملف "/home/zcrwind/workspace/ijcai2018/predict/zcrPredNet/prednet.py" ، السطر 497 ، في المقدمة
الإخراج ، hidden_states = self.step (A0، hidden_states)
ملف "/home/zcrwind/workspace/ijcai2018/predict/zcrPredNet/prednet.py" ، السطر 377 ، في الخطوة
forget_gate = hard_sigmoid (self.conv_layers ['f'] [وضع] (المدخلات))
ملف "/home/zcrwind/workspace/ijcai2018/predict/zcrPredNet/prednet.py" ، السطر 28 ، في hard_sigmoid
x = F. العتبة (-x ، 0 ، 0)
ملف "/home/zcrwind/.conda/envs/condapython3.6/lib/python3.6/site-packages/torch/nn/functional.py" ، السطر 459 ، في العتبة
إرجاع _functions.thnn.Threshold.apply (إدخال ، عتبة ، قيمة ، inplace)
ملف "/home/zcrwind/.conda/envs/condapython3.6/lib/python3.6/site-packages/torch/nn/_functions/thnn/auto.py" ، السطر 174 ، في المقدمة
getattr (ctx._backend، update_output.name) (ctx._backend.library_state، input، output، * args)
خطأ وقت التشغيل: خطأ وقت تشغيل cuda (2): نفاد الذاكرة في /opt/conda/conda-bld/pytorch_1503965122592/work/torch/lib/THC/generic/THCStorage.cu:66

هل عملت بها؟ شكرا.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/pytorch/pytorch/issues/958#issuecomment-357490369 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AMHzdCQ_jJ9ogDm1jaNSLB6wCbfP08XOks5tKZT8gaJpZM4MW6we
.

tabibusairam شكرا جزيلا. لقد قمت بتقليل حجم الدُفعة ويعمل رمز التقييم جيدًا الآن.

tabibusairam هل تكتب كود التحويل الخاص بك كمثال في pytorch.org؟ إذا كان الأمر كذلك ، فلدي فكرة أخرى للتعامل معها.

نعم لقد كتبت الكود بهذا الشكل.
أضفت أيضًا nn.DataParallel إلى النموذج
أي فكرة أخرى هي بالتأكيد موضع ترحيب

في 22 كانون الثاني (يناير) 2018 5:32 صباحًا ، كتب "Tommeychang" [email protected] :

tabibusairam https://github.com/tabibusairam هل تكتب
نقل الكود المائل كمثال في pytorch.org؟ إذا كان الأمر كذلك ، فلدي
فكرة أخرى لمعالجتها.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/pytorch/pytorch/issues/958#issuecomment-359294050 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AMHzdN8mRJKNr_0czrXDd-p66-iJImubks5tM9AggaJpZM4MW6we
.

tabibusairam حدث نفس الخطأ لي في نفس الموقف. تم حلها عن طريق تغيير كلمة "متقلبة" في المتغير () عند الاستدلال. إذا قمنا بتعيين متغير = صحيح ، فسيتم الاحتفاظ بالرسم البياني الحسابي أثناء الاستدلال. في وقت الاستدلال ، لا نحتاج إلى الاحتفاظ بالرسوم البيانية الحسابية. إنها تستهلك الكثير من الذاكرة.
يمكنك فقط تعيين أعلام متقلبة إلى True مثل هذا ، `` متغير (x ، متغير = صحيح).

في المثال ، سيتم إنشاء نموذجين للتدريب والتحقق على التوالي. باستخدام هذا الإعداد ، سيكون هناك نموذج آخر يتم تشغيله في وحدة معالجة الرسومات عند التحقق من الصحة ، وستنفد ذاكرة وحدة معالجة الرسومات حتى إذا قمت بلف بيانات التحقق من الصحة باستخدام معلمة متغيرة.
لقد قمت بحل هذه المشكلة عن طريق تعيين نموذج واحد فقط ، وقم بلف بيانات التحقق من الصحة بمعامل متغير لتقليل الحساب. تضمين التغريدة

شكرا ،TommeyChang. لقد راجعت نموذج التعلم المحول , لكنني لم أستطع أن أفهم المكان الذي تم تعيين النموذج فيه أيضًا في التحقق من الصحة. هل توضح لنا مكان وضع النموذج في الكود؟

قد يكون سبب هذه المشكلة هو pytorch وليس الرمز. الرموز على النحو التالي:
إذا كانت المرحلة == 'تدريب':
جدولة.ستيب ()
model.train (صواب) # اضبط النموذج على وضع التدريب
آخر:
model.train (False) # اضبط النموذج لتقييم الوضع
إذا قمت بتتبع إحصائيات وحدة معالجة الرسومات باستخدام watch -n 1 -d nvidia-smi ، فسترى أن استخدام الذاكرة سيزداد عند بداية حقبة التحقق من الصحة.

كيف حددت نفس النموذج للتحقق من كل من التدريب والتحقق؟

في 27 كانون الثاني (يناير) 2018 الساعة 11:44 صباحًا ، كتب "Tommeychang" [email protected] :

قد يكون سبب هذه المشكلة هو pytorch وليس الرمز. الرموز هي
أقل:
إذا كانت المرحلة == 'تدريب':
جدولة.ستيب ()
model.train (صواب) # اضبط النموذج على وضع التدريب
آخر:
model.train (False) # اضبط النموذج لتقييم الوضع
إذا قمت بتتبع إحصائيات وحدة معالجة الرسومات باستخدام watch -n 1 -d nvidia-smi ، فسترى ملف
سيزداد استخدام الذاكرة عند بداية حقبة التحقق من الصحة.

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/pytorch/pytorch/issues/958#issuecomment-360963591 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AMHzdBKY_UCQ3QMtnUhdHoahxUx-oG4eks5tOr6ugaJpZM4MW6we
.

إذا لم نقم بتعيين وضع النموذج ، فسيكون وضع التدريب ضمنيًا. لذلك ، لا نحتاج إلى خطوط ضبط الوضع ، لكننا نلف الموتر إلى متغير بمعامل متغير عند مرحلة التحقق من الصحة. أكوادي على النحو التالي:

if phase == 'train':
scheduler.step()

........

for data in dataloaders[phase]:  ## Iterate over data.

inputs, labels = data  ## get the inputs

if use_gpu:  ## pass them into GPU
inputs = inputs.cuda()
labels = labels.cuda()

if phase == 'train':  ## wrap them in Variable
inputs, labels = Variable(inputs), Variable(labels)
else:
inputs = Variable(inputs, volatile=True)
labels = Variable(labels, volatile=True)

شكرا. لكنني أخشى أنه إذا لم نقم بتعيين علامة القطار على False حتى أثناء التحقق من الصحة ، فلن نحصل على النتائج المناسبة لأن BatchNormalization و Dropout يتصرفان بشكل مختلف في مرحلة التدريب / التحقق من الصحة.

نعم اتفق معك. وقد اختبرت نموذجي باستخدام علم القطار False ، يتحسن الأداء. شكرا لنصيحتك.

حاولت volatile=True وهو يعمل معي. شكرًا لتعليمي هذا jekbradbury

TommeyChangtabibusairam أنا أصاب نفس الخطأ ، لكن في حالة مختلفة. أقوم بإضافة مصطلح تسوية جديد في نموذجي ، من خلال هذه الوظيفة:

def l2_reg(mdl):
        l2_reg = None
        for W in mdl.parameters():
                if W.ndimension() < 2:
                        continue
                else:   
                        if l2_reg is None:
                                l2_reg = (torch.max(torch.abs(W)))**2
                        else:   
                                l2_reg = l2_reg + (torch.max(torch.abs(W)))**2

        return l2_reg

ما لاحظته هو حتى إذا قمت بتغيير حجم الدفعة من 128 إلى 8 ، فإن الخطأ يأتي بعد الحقبة الأولى فقط ، وإذا قمت بتغيير التنظيم وأعدت تنظيم المستوى الثاني. لا أفهم هذا الخطأ.
أي اقتراحات / تعليق سيكون موضع تقدير حقًا!

TommeyChang ، فأنت تريد عادةً التمييز بين مصطلح التنظيم (بعد كل شيء هناك للتأثير على قيمة التدرج اللوني) لذلك ربما لا تريد pu أن تفعل ذلك كما اقترحت

apaszke hello ~ لدي نفس السؤال ، لكن يمكنني تدريب النموذج بشكل صحيح في البداية. ربما بعد 600 خطوة ، حصلت على الخطأ "RuntimeError: cuda runtime error (2): out of memory at /opt/conda/conda-bld/pytorch_1518243271935/work/torch/lib/THC/generic/THCStorage.cu:58" .

أثناء التدريب ، تكلف الذاكرة 7 جيجا فقط (وحدة معالجة الرسومات الخاصة بي بها 11 جيجا بايت). عادة ، في رأيي ، التدريب بشكل صحيح في البداية يعني أن الكود الخاص بي صحيح. هل هذا صحيح؟ هل هناك أشياء أخرى سوف تتراكم من خلال عملية التدريب إلى الأمام؟ شكرا جزيلا!!

بعض المتغيرات تتراكم وتحتل مساحة أكبر وأكثر كنموذجك
قطارات أخرى .. حاول اكتشاف هذا المتغير ولاحظ أنك لا تدخر
أي أشياء غير مرغوب فيها

في يوم السبت ، 21 أبريل ، 2018 ، الساعة 7:35 صباحًا ، كتب EricKani [email protected] :

apaszke https://github.com/apaszke مرحبًا ~ لدي نفس السؤال ، لكن
يمكنني تدريب النموذج بشكل صحيح في البداية. ربما بعد 600 خطوة ، أنا
حصلت على الخطأ "RuntimeError: cuda runtime error (2): out of memory at
/opt/conda/conda-bld/pytorch_1518243271935/work/torch/lib/THC/generic/THCStorage.cu:58
".

-
أنت تتلقى هذا لأنه تم ذكرك.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/pytorch/pytorch/issues/958#issuecomment-383259455 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AMHzdN8KuyZIjewB6gkY1MvswGWuF1QMks5tqpPegaJpZM4MW6we
.

tabibusairam شكرا جزيلا لك أولا. إنه سبب رئيسي للعديد من مشاكل أوم. لكنني لم أجد مشكلة شبكتي. عندما أقوم بتدريب شبكتي بدون التحقق من الصحة (شبكة تحويل الصور) ، تكون ذاكرة وحدة معالجة الرسومات مستقرة طوال الوقت. ولكن عندما تكون هناك خطوة تحقق من الصحة ، فإن ذاكرة GPU الأولى الخاصة بي (التحقق من صحة وحدة معالجة الرسومات تلك) سترتفع مرتين.
على سبيل المثال ، في بداية عهدتي الأولى ، تستهلك ذاكرة Gpu الخاصة بي 7G ، ثم تغيرت إلى 9G بعد الفترة الأولى مع بداية التحقق من الصحة. بعد التحقق من الحقبة الثانية ، أصبحت الذاكرة المستهلكة 10 جيجا. منذ ذلك الحين تستقر الذاكرة. انا محتار جدا...

هل تقوم بإجراء التحقق باستخدام متغيرات volatile (في 0.3) أم في سياق torch.no_grad (في حالة استخدام المتغيرات الرئيسية)؟

apaszketabibusairam مرحبًا ، أجد هذا الخطأ عندما أستخدم pytorch لبناء GAN مع GP ، وقد علقت هنا لمدة يومين ، لقد جربت بالفعل عدة طرق لحل هذا ، لكن لا يعمل أي منهما. أنا حقا بحاجة إلى بعض المساعدة من فضلك.
الخطأ هو:
_RuntimeError: خطأ وقت تشغيل cuda (2): نفاد الذاكرة عند xx \ torch \ lib \ thc \ generic / THCStorage.cu: 66_
عندما أفعل إلى الوراء

_ملف "xxx / train_extractor.py" ، السطر 128 ، في
gradient_penalty.backward ()
ملف "xxx \ lib \ site -pack \ torch \ autograd \ variable.py" ، السطر 156 ، بالخلف
torch.autograd.backward (self، gradient، retain_graph، create_graph، retain_variables)
ملف "xxx \ lib \ site -pack \ torch \ autograd__init __. py" ، السطر 98 ، بالخلف
المتغيرات ، grad_variables ، retain_graph) _

يحدث ذلك في الحقبة الثانية عشرة من عمليتي التدريبية في كل مرة ، ولقد قمت بالفعل بتقليل حجم الدُفعات والحجم في شباكتي.
لا يوجد إجراء للتحقق من الصحة.
هنا جزء صغير من الكود الخاص بي:
alpha = torch.rand (conf.batch_size، 1) .expand (X.size ())
x_hat = autograd.Variable (alpha real.data.cpu () + (1-alpha) (real.data.cpu () + 0.5 real.data.std () torch.rand (real.size ())) ، يتطلب_grad = صحيح)
x_hat = x_hat.cuda () إذا كان conf.cuda آخر x_hat
بريد_هات ، _ = ديس (س_هات)
التسمية = torch.ones (pred_hat.size ())
label = label.cuda () إذا كانت تسمية conf.cuda else
gradients = autograd.grad (المخرجات = pred_hat ، المدخلات = x_hat ، grad_outputs = label ، create_graph = صحيح ، retain_graph = صحيح ، only_inputs = صحيح) [0]
gradient_penalty = conf.gp_lambda ((التدرجات العادية (2 ، قاتمة = 1) -1) 2). تعني ()* gradient_penalty.backward ()

نجح تقليل حجم الدفعة من 64 إلى 32 بالنسبة لي.

lyakaap متغير (x ، متغير = صحيح). إنه عمل بالنسبة لي شكرا جزيلا.

EricKani ،
مرحبا هل قمت بحل هذه المشكلة؟
أنا أيضا لدي نفس السؤال.
هل يمكنك إخباري بالطريقة؟

@ qlwang25EricKani الموقف الأكثر احتمالًا هو أن التدرجات تتراكم عن غير قصد أثناء حساب الخسائر كما هو موضح أدناه.

loss = criterion(y_, y)
loss.backward()
loss_meter += loss  # incorrect
# loss_meter += loss.item()  # correct

lyakaap
شكرا جزيلا لك أولا.
أنا أكتب نفس ما ذكرته.
بعد كل دفعة تحقق من الصحة ، يزداد استهلاك ذاكرة وحدة معالجة الرسومات ، لذا سيكون القطار التالي خطأ:

THCudaCheck FAIL file=/pytorch/aten/src/THC/generic/THCStorage.cu line=58 error=2 : out of memory
Traceback (most recent call last):
  File "train.py", line 290, in <module>
    main()
  File "train.py", line 263, in main
    train(i)
  File "train.py", line 152, in train
    loss, num_total, num_correct = model.train_model(src, src_len, src_sent_len, tgt, tgt_len, optim)
  File "/home/wangqianlong/model/bytecup/models/seq2seq.py", line 110, in train_model
    loss.backward()
  File "/home/wangqianlong/.local/lib/python3.6/site-packages/torch/tensor.py", line 93, in backward
    torch.autograd.backward(self, gradient, retain_graph, create_graph)
  File "/home/wangqianlong/.local/lib/python3.6/site-packages/torch/autograd/__init__.py", line 89, in backward
    allow_unreachable=True)  # allow_unreachable flag
RuntimeError: cuda runtime error (2) : out of memory at /pytorch/aten/src/THC/generic/THCStorage.cu:58

التدفق العام للكود:

def train_model(self, data):
    outputs = self(data)
    loss = self.criterion(outputs, y)
    loss.backward()
    optim.step()
    return loss

def sample(self, data):
    src, src_len = data
        with torch.no_grad():
                bos = torch.ones(src.size(0)).long().fill_(dict.BOS)
        if self.use_cuda:
            src = src.cuda()
            src_len = src_len.cuda()
            bos = bos.cuda()

        contexts = other_function(src, src_len)
            samples = self.decoder.sample([bos], contexts)
            return samples

def train(i):
    model.train()
    global train_dataloader
    for data in train_dataloader:
        model.zero_grad()
        loss = model.train_model(data)

        count_loss += loss.item()
        if ...:
            # not important
            print(count_loss)

def eval(i):
    model.eval()
    for batch in eval_dataloader:
        samples = model.sample(data)
        print(samples)

def main():
    global train_dataloader
    for i in range(epoch):
        train_dataloader = load(data_(i%9)) 
        train(i)

        eval(i)

مجموعة القطار كبيرة نسبيًا ، لقد قسمتها إلى ثمانية (data_0، data_1، ....، data_8)
هل يمكن أن تعطيني بعض الاقتراحات ؟
شكرا جزيلا.

@ qlwang25 لقد راجعت الكود الخاص بك ولكن لم أتمكن من معرفة ما هو الخطأ في الجزء.
أعتقد أن هناك احتمالين:

  1. استخدم optimizer.zero_grad () بدلاً من model.zero_grad ()
  2. بعض المتغيرات في وحدة معالجة الرسومات لها مرجع دائم ، وبالتالي فإن هذه المتغيرات لا تطلق ذاكرة وحدة معالجة الرسومات أبدًا. ماذا عن مراجعة عينتك ().

lyakaap
بادئ ذي بدء ، أشكركم على ردكم بهذه السرعة.
أستطيع أن أفهم نقطتك الأولى.
ومع ذلك ، فإن هذه المتغيرات لا تطلق ذاكرة gpu تجعلني في حيرة من أمري.
أي متغير؟ يمكنك ان تعطي مثالا؟
كيفية تحرير هذه المتغيرات. torch.cuda.empty_cache () مفيد؟

@ qlwang25
ليس لدي أي فكرة عن المتغيرات المحتملة ، ولكن src ، bos ، على الأرجح.
AFAIK، torch.cuda.empty_cache () لا يصدر المتغيرات المشار إليها. يجب عليك تحديد المتغيرات التي تسبب وكتابة del {var_name} قبل استدعاء هذا func.

lyakaap
شكرا جزيلا!
أنا بالفعل أعرف اقتراحك.
أشكركم مرة أخرى على ردكم.

تضمين التغريدة
شكرا جزيلا!
أنا بالفعل أعرف اقتراحك.
أشكركم مرة أخرى على ردكم.

أعتقد أنك تقصد lyakaap ، أليس كذلك؟
هاها

لقد حاولت التقلب - لم أفلح (اكتشفت لاحقًا أن السبب هو أنني في pytroch 1.01 و "UserWarning: تمت إزالة متقلبة وليس لها أي تأثير الآن. استخدم with torch.no_grad(): بدلاً من ذلك.")
لكن إعادة التشغيل البسيطة أصلحت أيضًا الأشياء بالنسبة لي ....

واجهت نفس المشكلة لذا حاولت تقليل حجم الدُفعة إلى الحد الأدنى حيث كان نموذجي قادرًا على التدريب. بالإضافة إلى أنه يمكنك زيادة حقبتك ومعدل التعلم وعينة التدريب للحفاظ على المقايضة من حيث الدقة

قد تكون هذه المشكلة ناتجة عن الحجم الضخم لمجموعة بيانات التحقق ، يمكنك تحديد مجموعة بيانات صغيرة ثم الاختبار عن طريق إدخال مجموعة البيانات الضخمة.

يختلف الرسم البياني للحساب أثناء التحقق من الصحة كما هو الحال في القطار حيث لا يتم تدريب المعلمات على التحقق من الصحة. حاول استخدام الأمر - nvidia-smi لمعرفة متطلبات ذاكرة وحدة معالجة الرسومات أثناء التحقق من الصحة. حاول تقليل حجم الدُفعة (إذا كنت تعمل على وحدة معالجة مركزية واحدة فقط) ، فإن متطلبات الذاكرة تكون أقل بالنسبة لأحجام الدُفعات الأصغر.
...
في الأحد 14 كانون الثاني (يناير) 2018 الساعة 11:17 صباحًا ، Chenrui Zhang @ . * > كتب: tabibusairam https://github.com/tabibusairam لقد واجهت أيضًا نفس المشكلة: عملت عملية التدريب بشكل جيد (مع ذاكرة 6G cuda و GPU لديها ذاكرة 12G) لكن عملية التقييم التي تمر عبر نفس الشبكة حصلت معلومات الخطأ على النحو التالي: THCudaCheck FAIL file = / opt / conda / conda-bld / pytorch_1503965122592 / work / torch / lib / THC / generic / THCStorage.cu line = 66 خطأ = 2: نفاد الذاكرة Traceback (آخر مكالمة أخيرة ): ملف "rating.py" ، السطر 132 ، بتنسيققم بتقييم (prednet، args) ملف "" "" "" "التقييم" "، السطر 94 ، في تنبؤات التقييم =" بريدنيت (X_test، initial_states) ملف "/home/zcrwind/.conda/envs/condapython3.6/lib/python3.6/site- packs / torch / nn / modules / module.py "، line 224، in __call__ result = self.forward ( input، * kwargs) File" /home/zcrwind/workspace/ijcai2018/predict/zcrPredNet/prednet.py "، line 497 ، في الإخراج الأمامي ، hidden_states = self.step (A0، hidden_states) File "/home/zcrwind/workspace/ijcai2018/predict/zcrPredNet/prednet.py" ، السطر 377 ، في الخطوة forget_gate = hard_sigmoid (self.conv_layers [' f '] [lay] (المدخلات)) ملف "/home/zcrwind/workspace/ijcai2018/predict/zcrPredNet/prednet.py" ، السطر 28 ، في hard_sigmoid x = F.threshold (-x، 0، 0) File " /home/zcrwind/.conda/envs/condapython3.6/lib/python3.6/site-packages/torch/nn/functional.py "، السطر 459 ، في عتبة الإرجاع _functions.thnn.Threshold.apply (إدخال ، عتبة ، value، inplace) ملف "/home/zcrwind/.conda/envs/condapython3.6/lib/python3.6/site-packages/torch/nn/_functions/thnn/auto. py "، السطر 174 ، في getattr الأمامي (ctx._backend، update_output.name) (ctx._backend.library_state، input، output، * args) RuntimeError: cuda runtime error (2): out of memory at / opt / conda / conda-bld / pytorch_1503965122592 / work / torch / lib / THC / generic / THCStorage.cu: 66 هل عملت بها؟ شكرا. - أنت تتلقى هذا لأنه تم ذكرك. قم بالرد على هذه الرسالة الإلكترونية مباشرةً ، أو اعرضها على GitHub < # 958 (تعليق) > ، أو كتم صوت السلسلة https://github.com/notifications/unsubscribe-auth/AMHzdCQ_jJ9ogDm1jaNSLB6wCbfP08XOks5tKZT8gaJpZM4MW6we .

نجح هذا. شكرا جزيلا.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات