web-dev-qa-db-fra.com

Comment puis-je vider la mémoire du GPU avec CUDA (la réinitialisation physique n'est pas disponible)

Mon programme CUDA s'est arrêté pendant l'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.

J'utilise une GTX 580 pour laquelle 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 auparavant.

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

La question est donc la suivante: existe-t-il un moyen de vider la mémoire de l'appareil dans cette situation?

23
timdim

Bien que cela ne soit pas nécessaire dans des circonstances autres que des circonstances exceptionnelles, la méthode recommandée pour ce faire sur les hôtes Linux consiste à décharger le pilote nvidia en faisant

$ rmmod nvidia 

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

$ modprobe nvidia

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

Cette réponse a été assemblée à partir de commentaires et publiée en tant que wiki de communauté pour obtenir cette question de la liste sans réponse de la balise CUDA

10
talonmies

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
                     username   2057  F...m  compiz
                     username   2759  F...m  chrome
                     username   2777  F...m  chrome
                     username   20450 F...m  python
                     username   20699 F...m  python

Ensuite, supprimez le PID dont vous n’avez plus besoin le htop ou avec

Sudo kill -9 PID.

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

35
ksooklall

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

Sudo kill -9 PID.

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

5
ailihong

sur macOS (/ OS X), si une autre personne a des problèmes avec le système d’exploitation fuyant apparemment:

  • https://github.com/phvu/cuda-smi est utile pour vérifier rapidement la mémoire disponible
  • Quitter les applications semble libérer la mémoire utilisée. Quittez tout ce dont vous n’avez pas besoin ou quittez les applications une par une pour voir la quantité de mémoire utilisée.
  • Si cela ne suffit pas (quitter environ 10 applications libérées pour 500 Mo/15% pour moi), le plus gros consommateur est de loin WindowServer. Vous pouvez forcer le quitter, ce qui va également tuer toutes les applications que vous avez en cours d'exécution et vous déconnecter. Mais c’est un peu plus rapide qu’un redémarrage et m’a ramené à 90% de mémoire libre sur le périphérique cuda. 
4
MattW.

Premier type 

nvidia-smi

puis sélectionnez le PID que vous voulez tuer

Sudo kill -9 PID
0
Ashiq Imran