Résolution de problèmes|À propos du résumé et de la solution des erreurs de code CUDA

Ce blog concerne principalement le résumé des erreurs courantes de code CUDA et des solutions ~

1. Erreur d'exécution RuntimeError

1.1.RuntimeError : Erreur CUDA : mémoire insuffisante

Les erreurs du noyau CUDA peuvent être signalées de manière asynchrone lors d'un autre appel d'API, de sorte que le stacktrace ci-dessous peut être incorrect.

Pour le débogage, pensez à passer CUDA_LAUNCH_BLOCKING=1.

Erreur lors de l'analyse :

Le programme fonctionnait bien, le code fonctionnait bien, la mémoire vidéo était toujours inutile et la mémoire vidéo était suffisante, le GPU était peut-être occupé,

Cela peut être dû au problème de cache de la formation précédente, car il s'exécute dans le conteneur Docker, arrêtez donc d'abord le conteneur Docker, puis démarrez le conteneur ~

1.2.RuntimeError : erreur cuDNN : CUDNN_STATUS_INTERNAL_ERROR

erreurs possibles

  • La version de pytorch et cuda est fausse

  • Mémoire vidéo insuffisante

Reportez-vous à un autre code de test de blog

# True:每次返回的卷积算法将是确定的,即默认算法。
torch.backends.cudnn.deterministic = True
# 程序在开始时花额外时间,为整个网络的每个卷积层搜索最适合它的卷积实现算法
# 实现网络的加速。
torch.backends.cudnn.benchmark = True

solution finale

Définir le travail numérique sur 0

1.3.RuntimeError : CUDA à court de mémoire

①RuntimeError : CUDA à court de mémoire. Tentative d'allocation de 152,00 Mio (GPU 0 ; capacité totale de 23,65 Gio ; 13,81 Gio déjà alloués ; 118,44 Mio libres ; 14,43 Gio réservés au total par PyTorch) Si la mémoire réservée est >> la mémoire allouée, essayez de définir max_split_size_mb pour éviter la fragmentation. Voir la documentation pour la gestion de la mémoire et PYTORCH_CUDA_ALLOC_CONF

Dépassant la mémoire occupée par le GPU, les ressources GPU locales devraient être pleinement suffisantes.Cependant, pendant le processus de formation pytorch, en raison des paramètres de rétropropagation et de transmission des paramètres du réseau neuronal tels que la descente de gradient , une grande quantité de mémoire GPU sera occupée. , il doit donc être réduit .

Solution:

  • Réduire le lot, c'est-à-dire réduire la taille de l'échantillon de formation de mots

  • Libérer la mémoire vidéo : torch.cuda.empty_cache()

②torch.cuda.OutOfMemoryError : CUDA à court de mémoire. Tentative d'allocation de 128,00 Mio (GPU 0 ; capacité totale de 23,65 Gio ; 22,73 Gio déjà alloués ; 116,56 Mio libres ; 22,78 Gio réservés au total par PyTorch) Si la mémoire réservée est >> la mémoire allouée, essayez de définir max_split_size_mb pour éviter la fragmentation. Voir la documentation pour la gestion de la mémoire et PYTORCH_CUDA_ALLOC_CONF

torch.cuda.OutOfMemoryError : CUDA n'a pas de mémoire. Tentative d'allocation de 128,00 Mio (GPU 0 ; 23,65 Gio au total ; 22,73 Gio alloués ; 116,56 Mio libres ; 22,78 Gio au total réservés par PyTorch) Si la mémoire réservée >> la mémoire allouée, essayez de définir max_split_size_mb pour éviter la fragmentation. Voir la documentation pour la gestion de la mémoire et PYTORCH_CUDA_ALLOC_CONF.

Analyse de la cause de l'erreur :

Lors de la formation du modèle d'apprentissage en profondeur, le code ne libère pas la mémoire vidéo à chaque fois qu'il est formé

solution:

Afficher nvidia-smi

À ce moment , le GPU fonctionne sans programme et la mémoire vidéo est toujours occupée, comme le montre la figure

Utiliser la requête de fusion

fuser -v /dev/nvidia*

(Facultatif) Si vous entrez la commande ci-dessus et qu'elle vous indique qu'il n'y a pas de fuser, installez

apt-get install  psmisc

Si Impossible de localiser le package XXX apparaît, alors

apt-get update

Force (-9) pour tuer le processus, entrez la commande suivante

kill -9 PID

Exemple de diagramme

Libérez simplement la mémoire vidéo ~

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44649780/article/details/128911586
conseillé
Classement