Pytorch: خطأ وقت التشغيل: قتل عامل DataLoader بالإشارة: قُتل.

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

وصف المشكلة

Traceback (آخر مكالمة أخيرة):
ملف "/usr/lib/python3.5/runpy.py" ، السطر 184 ، في _run_module_as_main
"__main__" ، mod_spec)
ملف "/usr/lib/python3.5/runpy.py" ، السطر 85 ، في _run_code
exec (كود ، run_globals)
ملف "/media/zonstlab0/c3e7052f-24ed-4743-8506-fb7b8c6f0ba7/zonstlab0/myluo/Diagnosis/main_PVC.py" ، السطر 161 ، في
قطار (حقبة)
ملف "/media/zonstlab0/c3e7052f-24ed-4743-8506-fb7b8c6f0ba7/zonstlab0/myluo/Diagnosis/main_PVC.py" ، السطر 104 ، في القطار
لـ batch_idx (البيانات ، الملصق) في التعداد (train_loader):
ملف "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py" ، السطر 280 ، في __next__
idx ، الدفعة = self._get_batch ()
ملف "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py" ، السطر 259 ، في _get_batch
إرجاع self.data_queue.get ()
ملف "/usr/lib/python3.5/queue.py" ، السطر 164 ، في get
self.not_empty.wait ()
ملف "/usr/lib/python3.5/threading.py" ، السطر 293 ، قيد الانتظار
waiter.acquire ()
ملف "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py" ، السطر 178 ، في المعالج
_ error_if_any_worker_fails ()
خطأ وقت التشغيل: قتل عامل DataLoader (pid 4161) بالإشارة: قتل.

الشفرة

https://github.com/Lmy0217/MedicalImaging/blob/pve/main_PVC.py#L79

معلومات النظام

إصدار PyTorch: 0.4.0
هل بناء التصحيح: لا
تستخدم CUDA لبناء PyTorch: 9.0.176

نظام التشغيل: Ubuntu 16.04.4 LTS
إصدار مجلس التعاون الخليجي: (Ubuntu 5.4.0-6ubuntu1 ~ 16.04.9) 5.4.0 20160609
إصدار CMake: الإصدار 3.5.1

إصدار بايثون: 3.5
هل CUDA متاح: نعم
إصدار وقت تشغيل CUDA: تعذر التجميع
نماذج وتكوين وحدة معالجة الرسومات: GPU 0: TITAN Xp
إصدار برنامج تشغيل Nvidia: 384.130
إصدار cuDNN: ربما يكون أحد الإصدارات التالية:
/usr/lib/x86_64-linux-gnu/libcudnn.so.7.1.2
/usr/lib/x86_64-linux-gnu/libcudnn_static_v7.a

إصدارات المكتبات ذات الصلة:
[نقطة 3] numpy (1.14.3)
[pip3] pytorchviz (0.0.1)
[pip3] شعلة (0.4.0)
[pip3] torchfile (0.1.0)
[النقطة 3] torchvision (0.2.1)
[كوندا] لا يمكن جمع

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

لقد واجهت نفس المشكلة مؤخرًا.

إذا كنت تستخدم docker لتشغيل برنامج PyTorch ، مع احتمال كبير ، فذلك لأن الذاكرة المشتركة لرسو السفن ليست كبيرة بما يكفي لتشغيل البرنامج بالحجم المحدد للدفعة.

الحلول لهذا الظرف هي:

  1. استخدم حجم دفعة أصغر لتدريب نموذجك.
  2. اخرج من وحدة الإرساء الحالية ، وأعد تشغيل عامل الإرساء باستخدام "--shm-size = 16g" أو مساحة ذاكرة مشتركة أكبر اعتمادًا على جهازك.

آمل أن يساعد هذا أولئك الذين لديهم نفس المشكلة.: + 1:

ال 20 كومينتر

تم قتل عملية عامل أداة تحميل البيانات الخاصة بك بواسطة إشارة

SsnL ماذا علي أن أفعل؟

@ Lmy0217 يمكنك محاولة الجري باستخدام num_workers=0 ومعرفة ما إذا كان يعطيك خطأ أفضل (لأنه لا يستخدم عمليات فرعية).

SsnL لقد قمت بتعيين num_workers=0 ومن ثم لا توجد أخطاء.

ثم هناك شيء ما في مجموعة البيانات الخاصة بك __getitem__ لا يحب المعالجة المتعددة. ما في هناك؟

SsnL ولكن عندما قمت بتعيين num_workers=1 ، فإن الكود الخاص بي يعمل في وقت ما.

يبدو أنه لا يوجد خطأ منعزل ، ولكن هناك شيء ما في مجموعة بيانات المستخدم قد لا يحب المعالجة المتعددة. إغلاق المشكلة لقيادتها إلى https://discuss.pytorch.org

لقد واجهت نفس المشكلة مؤخرًا.

إذا كنت تستخدم docker لتشغيل برنامج PyTorch ، مع احتمال كبير ، فذلك لأن الذاكرة المشتركة لرسو السفن ليست كبيرة بما يكفي لتشغيل البرنامج بالحجم المحدد للدفعة.

الحلول لهذا الظرف هي:

  1. استخدم حجم دفعة أصغر لتدريب نموذجك.
  2. اخرج من وحدة الإرساء الحالية ، وأعد تشغيل عامل الإرساء باستخدام "--shm-size = 16g" أو مساحة ذاكرة مشتركة أكبر اعتمادًا على جهازك.

آمل أن يساعد هذا أولئك الذين لديهم نفس المشكلة.: + 1:

لقد قمت بتشغيله في وحدة المعالجة المركزية (CPU) وواجهت أيضًا خطأ: RuntimeError: قتل عامل DataLoader (pid 6790) بالإشارة: قتل.

تابعت SsnL ، تم قتلها وطباعتها في المحطة:

عدد المثيلات لكل حاوية: [85308 31958]
الاختبار: [0/5000] إيتا: 8:26:32 model_time: 5.8156 (5.8156) المقيم_الوقت: 0.1168 (0.1168) الوقت: 6.0785 البيانات: 0.1460
قتل

ساعدني من فضلك. شكرا جزيلا.

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

لقد اختبرت أداة تحميل البيانات بمفردها وقمت بتعيين عدد العمال = 0 ، فقد قُتل بشكل غير متوقع بعد عدة تكرارات k. كانت مجموعة بيانات ms coco وذاكرة النظام 64 جيجابايت لذا أعتقد أنه لا ينبغي أن يكون مشكلة الذاكرة.

نفس الخطأ مع نموذج الاختبار

هل تم إصلاحه أم؟ هل مازال هناك؟

SystemErrorWang نفس الحالة. لدي أكثر من 252G من الذاكرة ولكن لا يزال يتم قتل Dataloader. لقد راقبت استخدام ذاكرة النظام باستخدام الأمر htop وكان استخدام الذاكرة دائمًا أقل من 30 جيجا إذا قمت بتعيين num_workers = 16. أنا أستخدم نظام ubuntu 18.04 وليس عامل الإرساء. هذا بالتأكيد لا ينبغي أن يكون مشكلة الذاكرة. (راجع للشغل ، إصدار pytorch هو 1.4.0 في python 3.7.4)

كيف تصلحها؟

عملت زيادة ذاكرة وحدة المعالجة المركزية وتقليل العاملين إلى 10 بدلاً من 20 بالنسبة لي. قد يكون مرتبطًا أيضًا باستخدام وحدات معالجة رسومات متعددة مع nn.DataParallel. لقد رأيت هذا فقط عند تدريب النماذج الكبيرة التي تحتاج إلى 2-4 وحدات معالجة رسومات.

هل كان هناك إصلاح رسمي لهذا؟ أنا أختبر نموذجًا بسيطًا للغاية على 8 مراكز و 32 جيجابايت من الذاكرة وما زلت أتلقى هذا الخطأ بغض النظر عن مدى انخفاضه الذي قمت بتعيينه num_workers (بخلاف 0)

@ import-antigravity هل يمكنك مشاركة رمز مجموعة البيانات؟ يحدث هذا عادةً بسبب مجموعة من رمز البيئة ومجموعة البيانات.

يحدث هذا عادةً بسبب مجموعة من رمز البيئة ومجموعة البيانات.

تضمين التغريدة
ماذا تقصد بذلك؟ هل يمكنك إعطاء بعض الأمثلة الدنيا لتوضيح الحالات السيئة؟

SsnL في هذه الحالة كانت مجموعة البيانات تسحب عينات من التوزيع:

from torch import Tensor
from torch.distributions import Distribution
from torch.utils.data import Dataset

class ProceduralDataset(Dataset, ABC):
    <strong i="7">@property</strong>
    <strong i="8">@abstractmethod</strong>
    def distribution(self) -> Distribution:
        pass

    def __init__(self, num_samples: int):
        self._n = num_samples
        self._samples = None

    def __getitem__(self, i):
        if self._samples is None:
            self._samples = self.distribution.sample((self._n,))
        return self._samples[i], Tensor()

    def __len__(self):
        return self._n

    def __iter__(self):
        self._i = 0
        return self

    def __iter__(self):
        self._i = 0
        return self

    def __next__(self):
        self._i += 1
        return self[self._i - 1]

لقد واجهت نفس المشكلة مؤخرًا. أنا أقوم بتشغيل نماذج محليًا.

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

عندما أزلت البيئات الافتراضية ، اختفى الخطأ.

خلق بيئات افتراضية مثل هذه

virtualenv ~/env
source ~/env/bin/activate

وإزالتها هكذا

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

القضايا ذات الصلة

ikostrikov picture ikostrikov  ·  3تعليقات

a1363901216 picture a1363901216  ·  3تعليقات

miguelvr picture miguelvr  ·  3تعليقات

bartvm picture bartvm  ·  3تعليقات

negrinho picture negrinho  ·  3تعليقات