[PYTHON] Speicherverlust trat nach dem Lernen von DQN mit Tensorflow == 2.0.0 auf

Einführung

Ich habe das kürzlich in meiner Forschung verwendete DQN mit einigen Schwierigkeiten implementiert, und als ich davon erfuhr, verbrauchte es ungewöhnlich viel Speicher, und ich brauchte eine Woche, um die Ursache zu untersuchen. Ich möchte einfach ein Protokoll führen, damit eine Person wie ich nicht erscheint.

Umgebung

python==3.7 Tensorflow==2.0.0 Ubuntu 18.04

Phänomen, das tatsächlich auftrat

Ich habe einen im Labor installierten Lernserver namens DeepStation verwendet. Es hat GTX1080ti * 4 und 64 GB RAM. Selbst wenn ich es gezwungen habe, ein wenig zu arbeiten, ist nichts Seltsames passiert. Es trat nicht auf, wenn das End-to-End-Diskriminierungsmodell tatsächlich normal trainiert wurde.

Ich hatte jedoch ein Problem beim Lernen mit DQN. Der folgende Artikel wurde dieses Mal als Referenz für die Implementierung von DQN verwendet.

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

Als ich diesen Quellcode ausführte und ihn unbeaufsichtigt ließ, überschritt er in etwa drei Stunden 64 GB Arbeitsspeicher und stürzte mit Speicherüberschreitung ab. Zuerst dachte ich, es gäbe ein Problem mit meinem Quellcode, also überprüfte ich den Quellcode Zeile für Zeile, aber es fiel mir schwer, kein bestimmtes Problem zu finden. Ursprünglich ist es weniger wahrscheinlich, dass Python Speicherverluste verursacht, daher war ich mir dessen nicht wirklich bewusst.

Wie Sie diesem Quellcode entnehmen können, wird model.fit () jedes Mal aufgerufen, wenn episide den Schwellenwert überschreitet, um nach und nach zu lernen. Das Problem war hier. Wenn Sie sich Folgendes ansehen, werden Sie ähnliche Symptome feststellen.

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

Wenn man dies betrachtet, ist es kein großes Problem, model.fit und model.predict mehrmals auszuführen, und es scheint, dass ein Speicherverlust dadurch sehr oft aufgetreten ist. Wahrscheinlich denke ich, dass das von model.fit oder model.predict aufgerufene Modell beibehalten wurde, ohne freigegeben zu werden.

Lösungen

Grundsätzlich ist es in Ordnung, wenn Sie die Version von Tensorflow aktualisieren. Ich habe es durch die Installation von tenosorflow == 2.3.0 gelöst.

Ich hatte nicht erwartet, dass dies eine Woche dauern würde. Ich dachte, dass ein Speicherverlust wirklich passiert. Als ich mit jupyter-lab lief, konnte ich mit ssh keine Verbindung zum Server herstellen, da der Speicher aufgrund eines Fehlers nicht sofort freigegeben wurde, sodass ich ziemlich ungeduldig war. Selbst wenn Sie über eine große Menge an Speicher verfügen, ist es sicher, die Verwendung von Python-Speicher ohne übermäßiges Vertrauen einzuschränken. Das mache ich jetzt. Sie können auf die folgenden Artikel verweisen.

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

Schließlich

Obwohl ich bei DQN studierte, bekam ich nicht viele ähnliche Informationen, so dass ich Schwierigkeiten hatte, sie zu verstehen. Ich hoffe, das wird Min-san helfen.

Recommended Posts

Speicherverlust trat nach dem Lernen von DQN mit Tensorflow == 2.0.0 auf
Versuchen Sie es mit TensorFlow
Implementieren Sie DQN (vollständige Version) mit Tensorflow
[Python] Probieren Sie mit Keras-RL ganz einfach erweitertes Lernen (DQN) aus
Zundokokiyoshi mit TensorFlow
Brechen Sie Blöcke mit Tensorflow