Une fuite de mémoire s'est produite après l'apprentissage du DQN avec tensorflow == 2.0.0

introduction

J'ai récemment mis en œuvre le DQN utilisé dans mes recherches avec une certaine difficulté, et quand j'en ai entendu parler, il a consommé une quantité anormale de mémoire, et il m'a fallu une semaine pour en rechercher la cause. Je voudrais garder une trace facilement pour qu'une personne comme moi n'apparaisse pas.

environnement

python==3.7 Tensorflow==2.0.0 Ubuntu 18.04

Phénomène qui s'est réellement produit

J'utilisais un serveur d'apprentissage appelé DeepStation installé dans le laboratoire. Il a GTX1080ti * 4 et 64 Go de RAM, donc même si je l'ai forcé à fonctionner un peu, rien d'étrange ne s'est produit. Cela ne s'est pas produit lors de la formation normale du modèle de discrimination de bout en bout.

Cependant, j'ai eu un problème en apprenant avec DQN. L'article suivant a été utilisé comme référence pour l'implémentation de DQN cette fois.

https://qiita.com/sugulu_Ogawa_ISID/items/bc7c70e6658f204f85f9

Lorsque j'ai exécuté ce code source et que je l'ai laissé sans surveillance, il a dépassé 64 Go de mémoire en environ trois heures et s'est écrasé avec mémoire. Au début, je pensais qu'il y avait un problème avec mon code source, alors j'ai vérifié le code source ligne par ligne, mais j'avais du mal à trouver aucun problème particulier. À l'origine, Python est moins susceptible de provoquer une fuite de mémoire, donc je n'en étais pas vraiment conscient.

Comme vous pouvez le voir à partir de ce code source, chaque fois qu'episide dépasse le seuil, model.fit () est appelé pour apprendre petit à petit. Le problème était là. Si vous regardez ce qui suit, vous trouverez des symptômes similaires.

https://github.com/tensorflow/tensorflow/issues/33030

En regardant cela, ce n'est pas un gros problème de faire model.fit et model.predict plusieurs fois, et il semble qu'une fuite de mémoire se soit produite en faisant cela très souvent. Probablement, je pense que le modèle appelé par model.fit ou model.predict a été retenu sans être publié.

Solution

En gros, ce n'est pas grave si vous mettez à jour la version de tensorflow. Je l'ai résolu en installant tenosorflow == 2.3.0.

Je ne m'attendais pas à ce que cela prenne une semaine. Je pensais que cette fuite de mémoire se produisait vraiment. Quand j'utilisais jupyter-lab, je ne pouvais pas me connecter au serveur avec ssh car il ne libérait pas la mémoire immédiatement en raison d'une erreur, donc j'étais assez impatient. Même si vous disposez d'une grande quantité de mémoire, il est prudent de limiter l'utilisation de la mémoire python sans trop de confiance. Je fais ça maintenant. Vous pouvez vous référer aux articles suivants.

https://blog.imind.jp/entry/2019/08/10/022501

finalement

Même si j'étudiais avec DQN, je n'ai pas obtenu beaucoup d'informations similaires, j'ai donc eu du mal à les comprendre. J'espère que cela sera utile à Min-san.

Recommended Posts

Une fuite de mémoire s'est produite après l'apprentissage du DQN avec tensorflow == 2.0.0
Essayez l'apprentissage en profondeur avec TensorFlow
Implémenter DQN (version complète) avec Tensorflow
[Python] Essayez facilement l'apprentissage amélioré (DQN) avec Keras-RL
Zundokokiyoshi avec TensorFlow
Casser des blocs avec Tensorflow