web-dev-qa-db-fra.com

Comment corriger cette étrange erreur: "RuntimeError: erreur CUDA: mémoire insuffisante"

J'ai exécuté un code sur le réseau d'apprentissage en profondeur, j'ai d'abord formé le réseau et cela fonctionne bien, mais cette erreur se produit lors de l'exécution sur le réseau de validation.

J'ai cinq époques, chaque époque a un processus de formation et de validation. J'ai rencontré l'erreur lors de la validation dans la première époque. Donc je n'exécute pas le code de validation, j'ai trouvé que le code peut s'exécuter à la deuxième époque et ne comporter aucune erreur.

Mon code:

for Epoch in range(10,15): # Epoch: 10~15
    if(options["training"]["train"]):
        trainer.Epoch(model, Epoch)

    if(options["validation"]["validate"]):
    #if(Epoch == 14):
        validator.Epoch(model)

enter image description hereenter image description here

Je pense que le code de validation peut avoir quelques bugs. Mais je ne trouve pas ça.

5
xiaoding chen

C'est peut-être pour un certain nombre de raisons que j'essaie de signaler dans la liste suivante:

  1. Paramètres des modules : vérifiez le nombre de dimensions de vos modules. Les couches linéaires qui transforment un grand tenseur d'entrée (par exemple, la taille 1000) en un autre grand tenseur de sortie (par exemple, la taille 1000) nécessiteront une matrice dont la taille est (1000, 1000).
  2. Nombre maximum d'étapes du décodeur RNN : si vous utilisez un décodeur RNN dans votre architecture, évitez de faire une boucle pour un grand nombre d'étapes. Habituellement, vous fixez un nombre donné d'étapes de décodage qui est raisonnable pour votre ensemble de données.
  3. Utilisation des tenseurs : minimisez le nombre de tenseurs que vous créez. Le garbage collector ne les libérera pas tant qu'ils ne seront pas hors de portée.
  4. Taille du lot : augmentez progressivement la taille de votre lot jusqu'à ce que vous soyez à court de mémoire. C'est une astuce courante que même une bibliothèque célèbre implémente (voir le biggest_batch_first description du BucketIterator dans AllenNLP.

De plus, je vous recommande de consulter la documentation officielle de PyTorch: https://pytorch.org/docs/stable/notes/faq.html

1
Alessandro Suglia