Pytorch: RuntimeError : le travailleur DataLoader est tué par le signal : Killed.

Créé le 28 juin 2018  ·  20Commentaires  ·  Source: pytorch/pytorch

Description du problème

Traceback (appel le plus récent en dernier) :
Fichier "/usr/lib/python3.5/runpy.py", ligne 184, dans _run_module_as_main
"__main__", mod_spec)
Fichier "/usr/lib/python3.5/runpy.py", ligne 85, dans _run_code
exec(code, run_globals)
Fichier "/media/zonstlab0/c3e7052f-24ed-4743-8506-fb7b8c6f0ba7/zonstlab0/myluo/Diagnosis/main_PVC.py", ligne 161, dans
train (époque)
Fichier "/media/zonstlab0/c3e7052f-24ed-4743-8506-fb7b8c6f0ba7/zonstlab0/myluo/Diagnosis/main_PVC.py", ligne 104, en train
pour batch_idx, (données, étiquette) dans enumerate(train_loader):
Fichier "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", ligne 280, dans __next__
idx, batch = self._get_batch()
Fichier "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", ligne 259, dans _get_batch
retourner self.data_queue.get()
Fichier "/usr/lib/python3.5/queue.py", ligne 164, dans get
self.not_empty.wait()
Fichier "/usr/lib/python3.5/threading.py", ligne 293, en attente
serveur.acquire()
Fichier "/usr/local/lib/python3.5/dist-packages/torch/utils/data/dataloader.py", ligne 178, dans le gestionnaire
_error_if_any_worker_fails()
RuntimeError : le travailleur DataLoader (pid 4161) est tué par le signal : Killed.

Code

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

Information système

Version PyTorch : 0.4.0
La version de débogage est-elle : Non
CUDA utilisé pour construire PyTorch : 9.0.176

Système d'exploitation : Ubuntu 16.04.4 LTS
Version GCC : (Ubuntu 5.4.0-6ubuntu1~16.04.9) 5.4.0 20160609
Version CMake : version 3.5.1

Version Python : 3.5
CUDA est-il disponible : Oui
Version d'exécution CUDA : impossible de collecter
Modèles et configuration de GPU : GPU 0 : TITAN Xp
Version du pilote Nvidia : 384.130
Version cuDNN : Probablement l'une des versions suivantes :
/usr/lib/x86_64-linux-gnu/libcudnn.so.7.1.2
/usr/lib/x86_64-linux-gnu/libcudnn_static_v7.a

Versions des bibliothèques concernées :
[pip3] numpy (1.14.3)
[pip3] pytorchviz (0.0.1)
[pip3] torche (0.4.0)
[pip3] fichier torche (0.1.0)
[pip3] vision aux flambeaux (0.2.1)
[conda] Impossible de collecter

Commentaire le plus utile

J'ai rencontré le même problème récemment.

Si vous utilisez le docker pour exécuter le programme PyTorch, avec une forte probabilité, c'est parce que la mémoire partagée de docker n'est PAS assez grande pour exécuter votre programme dans la taille de lot spécifiée.

Les solutions pour cette circonstance sont :

  1. utilisez une taille de lot
  2. quittez le docker actuel et réexécutez le docker avec "--shm-size=16g" ou un espace mémoire partagé plus grand selon votre machine.

J'espère que cela pourra aider ceux qui ont le même problème .:+1:

Tous les 20 commentaires

votre processus de travail du chargeur de données a été tué par un signal

@SsnL que dois-je faire ?

@ Lmy0217 Vous pouvez essayer d'exécuter avec num_workers=0 et voir si cela vous donne une meilleure erreur (car il n'utilise pas de sous-processus).

@SsnL J'ai défini num_workers=0 et il n'y a aucune erreur.

Ensuite, quelque chose dans votre ensemble __getitem__ données

@SsnL Mais lorsque je définis num_workers=1 , mon code fonctionne parfois.

il semble qu'il n'y ait pas de bogue isolé, mais quelque chose dans l'ensemble de données de l'utilisateur qui pourrait ne pas aimer le multitraitement. Clôturer le problème pour le diriger vers https://discuss.pytorch.org

J'ai rencontré le même problème récemment.

Si vous utilisez le docker pour exécuter le programme PyTorch, avec une forte probabilité, c'est parce que la mémoire partagée de docker n'est PAS assez grande pour exécuter votre programme dans la taille de lot spécifiée.

Les solutions pour cette circonstance sont :

  1. utilisez une taille de lot
  2. quittez le docker actuel et réexécutez le docker avec "--shm-size=16g" ou un espace mémoire partagé plus grand selon votre machine.

J'espère que cela pourra aider ceux qui ont le même problème .:+1:

Je l'ai exécuté dans le processeur et j'ai également rencontré une erreur : RuntimeError : le travailleur DataLoader (pid 6790) est tué par le signal : Killed.

J'ai suivi @SsnL , il a été tué et imprimé dans le terminal :

Nombre d'instances par casier : [85308 31958]
Test : [ 0/5000] eta : 8:26:32 model_time : 5.8156 (5.8156) evaluator_time : 0.1168 (0.1168) time : 6.0785 data : 0.1460
Tué

Aidez-moi, s'il vous plaît. Merci beaucoup.

J'ai rencontré le même problème, même si j'ai défini num_workers=0, la formation s'est terminée de manière inattendue avec uniquement les informations "Killed". j'aimerais savoir si c'est à cause d'un problème de chargeur de données ou de mémoire ou autre chose

J'ai testé le chargeur de données seul et défini num_workers=0, il a été tué de manière inattendue après plusieurs k itérations. c'était le jeu de données ms coco et la mémoire système est de 64 Go, donc je pense que cela ne devrait pas être le problème de mémoire.

même erreur avec le modèle de test

c'est fixe ou ? est-ce toujours là ?

@SystemErrorWang Même condition. J'ai plus de 252 Go de mémoire, mais le Dataloader est toujours tué. J'ai surveillé l'utilisation de la mémoire système avec la commande htop et l'utilisation de la mémoire était toujours inférieure à 30G si je définissais num_workers = 16. J'utilise le système ubuntu 18.04 et non docker. Cela ne devrait certainement pas être le problème de la mémoire. (d'ailleurs, la version pytorch est 1.4.0 sur python 3.7.4)

Alors... Comment y remédier ?

L'augmentation de la mémoire CPU et la diminution des travailleurs à 10 au lieu de 20 ont fonctionné pour moi. Peut également être lié à l'utilisation de plusieurs GPU avec nn.DataParallel. Je n'ai vu cela que lors de la formation de gros modèles nécessitant 2 à 4 GPU.

Y a-t-il eu un correctif officiel à cela? Je teste un modèle très simple sur 8 cœurs et 32 ​​Go de mémoire et j'obtiens toujours cette erreur, peu importe à quel point je mets num_workers (autre que 0)

@import-antigravity Pourriez-vous partager le code du jeu de données ? Cela est généralement causé par une combinaison de code d'environnement et de jeu de données.

Cela est généralement causé par une combinaison de code d'environnement et de jeu de données.

@SsnL
que veux-tu dire? pouvez-vous donner quelques exemples minimaux pour illustrer les mauvais cas ?

@SsnL dans ce cas, l'ensemble de données ne faisait que tirer des échantillons d'une distribution :

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]

J'ai rencontré le même problème récemment. J'exécute des modèles localement.

Cependant, j'ai créé plusieurs environnements virtuels avec la commande virtualenv. L'erreur peut être liée à cela, car mon ordinateur n'avait pas assez de mémoire pour exécuter le chargeur de données avec de nombreux travailleurs.

Lorsque j'ai supprimé les environnements virtuels, l'erreur a disparu.

Créer des environnements virtuels comme celui-ci

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

Et les supprimer comme ça

rm -rf env
Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

szagoruyko picture szagoruyko  ·  3Commentaires

dablyo picture dablyo  ·  3Commentaires

cdluminate picture cdluminate  ·  3Commentaires

negrinho picture negrinho  ·  3Commentaires

soumith picture soumith  ·  3Commentaires