118 votes

Comment puis-je vider la mémoire GPU en utilisant CUDA (le redémarrage physique n'est pas disponible)

Mon programme CUDA a planté pendant son exécution, avant que la mémoire ne soit vidée. En conséquence, la mémoire de l'appareil est restée occupée.

Je travaille sur un GTX 580, pour lequel nvidia-smi --gpu-reset n'est pas pris en charge.

Placer cudaDeviceReset() au début du programme n'affecte que le contexte actuel créé par le processus et ne vide pas la mémoire allouée avant cela.

J'accède à un serveur Fedora avec ce GPU à distance, donc la réinitialisation physique est assez compliquée.

Alors, la question est - Y a-t-il un moyen de vider la mémoire de l'appareil dans cette situation?

208voto

ksooklall Points 1992

Vérifiez ce qui utilise votre mémoire GPU avec

sudo fuser -v /dev/nvidia*

Votre sortie ressemblera à ceci :

                     USER        PID  ACCESS COMMAND
/dev/nvidia0:        root       1256  F...m  Xorg
                     nom d'utilisateur   2057  F...m  compiz
                     nom d'utilisateur   2759  F...m  chrome
                     nom d'utilisateur   2777  F...m  chrome
                     nom d'utilisateur   20450 F...m  python
                     nom d'utilisateur   20699 F...m  python

Ensuite, tuez le PID que vous n'avez plus besoin sur htop ou avec

sudo kill -9 PID.

Dans l'exemple ci-dessus, Pycharm consommait beaucoup de mémoire donc j'ai tué 20450 et 20699.

70voto

Ashiq Imran Points 124

First type

nvidia-smi

puis sélectionnez le PID que vous voulez tuer

sudo kill -9 PID

18voto

Lukas Points 159

Pour ceux qui utilisent python :

import torch, gc
gc.collect()
torch.cuda.empty_cache()

16voto

talonmies Points 41460

Bien que cela soit normalement inutile de le faire autrement que dans des circonstances exceptionnelles, la manière recommandée de le faire sur des hôtes linux est de décharger le pilote nvidia en faisant

$ rmmod nvidia

avec les privilèges root appropriés, puis de le recharger avec

$ modprobe nvidia

Si la machine exécute X11, vous devrez arrêter ceci manuellement au préalable, et le redémarrer ensuite. Les processus d'initialisation du pilote devraient éliminer tout état antérieur sur le périphérique.

Cette réponse a été assemblée à partir de commentaires et postée en tant que wiki communautaire pour retirer cette question de la liste des sans réponse pour la balise CUDA

12voto

ailihong Points 129

J'ai également eu le même problème, et j'ai vu une bonne solution sur Quora, en utilisant

sudo kill -9 PID.

voir https://www.quora.com/How-do-I-kill-all-the-computer-processes-shown-in-nvidia-smi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X